首页 > 解决方案 > 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 谁能帮我解决这个问题。

提前致谢!!

标签: pythonnlpspacy

解决方案


在 spaCy 中,命名实体永远不能重叠。如果“Jon Allen”是一个名字,你不应该同时将“John”注释为一个名字。所以在训练之前,你必须解决这些重叠/冲突的情况。

在评论中讨论后进行编辑:您需要实现一个on_match函数来过滤掉匹配到非重叠集的内容。


推荐阅读