Например, я хочу, чтобы токенизатор маркировал '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']. Любая помощь приветствуется.