NLTKで依存関係を解析するにはどうすればいいですか? 質問する

NLTKで依存関係を解析するにはどうすればいいですか? 質問する

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 つをダウンロードする必要があります。

  1. スタンフォード CoreNLP パーサー
  2. 言語モデルご希望の言語(例:英語言語モデル

警告!

言語モデルのバージョンが 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$'))]

これがあなたの望むものだと思います。

おすすめ記事