问题描述
目标是在给定句子中存在“nsubj”时从句子中提取子树(短语)。
这是我正在使用的代码:
import spacy
nlp = spacy.load('en')
piano_doc = nlp('The alarm clock is,to many high school students,a wailing monstrosity whose purpose is to torture all who are sleep-deprived')
for token in piano_doc:
if token.dep_ == 'nsubj':
print (token.text,token.tag_,token.head.text,token.dep_)
subtree = token.subtree
print([(t.text) for t in subtree])
print('*' * 50)
我们得到的输出是: 时钟神经网络是 nsubj
['The','alarm','clock']
目的 NN 是 nsubj
['谁','目的']
WP 是谁 nsubj
['谁']
但是在 nsubj 的情况下我期望的输出是整个子树,即
目的 NN 是 nsubj
['whose','目的','is','to','torture']
WP 是谁 nsubj
['who','are','sleep-deprived']
解决方法
正如 krisograbek 所提到的,您对子树的理解不是 spaCy 中的子树,也不是一般的依赖解析。
在依存分析中,如果您有主语和动词,则动词是中心词。这意味着主语的子树不包含动词。
我不确定您到底想要什么,但也许您应该尝试 token.head.subtree
作为主题。