2016-01-23 12 views
5

私はPythonでnltkでStanfordパーサを使用しています。Stanford Parser and NLTKからStanford nlpライブラリを設定するのに助けがありました。以下の例のように、私は間違って解析し、依存関係ツリーを取得していますnltkを使ったStanfordパーサが文を正しく解析しないのはなぜですか?

from nltk.parse.stanford import StanfordParser 
from nltk.parse.stanford import StanfordDependencyParser 
parser  = StanfordParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz") 
dep_parser = StanfordDependencyParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz") 
one = ("John sees Bill") 
parsed_Sentence = parser.raw_parse(one) 
# GUI 
for line in parsed_Sentence: 
     print line 
     line.draw() 

parsed_Sentence = [parse.tree() for parse in dep_parser.raw_parse(one)] 
print parsed_Sentence 

# GUI 
for line in parsed_Sentence: 
     print line 
     line.draw() 

、代わりに動詞の名詞として「見ている」治療されます。

Example parse tree Example dependency tree

私は何をすべき? 文章を変更すると正しく動作します(1 = 'John see Bill')。 この文の正しい出力に含まはここから見ることができcorrect ouput of parse tree

正しい出力の例も以下に示します。

correctly parsed

correct dependency parsed tree

+0

してください'dep_parser'がどこから来たのか理解できるように、完全なコードスニペットを投稿してください) – alvas

答えて

6

をもう一度、何のモデルは完璧ではありません(Python NLTK pos_tag not returning the correct part-of-speech tagを参照してください);

NeuralDependencyParserを使用して「より正確な」パーサーを試すことができます。

まずセットアップ正しい環境変数を適切にパーサ、その後、(Stanford Parser and NLTKhttps://gist.github.com/alvations/e1df0ba227e542955a8aを参照してください):

>>> from nltk.internals import find_jars_within_path 
>>> from nltk.parse.stanford import StanfordNeuralDependencyParser 
>>> parser = StanfordNeuralDependencyParser(model_path="edu/stanford/nlp/models/parser/nndep/english_UD.gz") 
>>> stanford_dir = parser._classpath[0].rpartition('/')[0] 
>>> slf4j_jar = stanford_dir + '/slf4j-api.jar' 
>>> parser._classpath = list(parser._classpath) + [slf4j_jar] 
>>> parser.java_options = '-mx5000m' 
>>> sent = "John sees Bill" 
>>> [parse.tree() for parse in parser.raw_parse(sent)] 
[Tree('sees', ['John', 'Bill'])] 

NeuralDependencyParserのみ依存関係ツリーを作成することに注意してください:

enter image description here

+0

私は" englishPCFG.ser.gz "というモデルを使っていますが、" e nglish_UD.gz "しかし、どのようにしてこれらのモデルを選ぶことができ、正しいモデルを選ぶことができますか? –

+0

完璧なモデルはありません。正しい/間違ったモデルはありません。あなたのデータに最も適したモデルです。だから私は、それらのすべてを試してみて、それからそれらの解析の最終目的が何を基礎にしているかを評価します。 – alvas

+0

本当にありがとうございました。私は間違いがありました。 –

関連する問題