Как настроить токенизатор spaCy, чтобы исключить расщепление фраз, описываемых регулярным выражением - PullRequest
0 голосов
/ 04 мая 2019

Например, я хочу, чтобы токенизатор маркировал 'New York' как ['New York'] вместо значения по умолчанию ['New', 'York'].

Документы предлагают добавлять регулярные выражения при создании пользовательского токенайзера.

Итак, я сделал следующее:

import re
import spacy
from spacy.tokenizer import Tokenizer

target = re.compile(r'New York')

def custom_tokenizer(nlp):

    dflt_prefix = nlp.Defaults.prefixes
    dflt_suffix = nlp.Defaults.suffixes
    dflt_infix = nlp.Defaults.infixes

    prefix_re = spacy.util.compile_prefix_regex(dflt_prefix).search
    suffix_re = spacy.util.compile_suffix_regex(dflt_suffix).search
    infix_re = spacy.util.compile_infix_regex(dflt_infix).finditer

    return Tokenizer(nlp.vocab, prefix_search=prefix_re,
                                suffix_search=suffix_re,
                                infix_finditer=infix_re,
                                token_match=target.match)

nlp = spacy.load("en_core_web_sm")
nlp.tokenizer = custom_tokenizer(nlp)
doc = nlp(u"New York")
print([t.text for t in doc])

Я использовал значения по умолчанию, чтобы нормальное поведение продолжалось до тех пор, пока функция target (аргумент для параметра token_match) не вернет true.

Но я все еще получаю ['New', 'York']. Любая помощь приветствуется.

...