使用spacy为nsubj元素提取子树(短语)

rur96b6h  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(416)

如果给定句子中存在“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
[‘谁’、‘是’、‘睡眠不足’]

dgiusagp

dgiusagp1#

正如Kriograbek所提到的,您对子树的理解并不是子树在spacy中是什么,也不是子树在一般的依赖解析中是什么。
在依赖项解析中,如果你有一个主语和一个动词,动词就是头。这意味着主语的子树不包括动词。
我不确定你到底想要什么,但也许你应该试试 token.head.subtree 关于这个主题。

相关问题