【发布时间】:2011-04-19 14:22:12
【问题描述】:
我有大量真实世界的文本,我需要从中提取单词以输入到拼写检查器中。我想在没有太多噪音的情况下提取尽可能多的有意义的词。我知道这里有很多正则表达式忍者,所以希望有人可以帮助我。
目前我正在使用'[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这样的垃圾字符串我想完全忽略.我假设任何带有数字的字母顺序都是垃圾。
【问题讨论】:
-
更好地使用带有正则表达式的原始字符串。
\d恰好可以工作,但其他转义序列会失败,这可能很难调试。
标签: python regex word alphabetical text-extraction