Spacy:尝试设置冲突的文档:令牌只能是一个实体的一部分,因此请确保您设置的实体不重叠

kar*_*ddy 3 python nlp spacy

我尝试使用 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")
Run Code Online (Sandbox Code Playgroud)

但上面的代码抛出了类似的错误

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.
Run Code Online (Sandbox Code Playgroud)

不仅是这个案例,还有同样的人名问题,比如 Karthik vs Karthik reddy、Jon vs Jon Allen 任何人都可以帮我解决这个问题。

提前致谢!!

Sof*_* VL 5

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

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