Я написал функцию, которая сканирует список строк по индексу на соответствие регулярному выражению в текущем и следующих двух индексах списка.Если совпадение найдено по трем индексам, эти элементы в списке объединяются.
import re
from nltk.tokenize import MWETokenizer
s = ['Here','be', 'dragons', 'Captain', '23', 'March', '2018', 'and', 'Oct', '22', '2018']
pattern = [r'\d{2}|[a-zA-Z]{3,5}', r'\d{2}|[a-zA-Z]{3,5}', r'\d{4}']
def un_tokenize(pattern, sep, toks):
tokenizer = MWETokenizer([], separator=sep)
for i in list(range(0, len(toks)-len(pattern)+1)):
if bool(re.match(pattern[0], toks[i])) and \
bool(re.match(pattern[1], toks[i+1])) and \
bool(re.match(pattern[2], toks[i+2])):
tup = (toks[i], toks[i+1], toks[i+2])
tokenizer.add_mwe(tup)
return tokenizer.tokenize(toks)
print(un_tokenize(pattern, '+', s))
, что корректно возвращает
['Here', 'be', 'dragons', 'Капитан', '23 + март + 2018 ',' и ',' окт + 22 + 2018 ']
Я хочу знать, 1) Как я могу изменить оператор if, чтобы включитьпеременное число 'и', так что я могу поместить в шаблон 2 регулярных выражения или 4 регулярных выражения и т. д .?
2) Я уверен, что это не самый питонический способ сделать это, поэтому я другие методыДобро пожаловать.