Skip to content
Figo Blogs
Go back

RAG 处理 Word 与扫描版 PDF 最终优化方案

Contents

Table of contents

Open Table of contents

核心痛点

  • Word:标题层级、表格、列表结构极易被打散,导致上下文丢失。
  • 扫描版 PDF:OCR 误差 + 版面还原失败(多栏、跨页表格、图文混排)是最大杀手。纯文本提取基本不可用。
  • 混合型 PDF:部分页面有文字层,部分页面是扫描图,必须逐页判断,不能整份文件走同一流程。
  • 共同瓶颈:解析质量、结构保留、分块策略和引用溯源,往往比单纯更换 embedding 或向量库更影响最终效果。

1. 总体原则与推荐 Pipeline

核心原则

保结构、保页码、保层级、保证据、可追溯。

RAG 处理 Word 与扫描 PDF 的核心不是“抽文字 → 切块 → 塞向量库”,而是要把文档还原成可检索、可引用、可审计的结构化知识单元。

推荐 Pipeline

文档接入
→ 分类识别(Word / 文字 PDF / 扫描 PDF / 混合页)
→ 解析 / OCR + 版面分析
→ 结构化重建(Markdown / JSON)
→ 清洗与元数据增强
→ 结构感知分块(Hierarchical Chunking)
→ 混合索引(向量 + BM25 + 元数据)
→ 检索重排(Rerank)
→ 带引用生成
→ 质量评测闭环

统一目标输出

优先输出以下两类中间格式:

  • 高质量 Markdown:保留 # 标题层级、列表、Markdown 表格、图片说明。
  • 结构化 JSON:包含元素类型、章节层级、页码、坐标、OCR 置信度、元素顺序等字段。

建议统一将 Word、PDF、扫描件都归一到 Markdown / JSON,再进入后续分块、索引和检索流程。


2. 解析方案:最优先投入

2.1 输入分类处理

输入类型推荐处理方式
Word .docx原生结构化解析,不走 OCR
老版 Word .doc先转 .docx 或 PDF,再解析
文字 PDF先抽取文字层,同时保留页码和版面信息
扫描 PDF页面预处理 + Layout Analysis + 分区域 OCR
混合型 PDF逐页判断是否有文字层,分别处理

2.2 Word 文档处理

推荐工具

  • Docling:同时支持 DOCX / PDF,结构化输出能力较强,自托管友好。
  • Unstructured:适合将 DOCX 拆成 Title、NarrativeText、ListItem、Table 等元素。
  • python-docx:适合轻量场景,可手动保留 Heading、段落、表格结构。
  • LlamaParse:适合快速云端验证和复杂文档解析。

关键措施

  • 保留标题层级:一级标题、二级标题、三级标题应进入章节路径。
  • 保留段落语义:不要把段落全部拼成一坨纯文本。
  • 保留列表结构:编号、项目符号、嵌套层级不能丢。
  • 保留表格语义:表格转 Markdown 或 HTML,不要拍平成普通文本。
  • 处理图片 / 图表:可提取图片后用 VLM 生成 caption,或单独 OCR。
  • 清理噪音:页眉页脚、批注、修订标记、重复水印需要按业务规则保留或过滤。

2.3 扫描版 PDF 处理

扫描 PDF 本质是图片,关键在于 页面质量检测、版面分析、OCR、阅读顺序重建和表格结构还原。

推荐处理顺序

按页拆分
→ 页面质量检测
→ 图像预处理
→ 版面区域检测
→ 分区域 OCR
→ 表格结构识别
→ 阅读顺序重建
→ Markdown / JSON 输出
→ 置信度标注

版面分析优先于纯 OCR

扫描 PDF 不应直接整页 OCR 后拼接文本。应先做区域检测:

  • 标题
  • 正文
  • 表格
  • 图片
  • 页眉页脚
  • 脚注
  • 多栏区域
  • 页码区域

然后按区域 OCR,并重建正确阅读顺序。

推荐工具

