仅与Spacy Phrasematcher匹配时间最长

时间:2019-11-29 13:01:21

标签: python nlp spacy named-entity-recognition ner

我创建了一个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使其仅与重叠匹配中最长的匹配?

1 个答案:

答案 0 :(得分:1)

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