本文属于 RAG 工程框架中的「1 数据接入与文档切分」环节,聚焦「Document Parsing(文档解析)」方法。可先阅读 RAG-00.方法概述 再进入本篇。
原理
先解析版面与结构(标题、段落、表格、图片 OCR、页眉页脚),再输出标准化文本块供切分(Chunking)与索引(Indexing)。
关键技术/实现路径
- PDF 版面分析(Layout)与阅读顺序恢复。
- 表格抽取与单元格关系重建。
- OCR 与文本纠错。
- 元数据补齐(章节路径、页码、来源、版本)。
优缺点
- 优点:显著降低脏数据与错切分,提升后续召回(Retrieval)稳定性。
- 缺点:多格式适配成本高,解析失败会级联影响下游。
性能与资源
- 离线成本:中到高(尤其是 PDF + OCR)。
- 在线影响:低(主要在离线预处理)。
应用场景
- 制度文档、合同、财报、扫描件知识库。
统一合成数据示例
输入数据片段
1 | {"doc_id":"D20","type":"pdf","raw":"第1页: 报销制度... 表1: 机票上限 2000 元"} |
中间结果(解析输出)
1 | [ |
下游就绪输出(供切分/索引,非生成环节)
1 | { |
要点:解析的价值在于 reading_order + block 类型,避免把表格当普通段落乱切。
原始发表与工程实现
- 代表性原始发表:LayoutParser (Shen et al., 2021)。
- 核心解决问题:解决 PDF/扫描件结构化还原。
- 成熟实现工具:unstructured, layoutparser, pymupdf, docling。
详细原理拆解
- 版面解析核心是 layout -> reading_order -> text_blocks,确保表格和标题层级不丢失。
- 典型实现可拆为:输入预处理 -> 方法核心计算 -> 候选/证据构建 -> 生成与引用。
- 工程调优重点:质量(准确率/引用率)与成本(时延/token)的联合优化。
1 | flowchart LR |
工程落地扩展示例
伪代码
1 | def parse_then_chunk(pdf_bytes, layout_model, chunker): |
参数示例
1 | layout_engine: docling |
常见失败案例
- 失败模式 1:双栏 PDF 阅读顺序错乱,chunk 语义前后颠倒,向量检索全错。
- 失败模式 2:表格被当成连续正文切,单元格边界丢失,「上限」与「品类」错配。
- 失败模式 3:OCR 将
2000识别为2OOO,下游 关键词与数值检索双失败。
Demo 数据带入计算示例
1 | 块 B2 为表格行「机票 | 上限2000元」:若错误顺序先于标题 B1,则问句「机票上限」 |