SpaCy:缺少人员实体

时间:2018-03-28 10:35:43

标签: python-2.7 nltk spacy

我在spaCy缺少Person实体时遇到了一些问题。下面是一个例子,当名称前面带有某些标题时,SpaCy似乎会失明。当您删除Labour MP(注释行)时,它会识别该名称,否则返回一个空列表。

import spacy
from spacy.en import English
nlp_toolkit = English()
nlp = spacy.load('en')

text = u"In a recent tweet, Labour MP Luciana Berger sought clarification..."
#text = u"In a recent tweet, Luciana Berger sought clarification..."

all_tags = nlp(text)

person_list=[]
for ent in all_tags.ents:
    if ent.label_=="PERSON":
        person_list.append(str(ent))      
print person_list

现在,我正在使用1.8.2版本的SpaCy。但在我升级之前,我真的想知道这个问题是否已在版本2中修复,因为看起来升级并不是那么直接。任何人都可以测试它或建议一个变通方法吗?谢谢!

更新:

它变得更有趣。如果您将名称更改为其他更常用的名称,则可以使用。

text = u"In a recent tweet, Labour MP James Mill sought clarification..."
out: ['James Mill']

所以它与名称有关,而不是MP之前...... 无论如何 - 如果有人可以检查它是否与v2一起正常工作我会很感激!

1 个答案:

答案 0 :(得分:2)

我使用Spacy Version 2.0.7尝试了您的代码,它确实将“Luciana Berger”作为句子的实体

我收到句子['Luciana Berger']

的这个列表"In a recent tweet, Labour MP Luciana Berger sought clarification..."

另外,对于其他句子,它给出了“James Mill”

也许如果您想尝试更新版本,请尝试在虚拟环境中安装,这样您就可以在两个版本上进行试验。你可以帮助这个how to use virtual enviornment。实际上我会建议使用Virtual env作为版本之间的切换是一个相当漫长的过程。所以在你切换之前最好先试试。

另外仅供参考,NER在Spacy的“模型训练”中工作,这里是link。因此,可能会发生并非每个名称都会被NER覆盖。