基于大量此类短语替换大文本文件中的短语的高效方法



所以我有一个很大的文本文件,大约900MB,我想逐行读取文件,并且对于每一行,做查找和替换,根据短语列表中的项目,我们来假设一个情况

假设我有一个.txt文件,其中包含所有纯文本维基百科。

我有一个python短语列表,称之为P,P = ['hello world','twly three','any bigram','any trigram'],P中的所有项目都是短语(不存在单个单词(

给定此列表 P,我正在尝试扫描 .txt 文件,逐行并使用 P,检查当前行中是否存在任何 P 的项目,如果它们确实存在,请用 _ 替换单词之间的空格,例如,如果当前行说:"你好世界,三个任何文本都在这里",它应该像这样替换它: "hello_world twently_three任何文本都放到这里" P 的长度为 14,000

我已经在python中实现了这个,它非常慢,它只能以平均约5,000行/分钟的速度执行此操作,.txt文件很大,有数百万行,有什么有效的方法可以做到这一点吗? 谢谢

更新:

with open("/media/saurabh/New Volume/wikiextractor/output/Final_Txt/single_cs.txt") as infile:
for index,line in enumerate(infile):
for concept_phrase in concepts:
line = line.replace(concept_phrase, concept_phrase.replace(' ', '_'))
with open('/media/saurabh/New Volume/wikiextractor/output/Final_Txt/single_cs_final.txt', 'a') as file:
file.write(line +  'n' )  
print (index)

不应在每一行都打开和关闭输出文件。更重要的是,您可以存储每个concept_phrase的替换,并避免对concept_phrases的翻译版本进行k * n替换(k是概念短语的数量,n是行数(:

in_file = "/media/saurabh/New Volume/wikiextractor/output/Final_Txt/single_cs.txt"
out_file = "/media/saurabh/New Volume/wikiextractor/output/Final_Txt/single_cs_final.txt"
replacement = dict([(cp, cp.replace(' ', '_')) for cp in concepts])
with open(in_file) as infile, open(out_file, 'a') as file:
for line in infile:
for concept_phrase in concepts:
line = line.replace(concept_phrase, replacement[concept_phrase])
file.write(line) 

str.replace通常很快,我怀疑即使重复调用str.replace,用re.sub一次性替换也不会击败它。

我建议使用cython模块编译文件并尝试运行它。 它将加快您的代码速度。

最新更新