对于单个大文本(约 4GB),我需要搜索约 100 万个短语并将它们替换为补充短语。原始文本和替换文本都可以轻松放入内存中。天真的解决方案实际上需要数年才能完成,因为单个替换大约需要一分钟。
天真的解决方案:
for search, replace in replacements.iteritems():
text = text.replace(search, replace)
使用的正则表达式方法re.sub
要慢 x10:
for search, replace in replacements.iteritems():
text = re.sub(search, replace, text)
无论如何,这似乎是一个使用 Boyer-Moore 弦或 Aho-Corasick 的好地方;但是这些方法因为它们通常被实现仅适用于搜索字符串而不是替换它。
或者,任何可以快速执行此操作的工具(Python 之外)也将受到赞赏。
谢谢!