我知道SpaCy中内置的noun_chunks
。但是,这并不完全适合我找到的职位。
举个例子-
Skynet will be decommissioned soon.
这是一个非常简单的句子,其中noun_chunks
将输出 Skynet 。
现在,将 Skynet 替换为复杂名词短语(因为缺少绰号来描述我的需求),如下所示-
The machine that kills life will be decommissioned soon.
所以这里Skynet
-> The machine that kills life
但是noun_chunks
会将The machine
和life
识别为名词短语,这是正确的,但是我需要提取The machine that kills life
作为一个复杂名词短语的方法。
使用依赖关系解析可能会有所帮助,但是我不确定如何执行此操作。对于如何利用依赖关系解析(更重要的是英语中的结构和语法关系)的任何直接帮助或建议,以便我自己解决此问题,将不胜感激。
答案 0 :(得分:0)
现在,我很满足于找到根的nsubjpass
的子树。为了处理更多的情况,我可能需要查看nsubjpass
以外的其他选项,但我尚未弄清楚它们。
使用online dependency visualizer可以在一定程度上帮助我解决这个问题。
为我提供复杂名词短语的代码-
import spacy
nlp = spacy.load('en_core_web_sm')
simple_np = "Skynet will be decommissioned soon."
complex_np = "The machine that kills life will be decommissioned soon."
doc = nlp(complex_np)
for sent in doc.sents:
print(sent.root)
for child in sent.root.children:
if child.dep_ == 'nsubjpass':
print(list(child.subtree))