我有一个很大的文本和一个单词列表,大约10K。
用Python将文本中的所有这些单词替换为其他单词的最快方法是什么?
编辑:
文本大小> 1Gb,文本是人工书写的,并且经过“极端标记化”(任何字母数字字符运行和任何其他单个符号都被分割成新的标记)
大于10K的单词数,文本中每个单词的频率为1
所有替换词中的替换词均相同。
Python 2.5-2.7
最佳答案
输入格式和搜索/替换配对信息将非常有必要来完善该答案,但这将是我最初的尝试(假设输入数据具有某种形式的规律性,在示例代码中用空格分隔)下面)。
replacements = {
's1': 'r1',
's2': 'r2'
...
}
with open('input.txt') as fhi, open('output.txt', 'w') as fho:
for line in fhi:
words = line.split(' ')
fho.write(' '.join(map(lambda w: replacements.get(w, w), words))
# Or as a list comprehension from the comments.
fho.write(' '.join([replacements.get(w, w) for w in words]))
这里的想法是,我们将从输入文件将数据重定位到输出文件中。对于每一行的每个单词,我们检查它是否在替换字典中。如果是,则检索新值,否则通过
dict.get(key[, default])
方法返回原样的单词。这可能不理想,无法处理标点符号,可能会对未分成行的输入文件造成麻烦,等等,但是这可能是一种入门方法。