2017-10-14 176 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"]) + ")") 

然后我说的数字文字作为简单的字符串操作预期输出数字在句子中的每个字的索引。