python - Spacy:尝试设置冲突的 doc.ents:令牌只能是一个实体的一部分,因此请确保您设置的实体不重叠
问题描述
我尝试使用 spacy 从文本中提取所需的自定义实体。
import spacy
from spacy_lookup import Entity
data = {0:["count"],1:["unique count","unique"]}
def processText(text):
nlp = spacy.blank('en')
for i,arr in data.items():
fLabel = "test:"+str(i)
fEntitty = Entity(keywords_list=list(set(arr)),label=fLabel)
fEntitty.name = fLabel
nlp.add_pipe(fEntitty)
match_doc = nlp(text)
print(match_doc.ents)
processText("unique count of city")
但是上面的代码会抛出类似的错误
ValueError: [E103] Trying to set conflicting doc.ents: '(1, 2, 'test:0')' and '(0, 2, 'test:1')'. A token can only be part of one entity, so make sure the entities you're setting don't overlap.
不仅是这种情况,而且人名也存在相同的问题,例如 Karthik vs Karthik reddy,Jon vs Jon Allen 谁能帮我解决这个问题。
提前致谢!!
解决方案
在 spaCy 中,命名实体永远不能重叠。如果“Jon Allen”是一个名字,你不应该同时将“John”注释为一个名字。所以在训练之前,你必须解决这些重叠/冲突的情况。
在评论中讨论后进行编辑:您需要实现一个on_match
函数来过滤掉匹配到非重叠集的内容。
推荐阅读
- android - Android Studio 4.2.2 使用了近 250mb 的互联网数据来创建新项目
- css - 更改元素顺序 CSS - 奇怪的情况
- node.js - 我打开此书签时未定义书签
- python - 使用 Beautiful Soup 抓取图像并且找不到 img/src 标签
- virtual-reality - 是否有适用于 Windows Mixed Reality 事件的 ETW 提供程序?
- django - 在远程服务器上发送 POST 时不允许获取方法
- javascript - 许多库是如何制作自己的事件侦听器和自己的事件的,就像在传单库中一样?
- python - 当变量输入作为浮点数给出时,为什么 try-except 不起作用?
- libreoffice - 使用宏删除双引号
- reactjs - 组件挂载时将数据存储在本地存储中