У меня есть большой набор реального текста, из которого мне нужно извлечь слова, чтобы ввести их в программу проверки орфографии. Я хочу извлечь как можно больше значащих слов без лишнего шума. Я знаю, что здесь много ниндзя регулярных выражений, так что, надеюсь, кто-нибудь сможет мне помочь.
В настоящее время я извлекаю все алфавитные последовательности с помощью '[a-z]+'
. Это нормальное приближение, но оно вытаскивает с собой много мусора.
В идеале мне нужно регулярное выражение (не обязательно красивое или эффективное), которое извлекает все алфавитные последовательности, разделенные естественными разделителями слов (например, [/-_,.: ]
и т. д.), и игнорирует любые алфавитные последовательности с недопустимыми границами. .
Однако я также был бы рад получить все алфавитные последовательности, которые НЕ являются смежными с числом. Так, например, 'pie21'
НЕ извлечет 'pie'
, а 'http://foo.com'
извлечет ['http', 'foo', 'com']
.
Я пробовал утверждения lookahead
и lookbehind
, но они применялись к каждому символу (так, например, re.findall('(?<!\d)[a-z]+(?!\d)', 'pie21')
вернет 'pi'
, когда я хочу, чтобы он ничего не возвращал). Я попытался обернуть альфа-часть термином ((?:[a-z]+)
), но это не помогло.
Подробнее. Данные представляют собой базу данных электронной почты, поэтому в основном они написаны на простом английском языке с обычными цифрами, но иногда встречаются бессмысленные строки, такие как GIHQ4NWL0S5SCGBDD40ZXE5IDP13TYNEA
и AC7A21C0
, которые я хотел бы полностью игнорировать. Я предполагаю, что любая алфавитная последовательность с числом в ней - мусор.
\d
работает, но другие escape-последовательности не работают, и это может быть сложно отладить. - person Tim Pietzcker   schedule 19.04.2011