仅与Spacy Phrasematcher的最长匹配

问题描述 投票:1回答:1

我创建了一个Spacy Phrasematcher以匹配文档中的名称,紧随tutorial之后。我想将结果匹配项用作其他训练数据,以训练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.

我一直在考虑在使用数据进行训练之前过滤掉重叠的匹配,但这似乎是一种效率很低的方法,导致大数据的处理时间显着增加。

是否有办法设置PhraseMatcher,使其仅与重叠匹配中最长的匹配?

python nlp spacy named-entity-recognition ner
1个回答
1
投票

PhraseMatcher没有内置的方法可以在匹配时过滤掉重叠的匹配项,但是此后有一个实用程序功能可以过滤掉重叠的匹配项:spacy.util.filter_spans()。它首选最长的跨度,如果两个重叠的跨度相同,则使用文本中较早的跨度。

© www.soinside.com 2019 - 2024. All rights reserved.