我有大量真实世界的文本,我需要从中提取单词以输入拼写检查器。我想在没有太多噪音的情况下提取尽可能多的有意义的单词。我知道这里有很多正则表达式忍者,所以希望有人可以帮助我。
目前我正在使用'[a-z]+'
. 这是一个不错的近似值,但它会拖出很多垃圾。
理想情况下,我想要一些正则表达式(不一定要漂亮或高效)来提取由自然单词分隔符(例如[/-_,.: ]
等)分隔的所有字母序列,并忽略任何具有非法边界的字母序列。
但是,我也很高兴能够获得所有不与数字相邻的字母序列。因此,例如'pie21'
不会提取'pie'
,但'http://foo.com'
会提取['http', 'foo', 'com']
。
我尝试lookahead
了lookbehind
断言,但它们是按字符应用的(例如,当我希望它什么都不re.findall('(?<!\d)[a-z]+(?!\d)', 'pie21')
返回时会返回)。'pi'
我尝试将 alpha 部分包装为一个术语 ( (?:[a-z]+)
),但它没有帮助。
更多细节:数据是一个电子邮件数据库,所以它主要是带有普通数字的简单英语,但偶尔会有像我想完全忽略的垃圾GIHQ4NWL0S5SCGBDD40ZXE5IDP13TYNEA
字符串AC7A21C0
。我假设任何带有数字的字母顺序都是垃圾。