大规模拉丁语语料库文本重复内容高效去除方案问询
高效处理拉丁语语料重复内容的方案
核心思路
针对你1.7亿词的大语料,优先采用基于滑动窗口+哈希的轻量方案,避开SequenceMatcher的高复杂度,同时精准区分「无意义的后缀重复」和「训练模型时自然出现的重复短句」。
具体实现步骤
1. 基于句子列表(corpus_list)的去重(推荐)
因为已预处理为句子列表,操作更精准,能有效规避误删自然重复:
- 维护一个滚动哈希集合,记录最近N个句子的哈希值(N建议设为20-50,可根据语料短句长度灵活调整)
- 遍历句子列表,对每个句子计算哈希(用内置
hash()快速计算,追求稳定性也可使用hashlib.md5):- 若当前句子哈希不在滚动集合内,保留该句子并将哈希加入集合;当集合长度超过N时,移除最早加入的哈希值
- 若当前句子哈希在集合内,进一步检查连续M个句子(比如M=3)是否与之前某段连续句子完全匹配,只有连续匹配时才判定为冗余重复,跳过后续重复段
- 最后将保留的句子重新拼接为完整文本
2. 针对拼接字符串(concatenated_preprocessed_text)的快速去重
若必须使用单字符串处理,采用后缀数组+最长重复子串检测的优化方案:
- 借助
divsufsort库(C语言实现,速度极快)生成后缀数组,快速定位长重复子串 - 设置长度阈值:仅处理长度超过L(比如50个词)的重复子串,忽略短重复(避免误删自然重复短句)
- 精准删除冗余重复:遍历找到的长重复子串,判断其起始位置是否在首次出现位置之后,且属于连续重复的后缀部分,符合条件再执行删除
3. 批量处理CSV的高效技巧
- 用
pandas结合多进程处理7000行数据,大幅提升效率:from multiprocessing import Pool import pandas as pd def deduplicate_row(row): # 此处填入上述针对corpus_list或字符串的去重逻辑 return processed_text df = pd.read_csv("your_corpus.csv") with Pool(4) as p: df["deduplicated_text"] = p.map(deduplicate_row, df["corpus_list"].tolist()) - 处理完成后可直接覆盖原
text列,或保存为新列
关键注意事项
- 阈值调整:N(滚动窗口大小)、M(连续匹配数)、L(重复子串长度阈值)需结合语料测试调整,建议先拿100行数据做小范围测试,找到既能高效去重又不误删自然重复的参数
- 避免误删:不要单独对单个句子做去重,必须结合上下文的连续重复判断——自然重复短句通常零散出现,不会连续多句重复
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

