一、为什么要转成Markdown:LLM时代的文档鸿沟
在检索增强生成(RAG)系统中,大模型的回答质量高度依赖语料质量。同一个问题,用结构清晰、噪声干净的文档作为上下文,与用水印乱码、断行破碎、表格散架的文档作上下文,得到的答案质量天差地别。“垃圾进、垃圾出”这句话在文档解析场景中体现得尤为明显。
PDF格式本质是为排版与印刷而生,它表达的是“视觉呈现”而非“语义结构”。对大模型而言,PDF存在三个原生缺陷:
- 换行断裂:PDF文本层的换行遵循排版而非语义,一句完整的话可能被切成三行;多栏版式下按流式提取更会产生左右交错、前后颠倒的“乱序文本”;
- 表格散架:表格的边框、合并单元格、表头重复关系在平面化后全部丢失,寄存器位域表、指令编码表会退化成一串难以解读的符号序列;
- 文字层叠:水印、批注与正文在坐标层面交错,解析输出中混杂大量无效字符。
网页则相反:虽然DOM树天然带有结构,但导航栏、广告、脚本代码与无关链接大量混入,正文内容占比往往不足一半。
Markdown恰好位于两者的“中间甜点区”:它用轻量符号表达标题层级、列表、表格、图片引用等语义结构,人类可直接阅读,大模型也能直接理解,且对向量化和分块非常友好。因此,“把PDF与网页解析成Markdown”成为构建大模型知识库的关键前置工程。
二、典型场景与核心诉求
以嵌入式与固件开发为例:工程师日常要面对动辄上千页的技术参考手册、器件手册与编程指南,其中包含大量寄存器表格、位域定义与系统框图。PDF可读性虽好,但跨文档检索慢、链接引用不便,而格式本身对大模型不友好,又进一步拉低了RAG的质量。
理想的转换结果需要满足两个核心诉求:
- 表格的人类可读性:输出的Markdown既要喂给大模型,也要供工程师直接阅读与多文档检索使用,表格语义必须完整、行列关系必须准确;
- 图片的本地阅读体验:框图、架构图、时序图以相对路径引用并存放于同级目录,在本地知识库工具中即可实现“点击放大”的无缝预览,无需在PDF阅读器与笔记工具之间来回切换。
三、痛点盘点:转换中的四大硬伤
用行业常见的通用转换工具实测这类场景,普遍存在以下问题:
- 水印混入正文:不少保密文档带有倾斜水印,其文字与正文在坐标上重叠,输出中会夹杂乱码碎片,噪声量甚至达到正文量级;
- 页眉页脚干扰:文档标题、页码、保密声明在每页重复出现,这些无效文字在分块(chunking)时被切成独立小块,污染检索召回集;
- 无边框表格识别不稳定:变更历史表、寄存器位域表、指令编码表大多没有边框线,通用工具时灵时不灵,完全看运气,缺少稳定兜底;
- 图片完全不提取:一份文档可能包含几百张框图与架构图,而输出结果一张都没有——部分工具底层依赖的PDF解析库对图片对象的提取能力本就有限,矢量绘制的框图更是无从获取。
这些问题说明:通用工具可以覆盖普通文档,但在表格密度高、图片密集的垂直场景中,必须构建针对性的解析流水线。
四、方案设计:四阶段解析流水线
整体流程为:原始文档 → 版面对象解析 → 噪声预处理 → 结构元素提取 → Markdown组装。每个阶段各司其职,分别解决一类硬伤。
4.1 第一步:水印去除
水印的本质特征是“重复出现且与正文重叠”。据此可以设计基于跨页统计的检测策略:
- 提取每页全部文字对象及其坐标、字体、颜色、旋转角度信息;
- 对所有页面做“位置+内容”聚类:若相同(或高度相似)的文字在超过阈值比例(如60%)的页面上、以相近位置出现,则标记为候选水印;
- 辅以字体特征校验:水印通常颜色更浅或透明度更高、带有固定旋转角、覆盖范围大;
- 确认后从解析结果中剔除。对图片型水印,可依据其与正文的面积重叠比例决定修复或保留。
示意伪代码如下:
texts = extract_text_objects(pdf)groups = cluster_by_position_and_content(texts, eps=8)for g in groups: if g.page_ratio > 0.6 and (g.is_light_color or g.is_rotated): mark_as_watermark(g)remove(all_watermarks)
一个容易踩坑的细节:要区分水印与“合法的重复元素”,例如长文档中每章的章标题。后者虽跨页重复,但并不与正文发生字符级重叠,且位置不固定。因此应采用“坐标重叠检测+字体特征”双条件触发,避免误删有效内容。
4.2 第二步:页眉页脚过滤
页眉页脚同样具备“重复性”,但位置特征不同——集中在页面的顶部与底部固定条带。识别策略:
- 位置约束:取页面上下边缘条带(如页高前8%与后8%)作为候选区域;
- 跨页聚类:候选区域内跨页重复频率超过阈值的文字判定为页眉页脚;
- 页码模式匹配:页码满足“跨页递增的数字模式”,可用正则单独清除。
风险控制同样重要:跨页大表格的表头行也会在每页顶部重复出现。此时需要检查候选区域内的文字是否属于表格对象的延续,若是则不删除,并转入“表格跨页合并”流程处理。
4.3 第三步:混合表格检测
表格检测建议采用“规则+模型”的混合路径:
- 有边框路径:对带明确框线的表格,通过矢量线段与矩形对象定位,再按线段交点切分行列,置信度最高,优先执行;
- 无边框路径:依赖版面对齐特征——文本起始/结束横坐标呈列聚类、行间距均匀、行间空隙明显小于段落间距、表头常为粗体。可以采用规则打分,也可以训练一个版面检测模型先识别“表格区域”,再恢复单元格结构;
- 混合策略:先跑规则路径,将“规则未命中但存在对齐特征”的区域交给模型兜底,在保证查全率的同时控制误检。
输出为Markdown时,还需处理两个工程问题:
- 合并单元格:标准Markdown表格不支持合并单元格。可行做法包括:将被合并内容置入行首单元格并加注说明、嵌入HTML表格转义,或拆成多行并标注归属关系。选择依据是用途——喂给大模型优先语义完整,人工阅读优先视觉保真;
- 跨页表格:识别“表头跨页重复”特征,将相邻页中表头一致的表格合并去重,避免一张逻辑大表被拆成十几段碎片。
4.4 第四步:图片提取与本地化引用
PDF中的图片信息以三种形态存在,需分别处理:
- 嵌入图片对象:直接抽取原始图像流,按声明的编码格式还原;
- 行内小图:结合位置与尺寸信息还原;
- 矢量图形:框图、拓扑图、时序图多以路径绘制而非位图存储,需要先做区域包围检测,再渲染为位图输出。
输出的目录约定非常关键:将图片统一存放在同级assets目录中,正文以相对路径引用:

