Python 仅与Spacy短语匹配器进行最长匹配

Python 仅与Spacy短语匹配器进行最长匹配,python,nlp,spacy,named-entity-recognition,ner,Python,Nlp,Spacy,Named Entity Recognition,Ner,我已经创建了一个用于匹配文档中的名称的。我想使用生成的匹配作为额外的训练数据,以便训练Spacy-NER模型。 然而,我的模式分别包含全名(例如“巴拉克·奥巴马”)和姓氏(“奥巴马”) 因此,在一个包含“巴拉克·奥巴马”的句子中,两种模式匹配,导致重叠匹配。但是,当我尝试使用数据进行培训时,这种重叠会触发异常,例如: ValueError: [E103] Trying to set conflicting doc.ents: '(19, 33, 'PERSON')' and '(29, 33,

我已经创建了一个用于匹配文档中的名称的。我想使用生成的匹配作为额外的训练数据,以便训练Spacy-NER模型。 然而,我的模式分别包含全名(例如“巴拉克·奥巴马”)和姓氏(“奥巴马”)

因此,在一个包含“巴拉克·奥巴马”的句子中,两种模式匹配,导致重叠匹配。但是,当我尝试使用数据进行培训时,这种重叠会触发异常,例如:

ValueError: [E103] Trying to set conflicting doc.ents: '(19, 33, 'PERSON')' and '(29, 33, 'PERSON')'. A token can only be part of one entity, so make sure the entities you're setting don't overlap.
我一直在考虑在使用数据进行训练之前过滤掉重叠的匹配,但这似乎是一种非常低效的方法,导致大数据的处理时间显著增加


有没有一种方法可以设置一个
短语匹配器
,以便它只匹配重叠匹配的最长匹配?

短语匹配器没有一种内置的方法在匹配时过滤掉重叠匹配,但是有一个实用函数可以在匹配后过滤重叠匹配:
spacy.util.filter\u span()
。它喜欢最长的跨距,如果两个重叠的跨距长度相同,则选择文本中较早的跨距。

快速提问:“文本中最早的跨距”是什么意思?文本中较早开始的跨距,因此,如果标记3-6和5-8之间有重叠跨距,它会选择3-6之间的跨距。谢谢@aab。现在清楚了。因此,如果两个跨距具有相同的长度并且在相同的位置重叠,那么filter_spans将附加首先包含在短语匹配器中的实体。有人能帮我吗