知识库清洗应在切分和向量化之前完成,否则同一脏文档会变成多条噪声片段。第一轮先隔离空内容、Unicode 替换字符、规范化后重复文本和异常短文档,并保留文档 ID 与原因。
清洗顺序
- 保留原文件和来源 ID,不直接覆盖。
- 统一 Unicode 形式、换行和首尾空白。
- 检测空内容、替换字符和异常短文本。
- 对规范化文本计算指纹,隔离完全重复。
- 抽样复核后,再做标题/正文切分和向量化。
标题结论:重复文档、乱码和异常短内容应在切分前按文档 ID 隔离,清洗结果必须可追溯到原文件。

可运行的第一轮质检
import hashlib, re, unicodedata
docs = [{"id": "a", "text": " 退款流程\n请提交订单号。 "},
{"id": "b", "text": "退款流程 请提交订单号。"},
{"id": "c", "text": "错误字符:\ufffd"}]
seen, accepted, rejected = {}, [], []
for doc in docs:
text = unicodedata.normalize("NFKC", doc["text"])
text = re.sub(r"\s+", " ", text).strip()
reason = None
if not text: reason = "empty"
elif "\ufffd" in text: reason = "replacement_character"
elif len(text) < 8: reason = "too_short_review"
digest = hashlib.sha256(text.encode()).hexdigest()
if not reason and digest in seen: reason = f"duplicate_of:{seen[digest]}"
if reason: rejected.append((doc["id"], reason))
else: seen[digest] = doc["id"]; accepted.append((doc["id"], text))
print("accepted", accepted)
print("rejected", rejected)
读者下一步:对原文副本运行脚本,先人工复核 rejected 清单,再决定修复、合并或排除。
怎样确认没有误删
结果验证:接受数与拒绝数之和必须等于输入文档数;每条拒绝记录都要包含原始 ID 和单一主要原因,并能回到原文件复查。
NFKC 会改变某些兼容字符,代码、数学公式、型号和全半角有业务意义时要抽样检查。近似重复不能只靠 SHA-256,需要另做相似度审核且保留差异。
限制
失败边界:本文只处理文档级确定性问题,没有判断事实是否过期、权限是否允许入库,也没有证明某种切分长度或向量模型效果最好。
依据与核验日期
- Python unicodedata 文档:说明 Unicode 规范化接口
- Python hashlib 文档:说明 SHA-256 等摘要算法接口
以上页面于 2026-10-01 核验。版本更新后,应重新查看参数含义和默认值。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31224.html