Car*_*ten 3 python nlp named-entity-recognition spacy ner
我按照教程创建了一个Spacy Phrasematcher来匹配文档中的名称。我想使用结果匹配作为额外的训练数据来训练一个 Spacy NER 模型。然而,我的模式分别包含全名(例如“Barack Obama”)和姓氏(“Obama”)。
因此,在包含“Barack Obama”的句子中,两种模式都匹配,导致匹配重叠。但是,当我尝试使用数据进行训练时,这种重叠会触发异常,例如:
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.
Run Code Online (Sandbox Code Playgroud)
我一直在考虑在使用数据进行训练之前过滤掉重叠的匹配,但这似乎是一种非常低效的方法,导致处理大数据的时间显着增加。
有没有办法设置 aPhraseMatcher
以便它只匹配重叠匹配的最长匹配?
在PhraseMatcher
没有内置的方式来过滤掉重叠的,而它的匹配场比赛,但有一个效用函数进行筛选重叠的匹配算账:spacy.util.filter_spans()
。它更喜欢最长的跨度,如果两个重叠的跨度长度相同,则文本中较早的跨度。