我有这样的文件:
documents = [
"I work on c programing.",
"I work on c coding.",
]
我有同义词文件,例如:
synonyms = {
"c programing": "c programing",
"c coding": "c programing"
}
我想替换我编写这段代码的所有同义词:
# added code to pre-compile all regex to save compilation time. credits alec_djinn
compiled_dict = {}
for value in synonyms:
compiled_dict[value] = re.compile(r'\b' + re.escape(value) + r'\b')
for doc in documents:
document = doc
for value in compiled_dict:
lowercase = compiled_dict[value]
document = lowercase.sub(synonyms[value], document)
print(document)
输出:
I work on c programing.
I work on c programing.
但是由于文档的数量是几百万,同义词的数量是几万,所以这段代码完成的预期时间大约是 10 天。
有没有更快的方法来做到这一点?
PS:我想用输出来训练 word2vec 模型。
非常感谢任何帮助。我正在考虑编写一些 cpython 代码并将其放入并行线程中。
最佳答案
我以前做过这样的字符串替换工作,也用于在非常大的文本语料库上训练 word2vec 模型。当要替换的术语(您的“同义词术语”)的数量非常大时,使用 Aho-Corasick algorithm 进行字符串替换是有意义的。而不是遍历许多单个字符串替换。你可以看看我的fsed实用程序(用 Python 编写),这可能对您有用。
关于python - 正则表达式替换需要花费数百万个文档的时间,如何让它更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44178449/