Как использовать стандартное регулярное выражение с Matcher от SpaCy или PhraseMatcher - PullRequest
0 голосов
/ 22 июня 2019

Я все еще пытаюсь найти наиболее общий подход, который при условии стандартного регулярного выражения (как распознается 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 и пользовательскими атрибутами, но у меня заканчивается срок, поэтому я снова отправляю этот вопрос.

...