У меня есть несколько цифр внутри текста, которые я хотел бы оставить одним предложением.Некоторые из них:
7-2017-19121-B
7-2016-26132
wd/2012/0616
JLG486-01
H14-0890-12
Как я могу защитить их, чтобы они не были разделены на слова.Я уже использую регулярное выражение для пользовательского токенизатора, чтобы никогда не разбивать слова тире, но он работает только с буквами, а не с цифрами.Я не хочу менять регулярное выражение по умолчанию, которое является большим и очень сложным.Как я могу сделать это легко?
То, что я уже сделал, - это использование этих «защитников дефисов».Для 7-2014-1721-Y
я получил токены [7,-,2014,-,1721-Y]
, поэтому последняя фраза не разделена, а предыдущая.Как я уже сказал, код сложен и хотел бы добавить то же самое, чтобы включить такое действие для сущности номер-номер.
Это функция:
def custom_tokenizer(nlp):
prefix_re = compile_prefix_regex(nlp.Defaults.prefixes)
suffix_re = compile_suffix_regex(nlp.Defaults.suffixes)
# changing default infixed
def_infx = nlp.Defaults.infixes
cur_infx = (d.replace('-|–|—|', '') for d in def_infx)
infix_re = compile_infix_regex(cur_infx)
return Tokenizer(nlp.vocab, prefix_search=prefix_re.search, suffix_search=suffix_re.search,
infix_finditer=infix_re.finditer, token_match=None)
Может быть, есть и более простой способ, кроме модификации?Я пытался процитировать эти "таблички" с помощью некоторых escape-символов, таких как {7-2017-19121-B}
, но это не работает.
Кстати, есть регулярное выражение, которое соответствует этим специальным "числам".Возможно, для меня обходным путем будет просто удалить их из текста (что я попробую позже), но теперь я спрашиваю, есть ли у меня здесь какие-либо шансы.
["(?=[^\d\s]*\d)(?:[a-zA-Z\d]+(?:/[a-zA-Z\d]+)+)", "(?:[[A-Z\d]+(?:[-][A-Z\d]+)+)"]
Подсказка.Я обнаружил, что переход с 7-2017-19121-B
на 7/2017/19121/B
работает по мере необходимости.Вопрос (для меня, чтобы проверить), как я могу приспособить это к моему текущему коду и остаться с производительностью, которую я имею сейчас.