【问题标题】:Dependency tree using Stanford Parser from NLTK results not matching with Stanford Parser使用来自 NLTK 结果的 Stanford Parser 的依赖树与 Stanford Parser 不匹配
【发布时间】:2017-10-14 14:33:40
【问题描述】:

我正在尝试比较来自 NLTK 的 Stanford Parser 的结果,但我不知道为什么当我与 stanford parser 比较时会得到不同的结果 我已经检查了相关问题,但这对我没有多大帮助。

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 斯坦福解析器:stanford-parser-3.8.0-models

【问题讨论】:

  • 您下载了哪个版本的 Stanford Parser?另外,您使用的是哪个版本的 NLTK?还有你用的是什么型号,是englishPCFG.ser.gz
  • nltk 版本:3.2.4 斯坦福解析器版本:stanford-parser-3.8.0-models
  • 它为选区树提供相同的结果,但我不知道为什么依赖解析器的结果不同。
  • 除了丢失的根(可以推断)之外,解析有何不同?
  • @aab 是的,缺少根,并且还缺少带有单词的数字。有可能得到数字吗?

标签: python python-2.7 nlp nltk stanford-nlp


【解决方案1】:

我自己解决了问题:

我找到了句子的“根”或“头”:

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"]) + ")" )

然后,我使用简单的字符串操作在预期输出中添加带有单词的数字,因为数字是句子中每个单词的索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多