有没有一种方法可以使用SpaCy来获得整个组分?

2024-06-06 05:08:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想我是想用一种比提供的更直接的方式来导航SpaCy的解析树。在

例如,如果我有这样的句子:“他是天才”或“狗是绿色的”,我希望能够将对象保存到变量(“天才”和“绿色”)。在

在令牌.子级提供了直接的语法依赖项,因此,对于第一个例子,“was”的子元素是“he”和“genius”,然后“a”是“genius”的子元素。如果我只想要整个组成部分“a genius”,这就没有多大帮助了。我不知道如何从令牌.子级或者有更好的方法。在

我能找出如何匹配“is”和“was”的用法令牌.text(这是我想做的一部分),但我不知道如何利用提供的有关儿童的信息来返回整个组成部分“天才”。在

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])

这是输出:

He PRP nsubj[]

是VBD根[他,天才,。]

一个DT det[]

天才NN属性[a]

。点刺[]


Tags: textintokenchild元素fornlpspacy
1条回答
网友
1楼 · 发布于 2024-06-06 05:08:17

你可以用令牌.子树(请参见the docs)获取依赖树中给定节点的所有依赖项。在

例如,要获取所有名词短语:

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])

输出:

^{pr2}$

相关问题 更多 >