工具适用场景
PaddleOCR PP-Structure / PaddleOCR-VL中文扫描件、自托管、版面与表格识别
Docling统一处理 PDF / DOCX,结构化输出,自托管友好
LlamaParse快速云端验证,复杂文档、表格、图片处理
MinerU中文复杂文档、论文、报告类场景
Marker快速转 Markdown,适合轻量 pipeline
Azure Document Intelligence / AWS Textract / Google Document AI企业云 OCR、表单、票据、英文或多语言场景
工具选型原则

不要只看工具宣传指标。OCR 和版面还原效果强依赖文档类型、扫描质量、语言、表格复杂度、是否跨页、是否有合并单元格。建议先拿真实样本做小规模评测,再决定主链路。

图像预处理

问题处理措施
页面倾斜deskew 倾斜校正
模糊提高清晰度或超分处理
阴影 / 噪点去噪、二值化
黑边 / 页边线裁边
横竖混排页面方向检测
多栏排版Layout 分区后再 OCR
分辨率过低<150dpi 建议超分或标记低置信度

OCR 后处理边界

OCR 后处理可使用规则、词典或 LLM 进行纠错,但必须加边界:

  • 涉及数字、金额、日期、条款编号时,不允许 LLM 自由改写。
  • 必须保留 OCR 原文、纠错后文本和置信度。
  • 低置信度内容应进入人工抽检或降权检索。
  • 对合同、财报、制度、医疗、法律类文档,纠错策略应更保守。

2.4 表格专项处理:重中之重

表格是文档 RAG 的高风险区域。

禁止做法

  • 禁止直接将表格 OCR 成一段线性文本。
  • 禁止把表格行列关系拍平。
  • 禁止将跨页表格简单拼接而不保留上下文。
  • 禁止把复杂表格随意切成多个无标题 chunk。

推荐做法

  • 表格输出为 Markdown 表格或 HTML 表格。
  • 保留表头、行列关系、合并单元格信息。
  • 表格作为独立元素入库。
  • 复杂表格可单独建立 Table RAG 或结构化数据库。
  • 对跨页表格,记录跨页关系和原始页码。
  • 对财报、合同、制度类表格,优先保留原始截图坐标,便于回溯。

2.5 元数据设计

每个 chunk 至少携带以下元数据:

字段说明
doc_id文档唯一 ID
file_name文件名
page_no页码
section_path章节路径,如 第2章/2.1/2.1.3
title当前 chunk 所属标题
element_typetitle / paragraph / table / image / list / footnote
chunk_idchunk 唯一 ID
parent_chunk_id父 chunk ID
version文档版本
updated_at更新时间
permission_tag权限标签
ocr_confidenceOCR 置信度,Word 可为空
bbox坐标信息,适用于 PDF / 扫描件
可追溯要求

生成答案时,必须能回到:文件名、页码、章节、chunk_id,必要时还能回到页面坐标或原文截图。


3. 分块策略:决定 RAG 上限

推荐策略:Hierarchical + 结构感知分块

强烈不建议只用固定长度切分。推荐采用父子分块:

  1. 先按标题层级切 Parent chunk,保留完整章节上下文。
  2. 再对子内容做语义分块或适度固定长度切分,形成 Child chunk。
  3. 检索时用 Child chunk 精准召回。
  4. 生成时带出 Parent chunk 或章节上下文,避免上下文不足。

不同文档类型的分块方式

文档类型推荐分块方式
Word 制度 / 方案按标题层级 + 段落组合
Word 表格多表格整体独立 chunk
扫描 PDF按页 + Layout 区块 + 章节路径
合同 / 规范条款级 chunk
报告 / 论文章节 + 小节 + 图表说明
FAQ / 知识库问答对级 chunk
财报 / 表格文档表格独立入库 + 章节上下文

参数建议

参数建议值
chunk_size500–1000 中文字
overlap80–150 中文字
初召回 top_k20–50
rerank 后保留3–8
调参原则

以上是中文文档经验起点,不是固定标准。最终应结合问答集、Recall@K、引用准确率、幻觉率、表格类问题命中率进行调参。

原子性原则

以下内容尽量保持完整,不要硬切:

  • 表格
  • 条款
  • 清单
  • FAQ 问答对
  • 图片说明
  • 公式说明
  • 财务指标解释
  • 合同定义条款

4. 索引与检索

4.1 不建议只用向量检索

文档 RAG 应采用混合检索:

