如何用Python移除文本文件中含3个及以上相同单词的相似重复行?
实现移除含3个及以上匹配单词的相似重复行
要解决这个问题,咱们不能再只对比整行内容了,得改成基于单词交集数量来判断是否属于相似重复。核心思路很清晰:
- 把每一行拆成单词集合(用集合是因为咱们只关心单词是否存在,不纠结顺序和重复)
- 对每一行,检查它和所有已保留行的单词交集长度,如果有任意一个交集≥3,就跳过这行;否则保留它,并把它的单词集合存起来方便后续对比
下面是修改后的可运行代码:
def remove_similar_duplicates(input_file, output_file, threshold=3): # 存储已保留行的单词集合+原行内容(保证写入格式和原文件一致) kept_lines = [] with open(input_file, 'r') as infile, open(output_file, 'w') as outfile: for line in infile: # 处理行首尾空白,拆分单词(自动忽略多余空格) current_words = set(line.strip().split()) # 标记当前行是否是相似重复 is_similar_duplicate = False # 遍历所有已保留行,逐一检查相似度 for stored_words, _ in kept_lines: common_words = stored_words & current_words if len(common_words) >= threshold: is_similar_duplicate = True break if not is_similar_duplicate: # 不是相似重复,写入文件并记录到已保留列表 outfile.write(line) kept_lines.append((current_words, line)) # 调用函数处理你的文件 remove_similar_duplicates("file.txt", "out.txt")
细节说明:
kept_lines存了两个信息:已保留行的单词集合,以及原行的原始内容,这样既能快速对比相似度,又能保证输出和原文件格式完全一致current_words = set(line.strip().split()):先去掉行首尾的换行符和空格,再按空白拆分单词转成集合,自动处理了行内多空格的情况- 只要当前行和任意一行已保留行的共同单词数达到阈值(默认3),就判定为相似重复直接跳过
用你给出的示例输入测试:
The apple is red
The apple red
The banana is yellow
The apple is red
最终输出会是:
The apple is red
The banana is yellow
完全符合你的需求~
内容的提问来源于stack exchange,提问作者sam s
相关产品推荐
相关产品推荐

