Ваш пример кода, кажется, пропускает оператор, который фактически выполняет сопоставление.Поэтому я добавил метод matcher.add (), который также называет совпадение, вызывая самоопределяемую функцию on_match.
Но что еще важнее, я вынужден изменить ваш шаблон, оставив часть пространства {'IS_SPACE': True, 'OP': '*'} для получения совпадения.
Вот мой рабочий код, который дает мне совпадение:
import spacy
from spacy.matcher import Matcher
nlp = spacy.load('en_core_web_sm')
matcher = Matcher(nlp.vocab)
def on_match(matcher, doc, id, matches): # Added!
print("match")
# Changing your pattern for example to:
pattern = [{'LOWER':'purchase'},{'LOWER':'order'},{'LOWER':'expenditures'},{'LOWER':'not', 'OP':'!'},{'LEMMA':'be'},{'LEMMA':'freeze'}]
matcher.add("ID_A1", on_match, pattern) # Added!
doc = nlp(u'Non-revenue-generating purchase order expenditures will be frozen.')
matches = matcher(doc)
print(matches)
Если я заменю:
У меня больше нет совпадений!
Я уменьшил сложность вашего паттерна - может быть, слишком сильно.Но я надеюсь, что смогу еще немного помочь.