Я все еще пытаюсь найти наиболее общий подход, который при условии стандартного регулярного выражения (как распознается Python или Java), который я могу передать в spaCy's Matcher или PhraseMatcher без предварительной предварительной обработки в формате SpaCy, таком как "REGEX ».
Я уже задавал более конкретный вопрос в разделе «Добавление сущностей REGEX в SpaCy's Matcher» в отношении stackoverflow. Sophie VL предоставил хороший, работоспособный подход, но он требовал разбить регулярное выражение со встроенным \ s + на отдельные токены соответствия. Я пытался использовать PhraseMatcher, но, похоже, он не принимает произвольные шаблоны "REGEX". Я повторяю пример, который я привел в своем предыдущем запросе от 11 июня 2019 года. Возможно, есть способ дать стандартное регулярное выражение с использованием пользовательских атрибутов, но я не смог найти правильный подход.
nlp = spacy.load("en_core_web_lg")
matcher = PhraseMatcher(nlp.vocab)
pattern = [{"ORTH": {"country": {"REGEX": "^[Uu](\.?|nited) ?[Ss](\.|tates)$"}}}]
matcher.add("US", None, pattern)
doc = nlp(u"I'm from the United States.")
matches = matcher(doc)
for match_id, start, end in matches:
string_id = nlp.vocab.strings[match_id]
span = doc[start:end]
print(match_id, string_id, start, end, span.text)
Как уже говорилось ранее, я ожидал, что match_id, string_id 3 4 United States
будет распечатан. Теперь я знаю, что должен использовать PhraseMatcher или пользовательский атрибут, но пока не понял, как именно.
Я просто хочу сказать, что ответ Софи помог мне получить некоторые шаблоны регулярных выражений, которые не содержат пробелов и дефисов. Я все еще работаю с документацией по PhraseMatcher и пользовательскими атрибутами, но у меня заканчивается срок, поэтому я снова отправляю этот вопрос.