通读NLTK这本书,并不清楚如何从给定的句子生成依存关系树。
这本书的相关部分:sub-chapter on dependency grammar给出了一个example figure,但它没有展示如何解析一个句子来得出这些关系--或者也许我在NLP中遗漏了一些基本的东西?
编辑:我想要类似于stanford parser所做的事情:给定一句话“我在睡梦中射杀了一头大象”,它应该返回如下内容:
nsubj(shot-2, I-1)
det(elephant-4, an-3)
dobj(shot-2, elephant-4)
prep(shot-2, in-5)
poss(sleep-7, my-6)
pobj(in-5, sleep-7)发布于 2015-11-19 23:36:31
我们可以使用来自NLTK的Stanford Parser。
要求
你需要从他们的网站上下载两样东西:
针对所需语言(例如english language model) )对Stanford CoreNLP parser.
警告!
确保您的语言模型版本与您的斯坦福CoreNLP解析器版本相匹配!
截至2018年5月22日,当前CoreNLP版本为3.9.1。
下载这两个文件后,将zip文件解压缩到您喜欢的任何位置。
Python代码
接下来,加载模型并通过NLTK使用它
from nltk.parse.stanford import StanfordDependencyParser
path_to_jar = 'path_to/stanford-parser-full-2014-08-27/stanford-parser.jar'
path_to_models_jar = 'path_to/stanford-parser-full-2014-08-27/stanford-parser-3.4.1-models.jar'
dependency_parser = StanfordDependencyParser(path_to_jar=path_to_jar, path_to_models_jar=path_to_models_jar)
result = dependency_parser.raw_parse('I shot an elephant in my sleep')
dep = result.next()
list(dep.triples())输出
最后一行的输出是:
[((u'shot', u'VBD'), u'nsubj', (u'I', u'PRP')),
((u'shot', u'VBD'), u'dobj', (u'elephant', u'NN')),
((u'elephant', u'NN'), u'det', (u'an', u'DT')),
((u'shot', u'VBD'), u'prep', (u'in', u'IN')),
((u'in', u'IN'), u'pobj', (u'sleep', u'NN')),
((u'sleep', u'NN'), u'poss', (u'my', u'PRP$'))]我想这就是你想要的。
发布于 2011-09-16 22:59:49
我认为您可以使用基于语料库的依存关系解析器,而不是NLTK提供的基于语法的解析器。
在Python中对少量文本执行基于语料库的依赖关系解析在性能方面并不理想。因此,在NLTK中,他们确实提供了MaltParser的wrapper,这是一个基于语料库的依存关系解析器。
你可能会发现另一个关于RDF representation of sentences的问题是相关的。
发布于 2017-03-22 19:09:20
如果您需要更好的性能,那么spacy (https://spacy.io/)是最佳选择。使用方法非常简单:
import spacy
nlp = spacy.load('en')
sents = nlp(u'A woman is walking through the door.')您将获得一个依赖关系树作为输出,并且您可以非常容易地挖掘出所需的每一个信息。您还可以定义自己的自定义管道。在他们的网站上可以看到更多。
https://stackoverflow.com/questions/7443330
复制相似问题