如何使用Stanford Parser';Python中的类型依赖关系?
要查看类型依赖项的示例,请查看中输出的结尾 当我使用lexparser.sh在命令行上运行stanford解析器时,它会输出树和类型依赖项 但是当我使用nltk.parse.stanford运行它时,我得到的只是一棵树,没有类型化的依赖项。我可以通过设置-outputFormat=“penn,typedDependencies”来修改它以返回依赖项,尽管我只需要获取文本。我想知道是否有其他人已经完成了将其处理成更有用形式的工作 斯坦福大学CoreNLP网站,尽管其中大多数看起来像是相关的叉子,虽然它是完全没有文件的,我不知道如何使用它 这些库中的许多都提供作为服务运行并通过HTTP进行通信。我想知道这是否会比NLTK与解析器交互的方式更快,因为它可能不需要一个新的JVM来反复启动 我不太清楚CoreNLP和Stanford解析器之间的区别如何使用Stanford Parser';Python中的类型依赖关系?,python,stanford-nlp,Python,Stanford Nlp,要查看类型依赖项的示例,请查看中输出的结尾 当我使用lexparser.sh在命令行上运行stanford解析器时,它会输出树和类型依赖项 但是当我使用nltk.parse.stanford运行它时,我得到的只是一棵树,没有类型化的依赖项。我可以通过设置-outputFormat=“penn,typedDependencies”来修改它以返回依赖项,尽管我只需要获取文本。我想知道是否有其他人已经完成了将其处理成更有用形式的工作 斯坦福大学CoreNLP网站,尽管其中大多数看起来像是相关的叉子,虽
我还发现,虽然它使用JPype,但我无法编译它。我最近做了一个项目,该项目严重依赖CoreNLP和Stanford解析器。首先,如果您打算使用它,我强烈建议您使用Java编写代码,因为将它与Python一起使用是一件非常痛苦的事情。不过,我还是设法让它发挥作用 我建议您使用CoreNLP,这对我来说效果最好。这将需要声明JVM并在本地与之通信(尽管它会为您这样做)。它还有一个可爱的错误,有时返回以前的解析而不是刚刚发送的解析,或者根本不返回。我们使用了一个decorator,它将在一段时间后重新启动解析,这段时间可以找到
我祝你在这方面好运,因为这是一项相当艰巨的任务。还要注意,与完整的CoreNLP相比,NTLK-Stanford解析器是不完整的。您不需要使用NTLK来使用CoreNLP,它将提供从NER到POS再到依赖项所需的一切。刚刚回答了另一个更适合这个问题的问题:) 我一直在使用minidom解析CoreNLP的输出。下面是一些您可能想要使用但您可能想要检查的起始代码 请注意,您需要获得Stanford CoreNLP使用的标记化,因为返回的数据基于句子和标记的偏移量
from xml.dom import minidom
xmldoc = minidom.parseString(raw_xml_data)
for sentence_xml in xmldoc.getElementsByTagName('sentences')[0].getElementsByTagName('sentence'):
parse = parser.parse(sentence_xml.getElementsByTagName('parse')[0].firstChild.nodeValue)
tokens = [(i,j) for i,j in zip(sentence_xml.getElementsByTagName('tokens')[0].getElementsByTagName('token'),parse.get_leaves())]
# example for processing dependencies
elements = sentence_xml.getElementsByTagName('dependencies')
for element in elements:
if element.getAttribute('type')=="collapsed-ccprocessed-dependencies":
dependencies += [i for i in element.getElementsByTagName('dep')]