首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在NLTK中进行依赖项解析?

如何在NLTK中进行依赖项解析?
EN

Stack Overflow用户
提问于 2011-09-16 18:26:50
回答 7查看 47.6K关注 0票数 38

通读NLTK这本书,并不清楚如何从给定的句子生成依存关系树。

这本书的相关部分:sub-chapter on dependency grammar给出了一个example figure,但它没有展示如何解析一个句子来得出这些关系--或者也许我在NLP中遗漏了一些基本的东西?

编辑:我想要类似于stanford parser所做的事情:给定一句话“我在睡梦中射杀了一头大象”,它应该返回如下内容:

代码语言:javascript
复制
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)
EN

回答 7

Stack Overflow用户

发布于 2015-11-19 23:36:31

我们可以使用来自NLTK的Stanford Parser。

要求

你需要从他们的网站上下载两样东西:

针对所需语言(例如english language model) )对Stanford CoreNLP parser.

  • Language model进行

警告!

确保您的语言模型版本与您的斯坦福CoreNLP解析器版本相匹配!

截至2018年5月22日,当前CoreNLP版本为3.9.1。

下载这两个文件后,将zip文件解压缩到您喜欢的任何位置。

Python代码

接下来,加载模型并通过NLTK使用它

代码语言:javascript
复制
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())

输出

最后一行的输出是:

代码语言:javascript
复制
[((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$'))]

我想这就是你想要的。

票数 80
EN

Stack Overflow用户

发布于 2011-09-16 22:59:49

我认为您可以使用基于语料库的依存关系解析器,而不是NLTK提供的基于语法的解析器。

在Python中对少量文本执行基于语料库的依赖关系解析在性能方面并不理想。因此,在NLTK中,他们确实提供了MaltParserwrapper,这是一个基于语料库的依存关系解析器。

你可能会发现另一个关于RDF representation of sentences的问题是相关的。

票数 8
EN

Stack Overflow用户

发布于 2017-03-22 19:09:20

如果您需要更好的性能,那么spacy (https://spacy.io/)是最佳选择。使用方法非常简单:

代码语言:javascript
复制
import spacy

nlp = spacy.load('en')
sents = nlp(u'A woman is walking through the door.')

您将获得一个依赖关系树作为输出,并且您可以非常容易地挖掘出所需的每一个信息。您还可以定义自己的自定义管道。在他们的网站上可以看到更多。

https://spacy.io/docs/usage/

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7443330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档