В Spacy 2.x я использую сопоставление для поиска определенных токенов в моем текстовом корпусе. У каждого правила есть идентификатор (например, '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
. Я не могу найти исходное название правила, даже если провожу самоанализ в matcher._patterns
.
Было бы здорово, если бы кто-нибудь мне помог. Большое тебе спасибо.