1

Javaで実装されたCFGパーサーを探しています。問題は、私が自然言語を解析しようとしているということです。そして、そのうちの1つだけでなく、すべての可能な解析ツリー(あいまいさ)が必要です。私はすでにスタンフォードパーサーのような多くのNLPパーサーを研究しました。しかし、それらは主に統計データ(私が持っていないツリーバンク)を必要とし、それらを新しい言語に適応させることはかなり困難であり、十分に文書化されていません。ANTRLやJFlexなどのパーサジェネレータを見つけましたが、あいまいさを処理できるかどうかはわかりません。では、どのパーサジェネレータまたはJavaライブラリが私に最適ですか?前もって感謝します

4

3 に答える 3

3

アーリーアルゴリズムを使用するパーサーが必要です。私はこれら2つのライブラリのどちらも使用していませんが、PENPEPはこのアルゴリズムをJavaで実装しているようです。

于 2011-01-03T18:03:47.997 に答える
1

もう1つのオプションは、 GLRを実装するBisonです。GLRは、あいまいな文法をサポートするLRタイプの構文解析アルゴリズムです。Bisonは、C++に加えてJavaコードも生成します。

于 2011-01-03T22:12:34.667 に答える
1

ここで関連する議論を見てください。その議論の最後のコメントで、派生を失敗させる前にこれまでに派生した解析ツリーを複製することにより、任意のパーサジェネレータにすべての解析ツリーを生成させることができることを説明します。

文法が次の場合:

G -> ...

あなたはこれを増強するでしょう:

G' -> G {semantic:deal-with-complete-parse-tree} <NOT-VALID-TOKEN>.

解析エンジンは最終的にすべての派生で失敗しますが、プログラムには次のいずれかが含まれます。

  • すべての木のクローンを保存しました。
  • 見つかった各ツリーのセマンティクスを処理しました。

私が教えていたとき、ANTLRとJavaCCの両方がうまくいきました。私の好みは、BNF字句解析、およびはるかに複雑でない歴史、ビジョン、y、およびライセンスのためにANTLRを選択しました。

于 2011-01-03T23:05:57.957 に答える