私は自然言語解析ツリーをいじり、さまざまな方法でそれらを操作してきました。私はスタンフォード大学の Tregex ツールと Tsurgeon ツールを使用してきましたが、コードがごちゃごちゃしていて、ほとんどが Python である私の環境にはうまく適合しません (これらのツールは Java であり、微調整には適していません)。より多くの機能が必要なときに簡単にハッキングできるツールセットが欲しいです。ツリーでパターン マッチングを実行し、一致したブランチを操作するのに適したツールは他にありますか?
たとえば、次のツリーを入力として使用したいと思います。
(ROOT
(S
(NP
(NP (NNP Bank))
(PP (IN of)
(NP (NNP America))))
(VP (VBD used)
(S
(VP (TO to)
(VP (VB be)
(VP (VBN called)
(NP
(NP (NNP Bank))
(PP (IN of)
(NP (NNP Italy)))))))))))
および (これは単純化された例です):
- ラベル NP を持つ最初の子、"Bank" という名前のいくつかの子孫、およびラベル PP を持つ 2 番目の子を持つ、ラベル NP を持つ任意のノードを見つけます。
- それが一致する場合、PP ノードのすべての子を取得し、それらを一致した NP の子の最後に移動します。
たとえば、ツリーの次の部分を見てください。
(NP
(NP (NNP Bank))
(PP (IN of)
(NP (NNP America))))
そしてそれをこれに変えます:
(NP
(NP (NNP Bank) (IN of) (NP (NNP America))))
私の入力ツリーは S 式であるため、Lisp を使用することを検討しました (私の Python プログラムに組み込まれています)。
パターンを説明する良い方法は何でしょうか? 操作を説明する良い方法は何でしょうか? この問題について考える良い方法は何ですか?