这样在本地知识库工具中渲染时即可直接预览、点击放大。图片命名建议采用“章节号+序号”的规则,便于人工定位与交叉引用。
4.5 网页转换的补充处理
网页转换思路一致,处理对象换成DOM树:
- 先做噪声清洗,移除脚本、样式、导航、页脚、广告节点;
- 标题层级按H1–H6直接映射为Markdown标题,避免层级跳跃;
- 表格映射为管道符语法,图片下载到本地后改为相对路径引用,绝对链接改写为站内相对链接,保证离线阅读体验的完整性。
rag-">五、输出规范:为RAG而设计
转换后的Markdown不应止步于“能转出来”,还要为下游分块与检索做设计:
- 标题层级复原:通过字号聚类恢复原文的层级关系,避免所有标题被压成同级,为按层级分块提供依据;
- 前置元数据:在文档头部记录来源文件名、页数、转换日期,实现来源可追溯;
- 段落合并:结合行间距与首行缩进特征合并断行,恢复自然段落;
- 来源锚点:为每个分块附带“文件名+标题路径+页码”锚点。大模型回答时可引用原始PDF页码,显著提升可验证性。
实践表明,最优的分块方式是“按标题层级分块”:例如把寄存器描述的某一章切成一个块,并把其标题路径(如“系统控制 > 寄存器列表 > 控制寄存器CR0”)作为块的前缀参与向量化,使嵌入同时携带语义与结构信息,检索精度明显提升。
六、质量评估:让转换结果可度量
为避免“看起来能转、用起来一塌糊涂”,建议建立三维度评估:
- 文字完整性:解析后有效字符数与原文的比对,监控文字丢失与乱码率;
- 表格结构准确率:抽样核对行列对应关系与合并单元格处理,重点覆盖无边框表格;
- 图片覆盖率:统计提取图片数量与文档实际图片数量的比值,以及矢量图栅格化的覆盖情况。
可以挑选真实业务中的典型文档构建“黄金样本集”,每次调整解析流水线都跑一次回归,防止修复一个场景、破坏另一个场景。
高质量Markdown的价值最终在应用层兑现:
- 检索质量提升:干净语料使分块包含完整语义单元,向量表示更准确,召回精度随之上升;
- 辅助编程场景:在固件开发中,先通过关键词与语义检索定位相关寄存器描述、时序约束,再作为上下文喂给大模型编程助手,生成代码对手册的符合度显著优于只给摘要提示词;
- 企业级架构:转换后的语料可以用对象存储作为文档仓库,向量数据库负责语义检索,大模型平台负责生成编排。在云平台上(如百度智能云),上述能力均有成熟通用组件可选,可快速组装出完整的检索增强生成链路。
八、局限与展望
当前流水线仍有明确的能力边界:
- 扫描件:无文字层时需先做OCR,识别误差会逐级累积;
- 公式与结构图:复杂数学公式、化学结构图的识别需要专门模型或人工校对;
- 复杂版式的阅读顺序:跨栏图文混排、侧栏、脚注容易打断正文阅读顺序,需要更深的语义理解;
- 版面理解不等于语义理解:“检出表格”不等于“理解表格”,寄存器位域、访问属性等深层语义仍需后处理规则或模型参与。
未来的演进方向是从“规则驱动”走向“版面模型+大模型兜底”,用大模型处理长尾边界情况;同时引入增量更新与批量定时处理,适应技术文档频繁修订的现实。
九、结语
将PDF与网页解析成Markdown,本质是一项“去噪—结构恢复—资源本地化—RAG友好化”的系统工程。围绕水印、页眉页脚、表格、图片四大硬伤分阶段构建解析流水线,才能让语料同时服务人类阅读与大模型理解。对任何要搭建技术知识库的团队来说,花在基础环节上的投入,都会在后续的检索准确率与代码生成质量上获得指数级的回报。