文档解析:脏文档与多模态
RAG 的上游是把文档解析干净:表格要保住结构、代码要保住块、扫描件要 OCR、图表与版面要靠 VLM 或 ColPali 这类视觉检索。解析质量决定后面所有环节的上限 —— 多数「检索不准」的根因在这一步。
也叫:文档解析 · 脏文档 · OCR · 版面理解 · 多模态 RAG · ColPali
先学RAG 链路总览
上游:先把文档解析干净出自 T2-2
面试里很多人直接从「切块」开讲,跳过了解析——这恰恰是生产中最脏最花时间的一环。
| 文档类型 | 难点 | 常用手段 |
|---|---|---|
| 原生 PDF | 多栏排版、页眉页脚、跨页段落 | pdfplumber / PyMuPDF;先做版面分析再抽文字 |
| 扫描件 PDF / 图片 | 根本没有文字层 | OCR;或直接交给多模态模型识别 |
| Word / PPT | 样式噪音多 | python-docx / python-pptx,保留标题层级 |
| 表格 | 一行行抽出来语义全丢 | 转 Markdown 表格或整表加一句自然语言摘要 |
| 网页 | 导航栏、广告污染 | 正文抽取(trafilatura 等) |
| 代码 | 按行切会切断函数 | 按 AST 的函数/类边界切 |
两条实用经验:
- 保住标题层级。把「一级标题 > 二级标题」作为元数据挂在每个 chunk 上,检索时既能过滤又能在 prompt 里给模型交代上下文——这是投入产出比最高的一招。
- 表格单独处理。表格拍扁成文本几乎必丢语义。常见做法是整张表存为一个 chunk(Markdown 格式),额外用模型生成一句「本表描述 X 产品各型号的功率参数」作为检索用的摘要向量。
以上节选自T2-2 文档解析与 Chunking:从固定切分到语义切割,读全文能看到前后语境。