問題タブ [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 投票する
2 に答える
747 参照

python - pyparsingに「startswith」メソッドはありますか

ちょっと、テキスト内のいくつかのトークンを検出し、それらを別の文字列に置き換える pyparsing を使用した非常に単純なパーサーを作成しました。問題は、現在、私のコードが完全一致でしか機能しないことです。私がやりたいのは、部分一致も検出することです。たとえば、トークンが「foobar」の場合、「foobarfoo」のような単語に一致させたいと思います。pyparsingでそれを行う方法はありますか? 例を見て、いくつかの調査を行いましたが、何も思いつきませんでした。

ありがとう

編集:

一致するトークンのリストと、テキスト内の単語のリストがあります。したがって、この事実を考慮したソリューションが必要です。トークンのリストは非常に大きくなる可能性があります。

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

performance - pyparsing の起動時間を改善するには?

私は、pyparsing を使用して H248 メッセージを解析する大きな (私にとって) 文法を作成しました。これはテキスト形式であり、約 500 行の pypasing 構成要素があります。パーサーに解析するメッセージを多数入力した場合、平均的なパフォーマンスは許容範囲内であることがわかりました (私の PC ではメッセージあたり約 0.5 秒)。

しかし、私のパーサーの基本的な使用法は、1 つのメッセージを解析して特定の部分をダンプすることであり、それをスタンドアロン プログラムとして作成しました。x86 PC で最初のメッセージを解析するのに 12 秒かかりました (共有ソラリア サーバーでは 1 分 12 秒です!)。では、この起動時間を回避するためのテクニックはあるのでしょうか? psyco を試してみましたが、起動時間は改善されません。

今のところ私がやっていることは、パーサーをインポートして解析要求を受け入れる長寿命サーバーを作成し、次にこのサーバープロセスと対話する別のスタンドアロンプ​​ログラム (非常に頻繁にトリガーされる) を作成して、迅速な応答効果を得ることです。このようにして、解析結果を python オブジェクトとして使用する機会を失います。私の目的を達成するためのより良い方法があるのだろうか?

ところで、12 秒前にパーサーを手動で中断すると、スタック トレースは、streamline() を再帰的に呼び出していたことを示します。

ありがとう!ケビン

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

python - Unicode文全体を取得する

私は次のようBase: Lote Numero 1, Marcelo T de Alvear 500. Demanda: otras palabras.に文を解析しようとしています。最初にテキストをピリオドで分割し、次にコロンの前にあるものをコロンlabelの後の文のとして使用します。今、私は次の定義を持っています:

valueそして一種の作品ですが、それはユニコード文字(そしてアルファベットにないものは何でも)を落とします、そして私はこれではなく全体の文を持ちたいと思っています: 'value': [(([u'Lote', u'Numero', u'1', ',', u'Marcelo', u'T', u'de', u'Alvear', u'500'], {}), 1)

これに取り組む簡単な方法はありますか?

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

python - pyparsing-xmlコメントを解析します

xmlコメントを含むファイルを解析する必要があります。///具体的には、MSコンベンションを使用したac#ファイルです。

これから私は引き抜く必要があるfoobarか、あるいは/// foobar受け入れられるでしょう。(注-xmlをすべて1行にすると、これはまだ機能しません...)

これが私が持っているものです:

および出力するには:

しかし、私は文法が複数行にわたって機能することにあまり成功していません。

(注-上記のサンプルをPython 3.2でテストしました。動作しますが、(私の問題では)値を出力しません)

ありがとう!

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

python - 再帰的なpyparsingは例外をスローしません

pyparsing パーサーからの再帰ステートメントを含む次のスニペットがあります。

これにクエリをフィードすると:

それは得ます:

最後の条件を静かにスキップします。例外はスローされません。

この文字列のエラーをキャッチするにはどうすればよいですか?

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

python - Pyparsing - さまざまな場所に改行があるリテラル テキスト

行末の場所が異なるテキストを含むドキュメントを解析するために pyparsing を使用しています。改行の場所に関係なく、テキストに一致するパーサー式を記述する必要があります。以下は機能しません。

これにより、コンソールに次のように表示されます。

ParserElement.DEFAULT_WHITE_CHARS には改行が含まれているため、両方の文字列が私の式と一致しない理由がわかりません。改行の場所に関係なく、テキストと一致するパーサー要素を作成するにはどうすればよいですか?

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

python - pyparsingで単純な解析を行う際の問題

pyparsingの使用でいくつかの基本的な問題が発生しています。以下は、テストプログラムと実行の出力です。

テストプログラムの文法を変更して、ピリオドで終了するコンマ区切りの名前のリストを解析するにはどうすればよいですか?ドキュメントを調べてライブサポートリストを見つけようとしましたが、ここで回答が得られる可能性が最も高いと判断しました。

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

python - pyparsingの例

pyparsingを使用するのはこれが初めてであり、このサンプル行をフィルタリングする方法を尋ねたいと思います。

次のような出力を取得するには:1,52.125133215643,21.031048525561,116.898812

一般に、私はpyparsingロジックを理解するのに問題があるので、この例の助けをいただければ幸いです。ありがとう

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

python - グローバル以外の pyparsing parse アクションのコンテキスト

2 つ (または任意の数) の式を解析できるようにしたいと考えています。それぞれに独自の変数定義またはその他のコンテキストがあります。

コンテキストを の特定の呼び出しに関連付ける明確な方法はないようですpyparsing.ParseExpression.parseString()。最も自然な方法は、何らかのクラスのインスタンスメソッドを解析アクションとして使用することです。このアプローチの問題点は、構文解析コンテキストごとに (たとえば、クラスの で__init__) 文法を再定義する必要があることです。これは非常に非効率的です。

ルールで使用pyparsing.ParseExpression.copy()しても役に立ちません。個々の式は問題なく複製されますが、それらが構成されているサブ式は明らかな方法で更新されないため、ネストされた式の解析アクションは呼び出されません。

この効果を得るために私が考えることができる唯一の方法は、文脈のない抽象構文木を返す文法を定義し、それを 2 番目のステップで処理することです。これは、単純な文法であっても厄介に思えます: 認識されない名前が使用された瞬間に例外を発生させるのは良いことですが、それでも、どのルールが一致したかを知るために前に何が起こったかについてのコンテキストを実際に必要とする C のような言語を解析しません。

pyparse 式の解析アクションに (もちろんグローバル変数を使用せずに) コンテキストを注入する別の方法はありますか?

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

python - Python、pyparsingを使用して、ファイル内の行を順番に解析/適切な結果と一致させる方法は?

これが私のコードです:



上記の例では、gps_line +それはbreak_lineのような出力を取得する方法を見つけたいと思います。

これは、擬似コードのようなものを意味します。


私の質問の問題が明確でないか、説明に合わない場合は、自由に変更してください。

編集#2
私が達成しようとしているのは出力です: