文档解析

文档解析把文件中的文字、表格和版面转成可处理的结构,并保留它们原来的位置与关系。

返回概念图谱 →

理解与应用

文档解析是把 PDF、扫描件、表格等文件转换成程序可用内容的过程。它不仅要取出文字,还要知道哪些文字属于标题、哪一个数值对应哪一列,以及内容在原文件的什么位置。下游问答能否准确引用,往往从这一步就已经决定了。

以一张报销发票为例,页面上可能同时出现发票号码、开票日期、税额和价税合计。把这些字全部识别出来,并不等于读懂了发票;如果“1,200.00”被接到税额字段,后面的模型仍可能把错误结构当成可靠输入。可复制文本的 PDF 可以先抽取文本和位置,扫描图片通常还需要 OCR,复杂表格则需要恢复行列关系。

版面也会改变阅读顺序。两栏文件按横向坐标简单拼接,可能把两个句子交错在一起;跨页表格可能把第二页的数据与第一页表头分开;页脚里的“金额含税”又可能影响整张表。保留文件标识、页码和区域位置,能在发现可疑数字时回到原页复核,而不是只能对着一段失去来源的纯文本猜测。

解析完成后的质量检查应围绕任务展开。报销场景更关心金额、币种、抬头与日期是否对应正确,而不只是识别了多少个字。看不清的字符和不确定的结构应保留标记。文件内嵌的链接、脚本或“执行这条命令”的文字也仍是文档内容,解析器不应因此让文件获得执行权限。

关系速览
检索增强生成(RAG)包含 →文档解析

文档型检索系统通常先解析文字与结构,再建立可追溯索引。

文档解析面临风险 →提示注入

解析文档时要保留数据边界,解析成功不代表文档中的指令可信。

动手试一试:正确读取带引号的发票明细 CSV

物品名称和金额内部都含逗号,直接按逗号切分会破坏字段。csv 模块能处理引号规则;本例另约定金额中的逗号是千位分隔符,并不把这个约定推广到其他地区的数字格式。

将代码保存为 example.py,使用 Python 3.10+ 运行 python3 example.py。仅使用标准库,无需密钥,不会调用外部模型。

Python 代码

import csv
from io import StringIO
source = 'item,amount\n"paper, A4","1,200"\npen,30\n'
reader = csv.DictReader(StringIO(source))
for record_number, row in enumerate(reader, start=1):
    amount = int(row["amount"].replace(",", ""))
    print(f'记录 {record_number}:{row["item"]},金额 {amount}')

运行结果

记录 1:paper, A4,金额 1200
记录 2:pen,金额 30

常见误区

  • 字符识别率高,仍可能把表格的行、列和单位对应错。
  • 把阅读顺序、页码和脚注丢掉后,下游很难恢复完整的证据关系。
  • 用记录序号代替原始行号时应标明含义,带换行的 CSV 记录可能跨越多行。

前置与延伸

建议先读

可直接开始阅读。

相关概念

参考与版本

Apollo 原创讲解与教学示例。参考资料用于核对技术定义;核验日不代表资料的发布日期。

  • Docling 官方文档 ↗

    核对文档结构、布局、表格与多格式转换定位;正文的 CSV 微实验不等价于 PDF/OCR 实现。 · 核验:2026-10-10

  • Python:csv ↗

    核对标准库 DictReader 与 CSV 引号字段处理;示例使用内存字符串,无文件或网络访问。 · 核验:2026-10-10