向量检索 + BM25 / 关键词检索 + 元数据过滤 + Reranker

各检索方式作用

检索方式主要作用
向量检索语义相似、自然语言问法
BM25 / 关键词专有名词、编号、条款号、表格字段、精确匹配
元数据过滤按文件、版本、时间、权限、章节过滤
Reranker提升最终命中质量,降低噪音 chunk

推荐组件

组件可选方案
EmbeddingBGE-M3、Qwen Embedding、bge-large-zh
RerankerBGE-reranker、Cohere Rerank、Jina Reranker
向量库Milvus、Qdrant、Weaviate、pgvector、Elasticsearch Vector
关键词检索Elasticsearch、OpenSearch、Lucene、BM25

检索策略建议

  • 先通过元数据过滤权限、版本、文档范围。
  • 向量检索和 BM25 并行召回。
  • 合并候选 chunk 后去重。
  • 使用 reranker 重排。
  • 返回 top 3–8 个高质量上下文。
  • 对低 OCR 置信度 chunk 降权或标记提醒。
  • 对表格类问题优先召回表格 chunk。

5. 答案生成策略

生成阶段必须控制幻觉和引用质量。

强制约束

  • 只能基于检索内容回答。
  • 每个关键结论必须附带来源。
  • 信息不足时明确回复:“文档中未找到明确说明”或“不足以判断”。
  • 涉及数字、金额、日期、条款时逐条引用。
  • 不允许凭常识补全。
  • 对 OCR 低置信度内容,应提示“不确定”或要求人工确认。

推荐 Prompt 骨架

你是文档问答助手。只能依据提供的上下文回答。
每个关键结论必须附带来源:文件名 + 页码 / 章节。
如果上下文没有明确依据,回答“文档中未找到明确说明”。
涉及数字、日期、金额、条款编号时必须逐条引用来源。
不得凭常识或外部知识补全答案。

引用格式建议

结论:xxx。
来源:文件《xxx.docx》,第 3 页,章节「2.1 项目范围」,chunk_id=abc123。

或:

- xxx:依据《合同扫描件.pdf》第 12 页「付款条款」。
- xxx:依据《制度说明.docx》章节「3.2 审批流程」。

6. 质量评测与常见坑点

6.1 关键评测指标

解析质量:最高优先级

指标说明
OCR 准确率文字识别是否正确
表格还原率行列、表头、合并单元格是否正确
标题层级准确率章节结构是否正确
页码映射准确率答案能否回到正确页码
阅读顺序准确率多栏、图文混排是否按正确顺序输出
图片 / 图注保留率图片说明是否被保留或生成 caption
OCR 置信度覆盖率是否能识别低质量页面

检索质量

指标说明
Recall@K正确答案所在 chunk 是否被召回
MRR正确 chunk 排名是否靠前
表格类问题命中率表格问题是否能命中正确表格
长文档跨章节召回率跨章节问题是否能召回完整上下文
权限过滤准确率是否只召回用户有权访问的内容

生成质量

指标说明
答案正确率回答是否准确
引用准确率引用是否能支撑结论
幻觉率是否编造文档不存在的内容
无法回答识别率信息不足时是否拒答
数字 / 日期一致性数值、日期、金额是否与原文一致

6.2 常见坑点与应对

问题后果应对措施
OCR 错误直接入库污染向量库,后续难排查设置置信度阈值,低置信度人工抽检
表格纯文本化数字对不上行列,答非所问表格单独结构化处理,禁止拍平
扫描件当文字 PDF 处理提取为空或乱码提取前先判断是否可提取文字层
混合型 PDF 整份统一处理部分页丢失或重复解析必须逐页判断文字层和扫描页
固定长度机械切块关键信息被截断结构感知 + Hierarchical 分块
页眉页脚混入正文重复噪音影响检索版面分析阶段过滤
缺少 traceable答案不可信、无法审计强制带文件名 + 页码 + 章节 + chunk_id
LLM 过度纠错 OCR引入新幻觉数字、金额、日期、条款不得自由改写
只用向量检索编号、专有名词、表格字段命中差使用 BM25 + 向量 + rerank
无评测集上线效果不可控建立样本问答集和回归测试

