简介:在RAG系统建设中,PDF与复杂表格的解析质量往往决定知识库上限。本文从版面分析、表格识别、结构还原与输出契约四个层面,拆解如何将半结构化文档稳定转换为大模型可理解的Markdown或JSON,并给出可落地的工程化建议。
在检索增强生成(RAG)系统中,知识库的质量直接决定回答效果。但在真实业务场景中,输入文档很少是干净的纯文本,大量资料以PDF形式存在,且内部混杂标题、段落、表格、公式、图片、多栏排版等复杂元素。传统解析方式容易产生三类问题:
这些问题在处理大量数值数据时尤为突出。例如财务报表、实验记录、物流单据、医疗检验单等场景,表格中一个数字的错位就可能造成完全错误的结论。因此,RAG系统不能只依赖普通文本抽取,而需要引入半结构化解析能力,将文档还原为结构稳定、语义完整、便于大模型阅读的中间格式。
半结构化文档介于纯文本与数据库表之间,既有自然语言的段落,又有表格、键值对、列表等结构化成分。有效的解析策略通常包含以下环节。
版面分析是解析的第一步,目标是识别页面上的物理区块,包括:
这一步的关键不是简单切块,而是判断区块之间的逻辑关系。例如双栏论文中,左栏与右栏是平行关系,不能按水平线从上到下机械拼接;再如表格旁边紧贴的注释文字,需要与表格建立关联而不是被拆成独立段落。
工程上,版面分析通常结合视觉特征与位置信息,先做目标检测式分割,再对每个区块做类型判定。最终输出的是带类型标签和坐标的区块列表,为后续的结构还原提供基础。
表格是RAG解析中最容易出错的部分,其复杂程度远超普通段落。实际业务中常见以下类型:
| 类型 | 特征 | 解析难点 |
|---|---|---|
| 有线表 | 边框线完整 | 线框干扰、单元格合并 |
| 无线表 | 仅靠空白对齐 | 列边界难以判定 |
| 跨页表 | 同一表格分布在多页 | 表头重复、内容断裂 |
| 密集表格 | 单元格多、字号小 | 文字粘连、行列错位 |
| 嵌套表 | 单元格内还有表格 | 层级递归解析 |
对于有线表,可以通过检测横纵线确定单元格边界;对于无线表,则更多依赖文本坐标的投影分析来判断列位置。跨页表格需要在解析时识别“续表”标志或表头重复规律,将多页内容拼接为同一张逻辑表。合并单元格的处理则需要保留行跨度与列跨度信息,否则还原成Markdown时会丢失层级关系。
解析的最终目的不是“提取文字”,而是重建文档结构。常见做法是将结果输出为Markdown或JSON。
Markdown适合大模型直接读取,标题层级、列表、表格、公式都能以文本形式表达。例如:
## 2024年第二季度销售数据| 区域 | 销售额(万元) | 同比增长 ||------|----------------|----------|| 华东 | 2,340 | 12.5% || 华南 | 1,890 | 8.7% || 华北 | 1,560 | -3.2% |
这种结构在送入大模型时,模型能清晰理解行列对应关系,而不是面对一串无意义的数字流。
JSON则更适合需要精确定位的场景。一个表格单元格在JSON中可表达为:
{"type": "table","bbox": [120, 340, 820, 560],"rows": 4,"cols": 3,"cells": [{"text": "华东","row": 1,"col": 0,"row_span": 1,"col_span": 1,"bbox": [120, 380, 260, 410]}]}
这种方式保留了坐标与行列关系,便于后续做数据入库、原文溯源或可视化定位。
当业务流程中出现大规模数值数据时,解析系统需要具备额外的保障机制。
解析器应避免将数字错误识别为普通字符,也不能在转换过程中丢失小数位、千分位或正负号。对于财务数据,“1,234.50”与“1234.5”在语义上一致,但在格式敏感场景下可能需要原样保留。解析结果应同时提供“原始文本”和“归一化数值”两种表达,由下游任务按需选择。
跨行跨列单元格必须显式标记其跨度信息。例如一张合并了“合计”行的表,如果解析器将“合计”错误分配为某一行普通数据,后续统计就会出错。JSON中的row_span与col_span字段正是为此设计。
对于跨页表格,第二页如果只是续行而非新表,解析器需要识别并避免重复生成表头。对于复杂表头(多级表头),需要保留层级关系,而不是简单拍平为一行。
数值类文档常伴随公式,例如统计报表中的增长率计算公式。解析系统需要将公式识别为独立元素,并以LaTeX等标准格式输出,避免公式被拆散为普通字符流。
无论上游文档格式如何多样,解析结果应统一为同一种中间格式。实践中推荐以Markdown为主格式,JSON为可选补充。Markdown便于大模型理解,JSON便于数据工程师做精确定位与二次处理。
统一的契约意味着RAG管道后续的切分、嵌入、召回、溯源等模块可以基于固定格式开发,不必为每种文档单独适配。
在RAG系统中,答案的可信度往往需要回到原文验证。因此,解析结果中的每个元素最好携带位置信息。这样当大模型引用了某个表格中的一行数据时,系统可以定位到原始PDF的对应页和坐标区域,实现高亮展示或二次核验。
拿到结构化Markdown后,切分策略也应相应调整。不应再按固定字符数机械切割,而应依据标题层级、段落边界、表格完整性进行语义切分。一张完整的表格不应被切成两半分属不同的chunk,否则会造成检索时的信息缺失。
企业知识库往往同时包含PDF、Word、图片扫描件、HTML等多种格式。如果解析接口只支持单一格式,就需要在多套工具之间切换,增加维护成本。理想的方案是一个统一入口,自动识别格式并执行对应解析流程,输出一致的Markdown结果。扫描件类PDF需要OCR能力的配合,电子版PDF则可直接提取文本层,两者在流程上应做到对调用方透明。
复印件、传真件、手机拍摄图片常存在倾斜、模糊、噪点问题。应对措施包括图像预处理(去噪、纠偏、增强)和解析结果的置信度评估。对于低置信度区域,可标记为“待人工复核”。
部分文档使用了非常规的字体编码或自定义排版方式,导致文本层提取失败。此类情况需要回退到OCR路径,并尽量利用版面信息弥补字体信息的缺失。
当知识库包含数十万页文档时,解析性能与稳定性成为关键。建议采用异步任务队列,将解析任务解耦,配合重试机制与幂等设计,确保大批量导入不丢数据。同时,解析结果应持久化存储,避免重复解析浪费计算资源。
在RAG系统中,解析质量决定了知识库的信息完整性。半结构化文档的解析不能止步于“文字抽出来”,而应着重解决版面还原、表格识别、结构重建与格式标准化问题。对于大量数值数据的场景,还需保证精度、关联性和可溯源能力。通过建立统一的解析输出契约,并在切分与召回环节适配文档结构,RAG系统才能在企业真实文档环境中发挥稳定价值。