如果给定句子中存在“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
[“闹钟”,“闹钟”]
目的nn是nsubj
[“谁的”、“目的”]
谁是nsubj
[“谁”]
但是,对于nsubj,我期望的输出是整个子树,即。
目的nn是nsubj
[‘谁的’、‘目的’、‘是’、‘对’、‘折磨’]
谁是nsubj
[‘谁’、‘是’、‘睡眠不足’]
1条答案
按热度按时间dgiusagp1#
正如Kriograbek所提到的,您对子树的理解并不是子树在spacy中是什么,也不是子树在一般的依赖解析中是什么。
在依赖项解析中,如果你有一个主语和一个动词,动词就是头。这意味着主语的子树不包括动词。
我不确定你到底想要什么,但也许你应该试试
token.head.subtree
关于这个主题。