2017-10-14 133 views
1

我想比較從斯坦福分析器從NLTK的結果,但我不知道爲什麼我得到不同的結果時,我與stanford parser 我已檢查相關問題但這對我沒有多大幫助。依賴樹使用斯坦福分析器從NLTK結果不匹配斯坦福分析器

stan_dep_parser = StanfordDependencyParser() # stanford parser from NLTK 
dependency_parser =stan_dep_parser.raw_parse("Four men died in an accident") 
dep = dependency_parser.next() 
for triple in dep.triples(): 
    print triple[1],"(",triple[0][0],", ",triple[2][0],")" 

電流輸出:

nsubj (died , men) 
nummod (men , Four) 
nmod (died , accident) 
case (accident , in) 
det (accident , an) 

預期輸出根據stanford parser

nummod(men-2, Four-1) 
nsubj(died-3, men-2) 
root(ROOT-0, died-3) 
case(accident-6, in-4) 
det(accident-6, an-5) 
nmod(died-3, accident-6) 

NLTK版本:3.2.4 斯坦福解析器:斯坦福解析器-3.8.0-車型

+0

你下載了哪個版本的斯坦福分析器?另外,你正在使用哪個版本的NLTK?你使用的是哪種模型,是不是'englishPCFG.ser.gz'? – alvas

+0

nltk版本:3.2.4 Stanford Parser版本:stanford-parser-3.8.0-models – Lucky

+0

它爲選區樹提供了相同的結果,但我不知道爲什麼依賴關係解析器的結果不同。 – Lucky

回答

2

我自己解決了問題:

我找到了「根」還是那句話的「頭」:

final_dependency = [] 
sentence = "Four men died in an accident" 
dependency_tree = StanfordDependencyParser() 
dependency_parser = dependency_tree.raw_parse(sentence) 
parsetree = list(dependency_parser)[0] 
for k in parsetree.nodes.values(): 
     if k["head"] == 0: 
      final_dependency.append(str(k["rel"]) + "(" + "Root" + "-" 
       + str(k["head"]) + "," + str(k["word"]) + "-" + str(k["address"]) + ")") 

然後我說的數字文字作爲簡單的字符串操作預期輸出數字在句子中的每個字的索引。