使用spacy提取nsubj元素的子树(Phrase)



目的是如果给定句子中存在"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

最新更新