python - 有没有办法使用 SpaCy 获得整个成分?
问题描述
我想我正在尝试以比提供的更直接的方式导航 SpaCy 的解析树。
例如,如果我有这样的句子:“他是天才”或“狗是绿色的”,我希望能够将对象保存到变量中(“天才”和“绿色”)。
token.children 提供了 IMMEDIATE 句法依赖项,因此,对于第一个示例,“was”的孩子是“he”和“genius”,然后“a”是“genius”的孩子。如果我只想让整个组成部分成为“天才”,这并没有太大帮助。我不确定如何从 token.children 重建它,或者是否有更好的方法。
我可以弄清楚如何使用 token.text 匹配“is”和“was”(我正在尝试做的一部分),但我无法弄清楚如何使用信息返回整个组成部分“天才”提供关于儿童的信息。
import spacy
nlp = spacy.load('en_core_web_sm')
sent = nlp("He was a genius.")
for token in sent:
print(token.text, token.tag_, token.dep_, [child for child in token.children])
这是输出:
他 PRP nsubj []
是 VBD ROOT [他,天才,.]
一个 DT 检测 []
天才 NN attr [a]
. . 点[]
解决方案
您可以使用 Token.subtree(请参阅文档)获取依赖关系树中给定节点的所有依赖项。
例如,要获取所有名词短语:
import spacy
nlp = spacy.load('en')
text = "He was a genius of the best kind and his dog was green."
for token in nlp(text):
if token.pos_ in ['NOUN', 'ADJ']:
if token.dep_ in ['attr', 'acomp'] and token.head.lemma_ == 'be':
# to test for only verb forms 'is' and 'was' use token.head.lower_ in ['is', 'was']
print([t.text for t in token.subtree])
输出:
['a', 'genius', 'of', 'the', 'best', 'kind']
['green']
推荐阅读
- javascript - 如何在 div 中对具有相同日期的项目进行分组时按日期呈现列表
- java - 下载使用 Java 中的用户名和密码保护的文件时出现 IOException
- javascript - Driver.quit() 不关闭浏览器
- ruby - 扩展 Ralyxa 以管理不同的语言环境和指令
- ruby-on-rails - 如何检查“params [:attribute]”中是否存在任何值
- pandas - 在 Python 中创建树叶
- reactjs - React Hooks - 上下文提供者没有立即反映调度状态
- javascript - jQuery滑块设置不正确的ui.values
- c - 如何使用未知数量的单词 fscanf 字符串?
- c++ - 如果我在 const 函数上使用指针,我能返回什么?