NLTK の本を読んでも、与えられた文から依存関係ツリーを生成する方法が明確ではありません。
本書の関連セクション:依存文法に関するサブ章与える例図しかし、文を解析してそれらの関係を導き出す方法は示されていません。あるいは、NLP の基本的な何かを見逃しているのでしょうか?
編集:私は、スタンフォードパーサー「私は眠っている間に象を撃った」という文が与えられた場合、次のような結果が返されるはずです。
nsubj(shot-2, I-1)
det(elephant-4, an-3)
dobj(shot-2, elephant-4)
prep(shot-2, in-5)
poss(sleep-7, my-6)
pobj(in-5, sleep-7)
ベストアンサー1
NLTK の Stanford Parser を使用できます。
要件
ウェブサイトから次の 2 つをダウンロードする必要があります。
- のスタンフォード CoreNLP パーサー。
- 言語モデルご希望の言語(例:英語言語モデル)
警告!
言語モデルのバージョンが Stanford CoreNLP パーサーのバージョンと一致していることを確認してください。
2018 年 5 月 22 日現在の CoreNLP バージョンは 3.9.1 です。
2 つのファイルをダウンロードしたら、任意の場所に zip ファイルを解凍します。
Python コード
次に、モデルをロードしてNLTKで使用します。
from nltk.parse.stanford import StanfordDependencyParser
path_to_jar = 'path_to/stanford-parser-full-2014-08-27/stanford-parser.jar'
path_to_models_jar = 'path_to/stanford-parser-full-2014-08-27/stanford-parser-3.4.1-models.jar'
dependency_parser = StanfordDependencyParser(path_to_jar=path_to_jar, path_to_models_jar=path_to_models_jar)
result = dependency_parser.raw_parse('I shot an elephant in my sleep')
dep = result.next()
list(dep.triples())
出力
最後の行の出力は次のようになります。
[((u'shot', u'VBD'), u'nsubj', (u'I', u'PRP')),
((u'shot', u'VBD'), u'dobj', (u'elephant', u'NN')),
((u'elephant', u'NN'), u'det', (u'an', u'DT')),
((u'shot', u'VBD'), u'prep', (u'in', u'IN')),
((u'in', u'IN'), u'pobj', (u'sleep', u'NN')),
((u'sleep', u'NN'), u'poss', (u'my', u'PRP$'))]
これがあなたの望むものだと思います。