我有两个清单:
因此,我必须遍历 750K 句子 并执行大约 20K 替换, 但前提是我的单词实际上是 “单词” 并且不是更大字符串的一部分。
我通过预编译我的 单词 来做到这一点,以便它们的两侧是\b单词边界元字符:
\b
compiled_words = [re.compile(r'\b' + word + r'\b') for word in my20000words]
然后我遍历我的 “句子” :
import re for sentence in sentences: for word in compiled_words: sentence = re.sub(word, "", sentence) # put sentence into a growing list
这个嵌套循环每秒 处理大约50 个句子,这很好,但处理我的所有句子仍然需要几个小时。
有没有办法使用该str.replace方法(我认为它更快),但仍然要求替换只发生在 单词边界 ?
str.replace
或者,有没有办法加快该re.sub方法?re.sub如果我的单词长度大于句子的长度,我已经通过跳过来稍微提高速度,但这并没有太大的改进。
re.sub
我正在使用 Python 3.5.2
您可以尝试的一件事是编译一个单一模式,例如"\b(word1|word2|word3)\b".
"\b(word1|word2|word3)\b"
因为re依赖 C 代码来进行实际匹配,所以可以节省大量资金。
re
正如@pvg 在评论中指出的那样,它也受益于单通道匹配。