【问题标题】:SpaCy doesn't recognize money and countries as expectedSpaCy 无法按预期识别货币和国家/地区
【发布时间】:2018-03-15 17:47:50
【问题描述】:

我正在使用 SpaCy,以便从示例文本中提取不同的命名实体。问题是 SpaCy 不能识别所有预期的实体。它在金钱和某些地点方面存在问题。这是我的代码:

# encoding: utf-8
import spacy
from spacy import displacy

nlp = spacy.load('es') #cargo el modelo en español.
text = u"Una vez un personaje le preguntó a Agustín Chirichigno si estaba en su casa. El nombre de este personaje es Lucas Picchi y es de Mar del Plata. Junto a SU PRIMO, DE ESTADOS UNIDOS hacen cosas re locas como por ejemplo comprar un Fernet Branca a AR$2.500 cuando en realidad está a $180."
doc = nlp(text)
displacy.serve(doc, style='ent')

请注意,我正在加载一个西班牙模型。我的配置如下: 空间信息

Info about spaCy

Python version     2.7.6          
Platform           Linux-4.4.0-112-generic-x86_64-with-Ubuntu-14.04-trusty
spaCy version      2.0.9          
Location           /usr/local/lib/python2.7/dist-packages/spacy
Models             es, en

所以,输出是:

预计 SpaCy 可以正确识别 MONEY(2500 美元相当于 2500 阿根廷比索,180 美元也是钱)。 “Junto”这个词不是LOCATION,也不是“SU PRIMO”。 “Junto a su primo”就像英语中的“with his cousin”。另外,Fernet Branca 是 BRAND,而不是个人。

所以,我的问题是:我做错了什么?我应该使用其他库吗?

提前致谢。

【问题讨论】:

  • 你的模型里面有BRAND吗?
  • 如何查看?我的意思是,这没有问题,但我认为 MONEY 是基本的。

标签: python nlp spacy named-entity-recognition


【解决方案1】:

根据西班牙模型的 spacy 文档,它支持识别 PER、LOC、ORG 和 MISC 实体。它是在 AnCora 和 WikiNER 语料库上训练的。

在发行说明中提到:

“由于该模型是在 Wikipedia 上训练的,因此它可能在许多类型(例如社交媒体文本)上的表现不一致。”

由于您的数据结果不令人满意,您需要针对您的数据对其进行训练。这可以按照here中的建议完成

对于钱,你实际上可以为美元货币写一个像这样的简单正则表达式

^\$?[0-9][0-9\,]*(\.\d{1,2})?$|^\$?[\.]([\d][\d]?)$

【讨论】:

  • 只是补充一点,spacy 有一个 Matcher 对象,可以帮助进行正则表达式匹配。其中一个examples 谈到了使用Matcher 添加NER 注释。
猜你喜欢
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
相关资源
最近更新 更多