問題タブ [pyparsing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
246 参照

parsing - 正式な文法を使用するように多目的ログ ファイル パーサーを書き直すと、保守性が向上しますか?

TLDR: 形式ごとに異なるコードを使用して多目的パーサーを手動で作成した場合、パーサー コードの 1 つのチャンクと ANTLR、PyParsing、または同様の文法を使用して各形式を指定すると、長期的にはうまく機能しますか?

コンテキスト: 私の仕事には、約 50 の異なるベンチマークからの多くのベンチマーク ログ ファイルが含まれます。XML、HTML、CSV、および文書化された仕様のない多くの独自のものがあります。私と同僚がこのデータを手で入力する時間を節約するために、統一されたインターフェイスで定期的に扱うすべての形式を処理する解析ツールを作成しました。ただし、デザインはそれほどきれいではありません。

これを Python で書き、Parser クラスを作成しました。各ファイル形式は、パーサーの read() メソッドに独自のコードを提供する実装として処理されます。文法を使用して各形式を理解する Parser の定義を 1 つだけ持つというアイデアは気に入っていますが、これまでに行ったことはありません。

時間をかける価値はありますか? また、リファクタリングが完了したら、将来、他の初心者が作業しやすくなりますか?

0 投票する
3 に答える
931 参照

python - パイパーシングの質問

このコードは機能します:

私は2つの問題で立ち往生しています:

1 - カスタム関数を使用してトークンを解析する方法。たとえば、正規表現の代わりにカスタム ロジックを使用して、数値が郵便番号かどうかを判断したいとします。それ以外の:

多分:

2 - 文字列が TO を解析するものをどのように判断しますか。「80001」は「zipcode」に解析されますが、pyparsing を使用してこれを判断するにはどうすればよいですか? 文字列の内容を解析するのではなく、単にそれがどのような種類のクエリであるかを判断するだけです。

0 投票する
3 に答える
7062 参照

python - Python - Unicode 文字の pyparse

:) w = Word(printables) を使ってみましたが、うまくいきません。これの仕様をどのように指定すればよいですか。「w」はヒンディー語文字 (UTF-8) を処理するためのものです。

コードは文法を指定し、それに応じて解析します。

英語の文字しかない場合は機能しているため、コードは ascii 形式では正しいですが、コードは unicode 形式では機能していません。

つまり、671.assess :: ahsaas ::2 という形式のコードがある場合にコードが機能するということです。

つまり、単語を英語形式で解析しますが、Unicode 形式で文字を解析して出力する方法がわかりません。目的のために、英語のヒンディー語の単語の配置にこれが必要です。

Python コードは次のようになります。

ソースファイルの入力文の例が次の場合:

出力は次のようになります:-

出力の説明:- これにより、双方向の位置合わせが実現されます。これは、英語の「modern」の最初の単語がヒンディー語の「AddhUnik」の最初の単語に対応し、その逆も同様であることを意味します。ここでは、文字も双方向マッピングの不可欠な部分であるため、単語として扱われます。したがって、ヒンディー語の WORD '.' を観察すると、null アラインメントがあり、終止符がないため、英語の文に関しては何もマッピングされません。出力の 3 行目は、基本的に、双方向マッピングを実現しようとしている多数の文に対して作業している場合の区切り記号を表します。

ヒンディー語の文章が Unicode(UTF-8) 形式の場合、どのように変更すれば機能しますか?

0 投票する
2 に答える
730 参照

python - ランダムな引用符でCSV文字列をパイパースする

次のような文字列があります。

CSV モジュールを使用してみましたが、引用されているものを無視する方法が見つからなかったため、適合しませんでした。Pyparsing はより良い答えのように見えましたが、すべての文法を宣言する方法が見つかりませんでした。

現在、古い Perl スクリプトを使用して解析していますが、これを Python で記述したいと考えています。私の Perl スニペットが必要な場合は、喜んで提供します。

どんな助けでも大歓迎です。

0 投票する
1 に答える
1103 参照

python - Python/PyParsing: setResultsName の難しさ

呼び出し方を間違えていると思いますsetResultsName()

アイドルから:

私が望む出力:

setResultsName()端末でのみ機能しますか?

0 投票する
1 に答える
3502 参照

python - PyParsing:Combine() は何をしますか?

違いは何ですか:

