Это должно быть суффикс, инфикс или префиксное правило? - PullRequest
1 голос
/ 31 марта 2020

Я хочу добавить специальный случай для токенизации следующего

DATE:01/01/2020

Токенизация по умолчанию сохраняет это как один токен, но мне нужно разделить его следующим образом

'DATE', ':', '01/01/2020'

Я добавил инфиксное правило к стандартному, как показано ниже, что, кажется, работает

# modify tokenizer infix patterns
infixes = (
    LIST_ELLIPSES
    + LIST_ICONS
    + [
        r"(?<=[0-9])[+\-\*^](?=[0-9-])",
        r"(?<=[{al}{q}])\.(?=[{au}{q}])".format(
            al=ALPHA_LOWER, au=ALPHA_UPPER, q=CONCAT_QUOTES
        ),
        r"(?<=[{a}]),(?=[{a}])".format(a=ALPHA),
        r"(?<=[{a}])(?:{h})(?=[{a}])".format(a=ALPHA, h=HYPHENS),
        r"(?<=[{a}0-9])[:<>=/](?=[{a}])".format(a=ALPHA),

        #this regex is added to handle colon preceded by alpha and followed by numeric
        r"(?<=[{a}])[:](?=([0-9][0-9][/]))".format(a=ALPHA)
    ]
)

infix_re = compile_infix_regex(infixes)
nlp.tokenizer.infix_finditer = infix_re.finditer
doc = nlp(text)
print([t.text for t in doc]) 

Однако мне было интересно, к какому из них я должен добавить это - суффикс, инфикс или префикс?

Я не смог придумать работающее суффиксное правило.

В общем, как мы решаем, какую категорию правил использовать?

1 Ответ

2 голосов
/ 31 марта 2020

В конце концов не имеет значения, был ли токен префиксом, инфиксом или суффиксом, и часто может быть несколько способов получить один и тот же результат.

Я думаю, что лучшим способом было бы добавить регулярное выражение, которое имеет : в качестве инфикса между DATE и ди git. Вместо этого вы также можете добавить DATE и : в качестве префиксов, если это не вызывает побочных эффектов в других случаях, что может быть немного проще, поскольку вы можете просто добавлять элементы в TOKENIZER_PREFIXES без написания регулярных выражений.

...