在Spacy 2.x中,我使用匹配器在我的文本语料库中查找特定的标记。每个规则都有一个ID(例如'class-1_0'
)。在解析期间,我使用回调on_match
来处理每个匹配。是否有解决方案来检索用于直接在回调中查找匹配的规则。
这是我的示例代码。
txt = ("Aujourd'hui, je vais me faire une tartine au beurre "
"de cacahuète, c'est un pilier de ma nourriture "
"quotidienne.")
nlp = spacy.load('fr')
def on_match(matcher, doc, id, matches):
span = doc[matches[id][1]:matches[id][2]]
print(span)
# find a way to get the corresponding rule without fuzz
matcher = Matcher(nlp.vocab)
matcher.add('class-1_0', on_match, [{'LEMMA': 'pilier'}])
matcher.add('class-1_1', on_match, [{'LEMMA': 'beurre'}, {'LEMMA': 'de'}, {'LEMMA': 'cacahuète'}])
doc = nlp(txt)
matches = matcher(doc)
在这种情况下matches
返回:
[(12071893341338447867, 9, 12), (4566231695725171773, 16, 17)]
12071893341338447867
是基于class-1_0
的唯一ID。我找不到原始规则名称,即使我在matcher._patterns
中进行了一些内省。
如果有人可以帮助我,那就太棒了。 非常感谢你。
答案 0 :(得分:1)
在撰写我的问题时,我经常找到解决方案。
这很简单,而不是像class-1_0
那样使用unicode规则ID,只需使用一个整数。标识符将在整个过程中保留。
matcher.add(1, on_match, [{'LEMMA': 'pilier'}])
与
匹配[(1, 16, 17),]