私は現在、英語処理用の独自のライブラリを実装することに懸命に取り組んでいます。本当の課題は、豊富な理論資料をすべて調べて、すべてを生産の軌道に乗せる方法を理解することです。
私はこれまでにいくつかの進歩を遂げました。文末検出器と Early パーサーを実装しました。しかし、実際には、端末辞書に特定の単語を含めない限り、パーサーはそれを認識してグラフを作成できません。
より明確にするには、次の CFGrammar の例を確認してください。
Production[] ppTerminals = { new Production(new Word[] { new Terminal("Preposition"), new NonTerminal("NP") })};
AddProduction(ppTerminal, "PP"); // Add production
...
DictionaryBuilder(Prepositions.SingleWord, "Preposition"); //Where
Prepositions.SingleWord is a hard-coded list of possible prepositions.
その結果、Earley パーサーが「up to」のような未知の 2 語 PP に出くわした場合、それを認識してチャートを作成することに失敗します。
したがって、構文パーサーの前に、文を処理してから関連データをパーサーに転送する何かが必要だと思います。主なアイデアは、POS タグ付けの段階で辞書が動的に構築され、Earley パーサーが単語を認識できるようになるというものです。
トークナイザーとレクサーを実装しました。出力として、次のような S-Expression ツリーを取得しました。
(sentence
(word BOND)
(word TRADING)
(word REVENUES)
(word AT)
(word GOLDMAN)
(word SACHS)
(word SLID)
(value 40%)
...
(word AND)
(word CURRENCIES)
(word WAS)
(currency $1.16BN)
...
)
しかし、隠れマルコフ モデルや、最も可能性の高い状態シーケンスを見つけるための Viterbi アルゴリズムやパラメーター推定のための Baum-Welch アルゴリズムなどのアルゴリズムには精通しています。
Earley パーサーと HMM に基づく POS タグ付けをリンクする方法を教えてください。または、おそらく、私は間違った方向に向かっているので、どこが間違っているかを指摘してください。今、私は少し混乱しています。ありがとうございました!