7. 工程落地建议

7.1 最小可用版本:快速验证

Word 为主

Docling / Unstructured / python-docx
→ Markdown / JSON
→ Hierarchical Chunking
→ BGE-M3 / Qwen Embedding
→ 向量检索 + BM25
→ Reranker
→ 带引用生成

扫描 PDF 为主

PaddleOCR PP-Structure / Docling / MinerU
→ Layout + OCR
→ Markdown / JSON
→ OCR 置信度标注
→ Hierarchical Chunking
→ 混合检索 + Reranker
→ 带引用生成

快速云端验证

LlamaParse / Azure Document Intelligence / Google Document AI / AWS Textract
→ Markdown / JSON
→ LlamaIndex / LangChain
→ 混合检索
→ 带引用生成

企业私有化部署

PaddleOCR / Docling / MinerU 自托管
→ Milvus / Qdrant / Elasticsearch
→ BGE-M3 / Qwen Embedding
→ BGE-reranker
→ 权限过滤 + 引用溯源

7.2 推荐增强版本

  • 文档解析服务化。
  • OCR 置信度标注。
  • 低置信度页面人工校验入口。
  • 表格单独入库。
  • 图片使用 VLM 生成 caption 后文本化。
  • 高价值图片 / 图表直接走多模态 RAG。
  • 父子 chunk 检索。
  • 答案引用可点击回原文。
  • 定期使用 RAGAS 或自建指标做回归测试。
  • 建立解析失败、OCR 低置信度、表格异常的异常队列。

7.3 生产级必须考虑

能力说明
权限隔离检索前过滤,避免越权召回
版本管理同一文档不同版本必须可区分
增量更新文档变更后只更新受影响 chunk
重复文档去重避免重复召回和重复引用
失败文档重试解析失败、OCR 失败需可恢复
解析结果缓存降低重复解析成本
敏感信息脱敏对个人信息、合同金额、内部数据做脱敏策略
人工校验入口低置信度、高价值文档必须可人工复核
可观测性记录解析耗时、失败率、召回命中率、引用准确率
审计日志记录用户问题、召回内容、生成答案和引用来源

8. 选型建议

场景推荐方案
中文扫描件多PaddleOCR PP-Structure / PaddleOCR-VL + 自托管
Word + PDF 混合多Docling / Unstructured + Markdown / JSON
复杂表格多Docling / LlamaParse / 表格专项模型 + Table RAG
快速 PoCLlamaParse / RAGFlow / AnythingLLM
企业私有化PaddleOCR / Docling / MinerU + Milvus / Qdrant / Elasticsearch
高价值图文文档OCR + Layout + VLM caption / 多模态 RAG
合同 / 制度 / 财报强制页码、章节、表格、chunk_id 可追溯

9. 趋势提示

复杂、高价值、图文混排文档正在逐步从传统 OCR + Layout + 规则拼接 转向 VLM 端到端文档理解。

但在生产系统中,VLM 方案仍需要注意:

  • 成本较高。
  • 时延较高。
  • 输出稳定性需要评测。
  • 对数字、金额、日期仍需严格校验。
  • 关键结论必须可追溯到原文页面或区域。

因此,短期更稳的方案通常是:

传统 OCR / Layout 负责结构化提取
+ VLM 负责图片、图表、复杂页面理解
+ 规则 / 评测 / 引用机制保证可信度

一句话总结

Word 走结构化解析,保留标题层级、段落、列表和表格语义;扫描 PDF 先做页面质量检测和版面分析,再分区域 OCR,表格单独结构化处理;两者统一输出带丰富元数据的 Markdown / JSON,再做 Hierarchical 分块、混合检索、rerank 和强制 traceable 生成。解析质量、结构保留、分块策略、表格处理、引用溯源和评测闭环,是决定最终效果的核心。


归档说明

本文档融合 A/B/C 三个回答的优点,并对表述进行了工程化、稳健化修订。适合作为 Obsidian 知识库中的 RAG 文档处理参考模板长期归档。


Share this post:

Previous Post
LLM 中的 Token Space 与 Latent Space
Next Post
大模型推理与缓存机制全景图解:从 Prompt Caching 到“自回归的诅咒”