首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >过滤斯坦福依赖分析器输出

过滤斯坦福依赖分析器输出
EN

Stack Overflow用户
提问于 2017-01-22 21:34:38
回答 1查看 251关注 0票数 2

如何修改此代码,使其只从代码中获得一个特定的输出。例如,如何在输出中只获得'nmod''dobj'

代码语言:javascript
复制
from nltk.parse.stanford import StanfordDependencyParser
from nltk.tokenize import word_tokenize
from nltk.tree import Tree
stanford_models = 'E:\stanford-parser\stanford-parser-3.7.0-models.jar'
stanford_jar = 'E:\stanford-parser\stanford-parser.jar'
st = StanfordDependencyParser(stanford_models, stanford_jar, encoding='utf-8')
text = 'Randy,Can you send me a schedule of the salary.'
result= st.raw_parse(text)
dep = result.__next__()
list(dep.triples())

产出如下:

代码语言:javascript
复制
[(('send', 'VB'), 'discourse', ('Randy', 'UH')),
 (('send', 'VB'), 'aux', ('Can', 'MD')),
 (('send', 'VB'), 'nsubj', ('you', 'PRP')),
 (('send', 'VB'), 'iobj', ('me', 'PRP')),
 (('send', 'VB'), 'dobj', ('schedule', 'NN')),
 (('schedule', 'NN'), 'det', ('a', 'DT')),
 (('schedule', 'NN'), 'nmod', ('salary', 'NN')),
 (('salary', 'NN'), 'case', ('of', 'IN')),
 (('salary', 'NN'), 'det', ('the', 'DT'))]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-22 21:36:04

您唯一需要做的就是filter(..),也许还可以转换回list(..)

代码语言:javascript
复制
the_triples = list(dep.triples()) #you already have this line
result = filter(lambda v : v[1] == 'nmod' or v[1] == 'dobj',the_triples)

当您运行python-2.x时,result将是一个列表,如果您使用python-3.x,结果将是一个生成器(因此处理会延迟到您真正需要这些值)。通过在生成器上调用list(..),可以将生成器转换为列表。

filter(function,iterable)接受一个函数和一个可迭代的函数作为输入。当iterable将三元组列表提供给它时,作为function,我们使用v : v[1] == 'nmod' or v[1] == 'dobj',它是一个接受三元组并成功的函数,因为三元组的第二个元素是'nmod''dobj'。因此,如果函数将三元组计算为True,则元素将被发出,否则将被忽略。

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

https://stackoverflow.com/questions/41796403

复制
相关文章

相似问题

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