我正在使用Python 3.5.2
我有两个清单
因此,我必须遍历750,000个句子并执行大约20,000个替换,但前提是我的单词实际上是“单词”,并且不属于较大的字符串。
我这样做是通过预编译我的单词,使它们位于\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方法的方法(我认为是更快的方法),但仍然要求仅在单词边界处进行替换?
或者,有没有办法加快该re.sub方法?re.sub如果我的单词的长度大于句子的长度,我已经略微提高了速度,但这并没有太大的改进。
感谢你的任何建议。
你可以尝试做的一件事就是编译一个单一模式,例如"\b(word1|word2|word3)\b"。
"\b(word1|word2|word3)\b"
由于re依靠C代码进行实际匹配,因此节省的费用可观。
re
正如@pvg在评论中指出的,它也受益于单遍匹配。
如果你的单词不是正则表达式,那么Eric的答案会更快。