目的是如果给定句子中存在"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)
我们得到的输出是:时钟NN是nsubj
["The"、"alarm"、"clock"]
目的NN是nsubj
[‘软管’、‘目的’]
谁是WP nsubj
但在nsubj的情况下,我期望的输出是整个子树,即
目的NN是nsubj
["软管"、"目的"、"是"、"要"、"努力"]
谁是WP nsubj
正如krisograbek所提到的,你对子树的理解并不是spaCy中的子树,也不是依赖解析中的子树。
在依存关系解析中,如果你有一个主语和一个动词,那么这个动词就是头。这意味着主语的子树不包括动词。
我不确定你到底想要什么,但也许你应该试试token.head.subtree
。