「サンフランシスコに行く」、「メイン ストリート 123 番地までの道順を教えて」などの音声ナビゲーション コマンドのセマンティック解析に NLTK を使用しようとしています。
これは、次のようなかなり単純な CFG 文法で実行できます。
S -> COMMAND LOCATION
COMMAND -> "go to" | "give me directions to" | ...
LOCATION -> CITY | STREET | ...
問題は、これには「go to」などの非アトミック(複数の単語の長さ)リテラルが含まれていることです.NLTKは設定されていないようです(間違っている場合は修正してください)。解析タスクには前提条件としてタグ付けがあり、すべてのタガーは常に個々の単語にタグ付けしているようです。だから、私のオプションは次のようです:
a) 非構文タグを個々の単語ではなく単語シーケンスに割り当てることができるカスタム タガーを定義します (例: "go to" : "COMMAND")。b) 機能を使用して文法を補強します。たとえば、次のようなものです。
COMMAND -> VB[sem='go'] P[sem='to'] | ...
c) チャンカーを使用して COMMAND などのサブ構造を抽出し、結果にパーサーを適用します。NLTK はチャンカー -> パーサーのカスケードを許可しますか?
これらのオプションのいくつかは複雑に見えます (ハック)。良い方法はありますか?