1478 字
7 分钟
知识治理PDF解析困局

RAG 踩坑实录:手撕 PDF 解析的血泪史与我的“API 刺客”#

在构建 RAG(检索增强生成)系统的过程中,我原以为跑通了向量检索和大模型对话就大功告成了。但真正下场做业务才会发现:如果不解决非结构化文档(PDF)的解析,一切高大上的 RAG 都是“Garbage In, Garbage Out”。

为了测试 PDF 解析器的能力,我没有随便找几份文档,而是用 Gemini 协助我写了一份专门用于测试的latex的文本,然后编译出PDF。这份文档里以我的学习笔记为填充,塞满了单栏双栏混排、大表格、单行、多行公式、复杂的算法伪代码,以及每一页都有的页眉页脚。PDF链接在这里 https://github.com/JiqingJiang/RawRAG/blob/PDF-parse/data/raw/rag_boss_test.pdf 带着这份测试PDF,我开始了手撕 PDF 底层坐标的逆向工程之旅。

Round 1:双栏排版的“Z 字形”诅咒与幽灵碎块#

最初,我写了一版基于 Y 坐标(从上到下)的提取代码。结果在遇到双栏排版时瞬间惨败:代码极其愚蠢地读完左边半行,平移过去读右边半行,拼出了一堆毫无逻辑的火星文。

于是我用AI重写了逻辑,计算每个文本块的中心点(Center X)。如果中心点在页面左半区,就打上“左栏”标签,反之则是“右栏”。这个简单的拓扑降维,立刻让双栏文本恢复了顺畅的阅读流。

但这只是噩梦的开始。在肉眼观察解析日志时,我发现了几个极其诡异的现象:

  1. 跨栏污染:左栏读完准备跨越到右栏时,经常会把页面底部的脚注或页脚强行插在两栏衔接的地方。
  2. 边缘掉帧:从左边栏跨越到右边栏的上面时,很有可能漏掉最后一两行的内容。
  3. 断头台换页:在换页的时候,会有一定可能出现前后衔接不上的问题。

Round 2:公式与表格的碎尸案,以及我的“API 刺客”#

普通的文本还能勉强靠坐标拼接,但遇到公式和表格,我的解析器简直一片混乱。

为了解决这个问题,我构思了一套方案:启发式侦测区域 -> 截图 -> Base64 编码 -> 发给视觉大模型(这里我用的是 GLM-4V)进行解析 -> 返回 $$ 格式的 LaTeX 原位填充。

代码跑通了,但当我查看后台日志时,当场破防。 我的页面只有 3 个公式、2 个表格、1 个算法块。但 GLM-4V 竟然被调用了将近 48 次!这显然有点离谱,账不可细算,一算吓一跳。于是我打印解析的文本,Ctrl+F 查找 $$,发现一共 166 个 $$,也就是这里调用 GLM-4V 实际解析了 83 次。

GLM-4V 调用次数和 $$ 的数量差了 35 次,和真实的公式、表格个数差了 42 次。这要不是有 Coding Plan,每一次调用花费的可都是我的真金白银啊,本就不富裕的我可经不起这么造。

病因复盘:极其脆弱的区域检测。 仔细查看之后,发现检测 PDF 的公式和表格、算法的区域极其不合适:

  1. 论文的大标题、部分普通的文字内容莫名其妙也在被当作公式解析。
  2. 双栏大表格被拆得极碎,每一小块都在疯狂触发 API。
  3. 即便是一个简单的公式,截取的区域也不合适,导致大模型只解析正确了一部分。

Round 3:Prompt 约束与架构的妥协#

为了解决上面的问题,我又让AI帮我调整了区域判定的逻辑。GLM 的调用次数终于从 48 次降低到了 20 次。

但查看结果时,发现 $$ 符号居然全部消失了!这让我深刻意识到:给大模型的提示词必须严格约束才行。 稍微调整 Prompt 后,公式的识别效果确实好了很多。

但我也彻底认清了一个现实:如何精准地检测出公式的区域、图片的区域、表格的区域,是一个极其复杂的问题。大致思路虽然就是“检测区域 -> 调用视觉大模型/OCR -> 识别后转为 Markdown 填充”,但在工程实现上,穷举坐标和规则是一条深不见底的死胡同

妥协与进化:将专业的事交给专业的工具#

PDF 解析这块的坑实在太大,纯手工打磨的 ROI 太低,我决定先跳过手搓检测区域的执念。对于这种非结构化数据,最好的架构决策是将基建移交给工业界的“正规军”,接下来就是介绍我知道的方案:

  • OCR: 它的原理是文本检测(找框)加上文本识别(认字)。面对没有底层编码的扫描件或图片,OCR 是给计算机装上视网膜的基础设施。
  • MinerU 等版面分析利器: 这是开源界的神级工具,专门用来干这种脏活累活。它内部挂载了专门的视觉模型,能够精准切分标题、双栏正文、大表格,并且内置了公式识别。它能像外科手术刀一样,把二维的复杂 PDF 直接降维成极度干净的 Markdown 流。

利用 MinerU 清洗出优质数据后,再交给大语言模型去处理或许才是正道。

这篇关于知识治理,PDF解析还是极其关键,没有好的输入,RAG还玩个蛋,PDF解析这一块先跳过吧,等啥时候太闲了再研究吧。这篇文章仅以记录我的学习踩坑过程。

知识治理PDF解析困局
https://jiqingjiang.github.io/posts/tech/rag/第四篇知识治理困局/
作者
erode
发布于
2026-03-30
许可协议
CC BY-NC-SA 4.0