如何在Spacy(Python)中获取所有名词短语

3
我想从一个句子中提取“所有”的名词短语。我想知道如何做到这一点。我有以下代码:
doc2 = nlp("what is the capital of Bangladesh?")
for chunk in doc2.noun_chunks:
    print(chunk)

输出:

1. what

2. the capital

3. bangladesh

预期结果:

孟加拉国的首都

我已经尝试过spacy文档和StackOverflow的答案,但都没有成功。似乎只有cTakes和Stanford core NLP可以提供这种复杂的名词短语。

非常感谢您的帮助。

2个回答

2

Spacy明确定义名词块为:

基本名词短语或“NP块”是一个名词短语,不允许嵌套其他的NP——因此没有NP级别的协调,没有介词短语和没有关系从句。

(https://spacy.io/api/doc#noun_chunks)

如果您以不同的依赖解析方式处理,允许介词修饰语和嵌套短语/块,则可以得到您要查找的内容。

我敢打赌,您可以相当容易地修改现有的spacy代码以实现您想要的功能:

https://github.com/explosion/spaCy/blob/06c6dc6fbcb8fbb78a61a2e42c1b782974bd43bd/spacy/lang/en/syntax_iterators.py

最初的回答。


2

对于仍在寻找此答案的人

最初的回答:

noun_pharses=set()    
for nc in doc.noun_chunks:
    for np in [nc, doc[nc.root.left_edge.i:nc.root.right_edge.i+1]]:
       noun_pharses.add(np)

这是我获取所有复杂名词短语的方法。原始答案会被翻译成“最初的回答”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接