如何使用SpaCy描绘或提取在其构成中包括动词短语的复杂名词短语?

时间:2019-04-03 09:36:44

标签: python-3.x nlp spacy

我知道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 machinelife识别为名词短语,这是正确的,但是我需要提取The machine that kills life作为一个复杂名词短语的方法。

使用依赖关系解析可能会有所帮助,但是我不确定如何执行此操作。对于如何利用依赖关系解析(更重要的是英语中的结构和语法关系)的任何直接帮助或建议,以便我自己解决此问题,将不胜感激。

1 个答案:

答案 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))