Я работаю над предложением и токенизатором для учебника. Это означает разделение строки документа на предложения и предложения на слова. Примеры:
#Sentencizing
"This is a sentence. This is another sentence! A third..."=>["This is a sentence.", "This is another sentence!", "A third..."]
#Tokenizatiion
"Tokens are 'individual' bits of a sentence."=>["Tokens", "are", "'individual'", "bits", "of", "a", "sentence", "."]
Как видно, нужно нечто большее, чем просто string.split (). Я использую re.sub (), добавляя «специальный» тег для каждого соответствия (а затем разделяя его в этом теге), сначала для предложений, а затем для токенов.
Пока это работает отлично, но есть проблема: как сделать регулярное выражение, которое может делиться на точки, но не на (...) или на числа (3.14)?
Я работал с этими опциями с упреждением (Мне нужно сопоставить группу и затем иметь возможность вспомнить ее для добавления), но ни одна не работает:
#Do a negative look behind for preceding numbers or dots, central capture group is a dot, do the same as first for a look ahead.
(?![\d\.])(\.)(?<![\d\.])
Приложение:
sentence = re.sub(pattern, '\g<0>'+special_tag, raw_sentence)