2011-01-03 4 views
1

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

答えて

3

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

+0

答えてくれてありがとう、PEPを見た後、私はこれが私の必要と思うものだと思う。 – hrzafer

1

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

1

hereを参照してください。そのディスカッションの私の最後のコメントでは、派生を失敗させる前に派生したパーズツリーを複製することによって、パースツリーのすべてを生成できるようにすることを説明します。

はあなたの文法がある場合:

G -> ... 

あなたは強化だろうが、このようです:

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

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

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

私が教授していた時、ANTLRとJavaCCの両方がうまくいった。私の好みは、BNFのレキシカルな分析と、それほど複雑ではない歴史、ビジョン、yとライセンスのためANTLRです。

+0

答えのApalalaありがとう。実際に私はまだパーサージェネレータとは協力していません。私の場合、それが最善の解決策だと思いますか?一度ANTLRを学び始めると時間がかかり、私はすでに論文を完成させるために何点かを無駄にしています。 – hrzafer

+0

@hrzafer主流のパーサジェネレータには多くの文法が用意されています。あなたはあなたのニーズに適応できるものを見つけるでしょう。時間に関しては、あなただけがそれを見積もることができます。私が教えてくれたとき、ANTLR/JavaCCでの最初の課題は3週目でした。それは6時間/週のテーマでした(論文は20-40時間/週の努力でなければなりません)。 – Apalala