使SpaCy基于规则的匹配运算符贪婪

时间:2019-07-25 23:09:26

标签: python spacy

使用SpaCy的基于规则的模式匹配器和'+'运算符,我得到了尽可能长的跨度(以及其中的所有跨度)。我想知道是否有办法只返回最长的跨度。

import spacy
nlp = spacy.load('en_core_web_sm')
from spacy.matcher import Matcher
matcher = Matcher(nlp.vocab)

doc = nlp("I have a BA in English Literature. I received a certificate in Computational Linguistics. I have a Computer Science BA.")

matcher.add("education", None,
            [{'TAG': 'NN'}, {'POS': 'ADP'}, {'POS': 'PROPN', 'OP': '+'}],
            [{'POS': 'PROPN', 'OP': '+'}, {"POS": "NOUN"}])

matches = matcher(doc)

for match_id, start, end in matches:
    # Get the matched span
    matched_span = doc[start:end]
    print(matched_span.text)

输出为:

英语文学学士学位

英国文学学士学位

计算证书

计算语言学证书

科学BA

计算机科学学士学位

是否有一种简单的方法可以使它返回“最贪婪”的跨度? (例如“英语文学学士学位”,“计算语言学证书”和“计算机科学学士学位”?

1 个答案:

答案 0 :(得分:0)

Matcher的预期行为是返回所有可能的匹配项,而且我认为目前还没有办法只获得“最贪婪”。您必须按长度过滤它们...