Я сейчас пытаюсь почистить 1-граммовый файл.Вот некоторые из следующих слов:
word
- базовое слово, классический случай word.
- базовое слово, но с точкой w.s.f.w.
- (слово означает слово) - правильная аббревиатура w.s.f.w
- неправильная аббревиатура (отсутствует последняя точка)
Моя текущая реализация рассматривает два разных RegExes, потому что я неудалось объединить их в одну.Первый RegEx распознает основные слова:
find_word_pattern = re.compile(r'[A-Za-z]', flags=re.UNICODE)
Второй используется для распознавания аббревиатур:
find_acronym_pattern = re.compile(r'([A-Za-z]+(?:\.))', flags=re.UNICODE)
Допустим, у меня есть input_word
как последовательность символов,Вывод получается с помощью:
"".join(re.findall(pattern, input_word))
Затем я выбираю, какой вывод использовать на основе длины: чем длиннее вывод, тем лучше.Моя стратегия хорошо работает с делом нет.1, где оба шаблона возвращают одинаковую длину.
Дело №.2 проблематично, потому что мой подход выдает word.
(с точкой), но мне нужно, чтобы он возвратил word
(без точки).В настоящее время дело решено в пользу find_acronym_pattern
, что дает более длинную последовательность.
Дело №.3 работает как положено.
Дело №.4: find_acronym_pattern
пропускает последний символ, означающий, что он производит w.s.f.
, тогда как find_word_pattern
производит wsfw
.
Я ищу RegEx (предпочтительно один вместо двух, которые используются в настоящее время), который:
учитывая word
возвращает word
учитывая word.
возвращает word
дано w.s.f.w.
возвращено w.s.f.w.
дано w.s.f.w
возвращено w.s.f.w.
дано m.in
возвращено m.in.