ありがとう。

更新:私の実験に基づいて、Combine()一致する式を作成しようとしている端末用のようですが、プレーン+は非端末用です。確信はないけど。

0 投票する
2 に答える
556 参照

python - PyParsing: setParseAction() にすべてのトークンが渡されるわけではありません

「CS 2110 or INFO 3300」のような文を解析しています。次のような形式で出力したいと思います。

これを行うには、 を使用できると思いsetParseAction()ました。ただし、次のprintステートメントはstatementParse()、最後のトークンのみが実際に渡されることを示唆しています。

すべてのトークンが渡されると思っていましたが、たったの['INFO', 3300]. 私は何か間違ったことをしていますか?または、目的の出力を生成できる別の方法はありますか?

pyparsing コードは次のとおりです。

0 投票する
4 に答える
5673 参照

python - PyParsing:これはsetParseAction()の正しい使用法ですか?

私はこのような文字列を持っています:

出力したい:

これは私のやり方ですが、まだ完全には理解していません。

これは以下を出力します:

これはそれを行う正しい方法ですか、それとも私は完全にオフですか?

また、の出力は完全に正しくありません。互いに同じ形式course_dataのシンボルのリストを出力したいと思います。course現在、最初のコースは他のコースとは異なります。(これにはがあり{}ますが、他にはありません。)

0 投票する
6 に答える
36688 参照

python - 単純な文法を解析するにはどうすればよいですか?

わかりました、このプロジェクトについてたくさんの小さな質問をしましたが、私が思いついたデザインにはまだあまり自信がありませんので、より広いスケールで質問します.

コースカタログの前提条件の説明を解析しています。ほとんどの場合、記述は特定の形式に従っているため、ほとんどの記述を解析できると思います。

テキストから、コースの前提関係のグラフを生成したいと思います。(データを解析した後、その部分は簡単になります。)

入力と出力の例:

  1. 説明全体が単なるコースの場合は、直接出力されます。

  2. コースが結合されている場合 ("and")、それらはすべて同じリストに出力されます。

  3. コースが切り離されている(「または」)場合、それらは別々のリストにあります

  4. ここでは、"and" と "or" の両方があります。

簡単にするための 1 つの警告: "and"/"or" 句の入れ子は、例 3 に示されているよりも大きくなることはないようです。

これを行う最善の方法は何ですか?PLY から始めましたが、reduce/reduce の競合を解決する方法がわかりませんでした。PLY の利点は、各解析ルールが生成するものを簡単に操作できることです。

PyParse では、 の出力を変更する方法があまり明確ではありませんparseString()。オブジェクトに状態を保持し、そこから出力を構築するという@Alex Martelliのアイデアに基づいて構築することを検討していましたが、それがどのように行われるのが最適かは正確にはわかりません。

たとえば、「または」の場合を処理するには、次のようにします。

どのdisjunctionCourses()小さなフレーズを分離するかをどうやって知るのですか? 得られるのはトークンだけですが、これまでに解析されたものは に格納されているresultため、関数は のどのデータがresultのどの要素に対応するかをどのように判断できtokenますか? トークンを検索してresult、同じデータを持つ要素を見つけることができると思いますが、複雑に感じます...

また、次のようなその他のテキストを含む多くの説明があります。

しかし、そのテキストを解析することは重要ではありません。

この問題にアプローチするより良い方法は何ですか?

0 投票する
3 に答える
619 参照

python - パイパーシングのあいまいさ

PyParser を使用してテキストを解析しようとしています。問題は、空白を含む名前があることです。したがって、私の入力は次のようになります。まず、名前のリスト:

次に、彼らがすること:

もちろん問題は、彼らが行うことが名前の末尾と同じになる可能性があることです。

アクション ラインのパーサーを作成するにはどうすればよいですか? 解析の出力Joe A[Joe, A]. 解析の出力は, of -でJimmy X Cある必要があります。つまり、ペアです。[Jimmy X, C]Jimmy X X[Jimmy X, X][name, action]

名前パーサーを素朴に作成するOneOrMore(RegEx("\S*"))と、行全体が一致し[Jimmy X X]、アクションが表示されないという解析エラーが続きます (名前パーサーによって既に消費されているため)。

注: あいまいな言い回しで、NLP の質問のように見えて申し訳ありません。