Использование регулярных выражений и ОРТ как части сопоставления фраз в SpaCy

#python #spacy

Вопрос:

Я использую фразеологизмы Спейси для большого количества правил, некоторые из которых являются символами акций компании, которые отображаются в виде, скажем,:

AAPL.Нью-Йорк ББ.ТЕХАС

Или они могут отображаться как AAPL или BB.

При сопоставлении фраз я использовал два шаблона, чтобы получить эти совпадения:

 {"label": "TICKER", "pattern": [{"ORTH": {"REGEX": "AAPL\.[A-Z]{2,3}"}}]}
{"label": "TICKER", "pattern": [{"ORTH": "AAPL"}]}
 

Является ли ОРТ правильным шаблоном, соответствующим РЕГУЛЯРНОМУ выражению? Это иногда дает некоторые интересные результаты, когда он захватывает что-то вроде AAPL.HSHSHSJSKKSKKS, даже если это выходит за рамки {2,3}.

Может ли кто-нибудь помочь мне с а) Имеет ли смысл здесь использовать ОРТ б) Как ограничить использование регулярных выражений, чтобы после периода было не более 2 или 3 символов ?

Комментарии:

1. Помогает ли мой ответ или вам нужна дополнительная помощь?

Ответ №1:

ORTH (имеется в виду орфография) использовалась до TEXT того, как была введена в Spacy 2.1. Теперь, при сопоставлении регулярных выражений, вам лучше применить это к TEXT .

Что касается самого регулярного выражения, имейте в виду, что оно применяется ко всему тексту токена, и для того, чтобы соответствовать всему тексту токена, вам нужно использовать якоря ^ и $ (или A и z ).

Таким образом, вы можете использовать

 {"TEXT": {"REGEX": r"^AAPL.[A-Z]{2,3}$"}}
 

Кроме того, обратите внимание на использование необработанного строкового литерала, чтобы избежать двойной экранирующей обратной косой черты.