news 2026/10/20 15:49:19

知识库文档清洗:垃圾进垃圾出

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
知识库文档清洗:垃圾进垃圾出

先把结论甩在前面:RAG 检索答不准,八成不是模型菜,是你喂进去的文档脏。页眉页脚、PDF 抽出来的乱码、同一段话复制了三遍——这些垃圾不清掉,召回的 chunk 里全是噪声,模型再聪明也是在垃圾堆里翻东西。下面是我这两个月踩出来的清洗清单,按重要性排,直接抄。

背景交代一下。我给公司搭了个内部制度问答的小工具,把 200 多份 PDF/Word 规章塞进知识库。第一版上线当天就翻车——同事问"年假怎么休",它给我回了一句页脚里的"第 12 页 共 38 页 机密文件请勿外传"。当场社死。后来我老老实实做了下面这套清洗,准确率从能用都谈不上,提到大概八成能直接采纳。


1. 砍掉页眉页脚和水印行

这是头号杀手。PDF 每页底部那行"公司名+页码+日期",抽文本时会被当正文一起切进 chunk。200 页文档就是 200 条"XX公司 第N页"的污染。

我的做法:按行频统计。同一行文本在文档里出现超过页数的 70%,基本就是页眉页脚,直接删。

from collections import Counter lines = [l.strip() for l in text.split("\n") if l.strip()] freq = Counter(lines) page_count = text.count("\f") + 1 # \f 是分页符 trash = {l for l, c in freq.items() if c > page_count * 0.7} clean = [l for l in lines if l not in trash]

坑:有些正文标题也会高频出现(比如每章都有"注意事项"),阈值卡太低会误伤。我调到 0.7 才稳。

2. 干掉 PDF 抽取产生的乱码字符

PDF 转文本最爱吐两类垃圾:一是字体没映射好的�(就是那个◇问号方块),二是连字fifl这种把 fi/fl 黏一起的怪东西。还有 Word 里复制来的全角空格、零宽字符 ,肉眼看不见,但会让"年假"和"年 假"被当成两个词。

import re, unicodedata text = unicodedata.normalize("NFKC", text) # 全角转半角、连字拆开 text = text.replace("", "").replace("�", "") text = re.sub(r"[ \t]+", " ", text)

NFKC这步省了我一堆事,连字、全角数字、奇怪空格一把梭。

3. 去重——逐字重复和近似重复都要管

制度文档最爱大段复制粘贴。我那批文件里,"本制度自发布之日起施行"这句话出现了 41 次。完全一样的好处理,set 一下就行;难的是改了俩字的近似重复。

我用 MinHash 做近似去重,相似度超过 0.9 的段落只留一段。小批量嫌麻烦的话,直接拿段落前 50 个字做 key 粗筛也能挡掉大半。

重复类型

检测手段

处理

完全重复

哈希/set

直接删

近似重复(改几字)

MinHash / SimHash

留一条

表格被拆多份

看是否连续相同表头

合并

4. 修被切断的句子和孤行

PDF 分栏、分页会把一句话从中间劈开,上半句在这页结尾,下半句在下页开头。切 chunk 时这俩被分到不同块,语义就碎了。

简单规则:某行不是以句号叹号问号结尾、且下一行不是以大写或编号开头,大概率是被切断的,拼回去。中文判断标点,英文判断行尾是否完整。

5. 处理表格——别让它变成一锅字符粥

表格直接抽文本会变成姓名 张三 部门 技术 工号 1024这种糊成一团的东西,检索时几乎废了。我的偷懒办法:能转就转成 Markdown 表格保留结构,转不了就按行拼成"姓名:张三;部门:技术"这种键值对句子,至少语义还在。

6. 统一编码和换行,最后留一道人工抽查

全部转 UTF-8,\r\n归一成\n。然后——这步别省——随机抽 20 个 chunk 自己读一遍。我每次清洗完都抽查,基本每次都能逮到一两个前面规则没覆盖的脏数据。自动化挡 95%,剩下 5% 靠肉眼。


说点实在的。这套清洗不性感,纯体力活,写正则写到怀疑人生,而且它只管"把数据弄干净",弄完该不准还是不准,得自己调切分和检索。但收益是实打实的——同样的模型、同样的提示词,光把文档洗干净,我那个问答助手的可用度直接换了个台阶。

搭这个助手本身倒没费多少劲。我用的是那种零代码就能配智能体的平台,拖一拖配一配,挂个大模型、传一批文档当私有知识库,半天就跑起来了,根本没写后端。真正磨人的全在数据这一关:洗文档花的时间,是搭壳子的五倍不止。所以别指望工具帮你把脏数据变干净——垃圾进,还是垃圾出,这事谁也救不了你。

(顺带:模型那层我走的讯飞星辰MaaS,现成大模型 API 直接调,没自己部署算力,省心。)

你们洗知识库文档时还踩过什么邪门的坑?评论区聊聊,我那个"第12页机密文件"的笑话不能只有我一个人闹。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 7:28:54

Rockwell Automation工厂获世界经济论坛“全球灯塔工厂”认定

这一殊荣充分彰显了Rockwell新加坡工厂在先进制造领域的卓越实力,以及公司在推动人工智能驱动的数字化转型规模化落地方面发挥的引领作用 Rockwell Automation, Inc.(NYSE:ROK)——全球最大的专注于工业自动化与数字化转型的企业…

作者头像 李华
网站建设 2026/10/19 17:23:13

内存计算与CNN加速:IMCE平台与LBLP算法实践

1. 内存计算与CNN加速的现状与挑战在边缘计算和物联网设备爆炸式增长的今天,人工智能模型的部署面临着前所未有的效率挑战。作为一名长期从事AI加速器设计的工程师,我见证了传统数字加速器(如GPU、TPU)在能效比上遇到的瓶颈。数据…

作者头像 李华
网站建设 2026/10/7 4:35:25

写手使用AI生成短篇小说该选什么写作软件?

当前市面上AI写作软件众多,但普遍存在模型单一、创作质量不稳定、长文逻辑断裂、AI痕迹浓重等问题。写手选择时,需关注软件能否解决这些痛点,提升写作效率与质量。aiset就是一款可作为参考的软件。多模型聚合,突破单一局限aiset是…

作者头像 李华
网站建设 2026/10/7 4:35:07

Codex 也推出了“自主学习“,FlowMind 有什么不一样?

两件事先说清楚 最近 OpenAI Codex 更新了类似"记忆/学习"的能力——通过 AGENTS.md 文件让 Agent 记住项目的上下文和偏好。这说明一个趋势:AI Agent 学习用户习惯,已经不是可选项,而是必须项。 但 Codex 的"学习"和 …

作者头像 李华
网站建设 2026/10/7 4:34:28

36.图RAG-使用Python代码实现图RAG

内容参考于:图灵AI大模型全栈实现一个图RAG输入文档,文档切分,切分后使用大模型提取知识图谱,生成后保存图数据到Neo4j数据库输入问题给大模型,大模型生成CQL语法,然后去查询Neo4j的数据,然后输…

作者头像 李华
网站建设 2026/10/9 7:03:30

Scraping APIs for Developers:2622个现成爬虫API,开发者的工具箱

文章目录Scraping APIs for Developers:2622个现成爬虫API,开发者的工具箱项目是什么覆盖哪些场景适合谁用怎么用这些API有什么局限我的看法Scraping APIs for Developers:2622个现成爬虫API,开发者的工具箱 做开发的都知道&…

作者头像 李华