python - 正则表达式替换需要花费数百万个文档的时间,如何让它更快?

标签 python parallel-processing word2vec cpython

我有这样的文件:

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/

相关文章:

python - 我想从 dict 创建一个 df,其中 1 列是 dict.keys,另一列是 dict 值

python - 回文函数在 Python 中不起作用

c - OpenMP 花费的时间比预期的要长

multithreading - Clojure:pvalues 与 pcalls

python - 给定单词的向量(不是单词本身),获取最相似的单词

python - Doc2vec : How to get document vectors

python - 通过网状结构在 R 中运行 gensim 时出现 ImportError : cannot import name 'ssl' from 'urllib3. util.ssl

python - 如何保存和编辑服务器渲染数据?

c# - 在 C# 中并行运行两个任务

machine-learning - doc2vec : How is PV-DBOW implemented