要查看类型化依赖项的示例,请查看this online example的输出末尾。
当我使用lexparser.sh在命令行上运行斯坦福解析器时,它会输出树和类型化的依赖项。
但是当我使用nltk.parse.stanford运行它时,我得到的只是树,没有类型化的依赖项。我可以通过设置-outputFormat="penn,typedDependencies“as documented here来修改它以返回依赖关系,尽管我只得到文本。我想知道是否其他人已经完成了将其处理为更有用的形式的工作。
斯坦福大学CoreNLP网站lists several extensions for Python,尽管它们中的大多数看起来都是相关的分支。From glancing at the source code, this one looks promising for dealing with dependencies,尽管它完全没有文档,我也不确定如何使用它。
其中许多库提供作为服务运行,并通过HTTP进行通信。我想知道这是否会比NLTK与解析器交互的方式更快,因为它可能不需要重复启动新的JVM。
我不太确定CoreNLP和斯坦福解析器之间的区别。
我还找到了this,虽然它使用JPype,但我无法将其编译。
发布于 2014-07-01 03:48:14
我最近做了一个项目,它严重依赖于CoreNLP和斯坦福解析器。首先,如果您要使用它,我强烈建议您用Java编写代码,因为在Python中使用它是一件非常痛苦的事情。不过,我还是设法让它正常工作了。
我推荐使用this与CoreNLP对话,它对我来说效果最好。这将需要声明JVM并在本地与其通信(尽管它会为您做这件事)。它也有一个可爱的错误,有时要么返回先前的解析,而不是刚刚发送的解析,要么根本不返回。我们使用了一个装饰器,它会在一段时间后重新启动解析,这可以在here中找到。
我祝你好运,因为这是一项艰巨的任务。还要注意,与完整的CoreNLP相比,NTLK Stanford解析器是不完整的。你不应该需要NTLK来使用CoreNLP,它基本上提供了从NER到POS再到依赖项的一切。
发布于 2015-04-19 17:13:25
刚刚给出了另一个更适合这个问题的答案:)
我一直在使用minidom解析CoreNLP的输出。下面是一些您可能想要使用的入门代码,但您可能希望检查https://github.com/dasmith/stanford-corenlp-python
请注意,您需要获取斯坦福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')]
https://stackoverflow.com/questions/24501471
复制