从文档中"提取数据",我们到底在做什么?

你的下载文件夹里堆着三十张供应商发票——PDF、邮件截图、扫描纸质件。你用OCR工具或免费的图片转文字工具处理了一遍。工具跑完了:三秒钟后,你得到了机器可读的文字。然后你看着输出结果,发现自己还是要一个一个手动把数字填进表格。工具没有失败——它做到了它承诺的事。那问题为什么还在?

财务文件与表格,展示原始文字提取与结构化数据之间的差距

"可读"与"可用"之间的鸿沟

一份文档可以是人类可读的(你看一眼就能理解),也可以是机器可读的(计算机能提取其中的字符),还可以是机器可用的(数据以结构化格式存储,程序可以直接查询、排序和分析)。这是三种截然不同的状态——而大多数工具只能把你带到第二种。

当OCR处理一张扫描发票时,文档从"机器不可读"变成了"机器可读"。这一步是真实的进展。但机器可读的文字和机器可用的数据之间,还隔着一道很大的鸿沟。机器可用的数据知道自己是什么:这个单元格是"发票合计",这个是"供应商名称",这个是"开票日期"。机器可读的文字只是字符——一串平铺的流,没有任何关于它代表什么的概念。

这两种状态之间的差距,正是手工劳动仍然存在的地方,也是大多数工具悄悄停下脚步的地方。

文档数据提取最难的部分不是读取文字,而是弄清楚哪段文字对应哪个字段——对从未见过的文档也能做到这一点,而且始终保持一致。

从文档到数据的五个步骤

"从文档中提取数据"实际上是一条五步流水线。大多数人只想到第一步——因为那是工具在宣传的那步。

1

读取文档

将图片或PDF转换为机器可识别的字符。这是OCR所做的事情。

2

识别字段

判断哪段文字是"合计",哪段是"发票编号",哪段是"开票日期"——无论版面布局或标签用词如何变化。

3

标准化格式

"2024年3月15日"、"15/03/24"和"2024-03-15"是同一个日期。"¥1,590.00"和"1590"是同一个金额。格式需要统一。

4

跨文件汇总

三十张发票需要合并成一张表中的三十行——而不是三十份独立的输出文件。字段映射必须在所有文档之间保持一致。

5

导出可用格式

生成带有正确列标题的干净Excel或CSV文件,无需二次整理即可直接分析。

第1步已经被充分解决。OCR正是为此而生,现代OCR可以可靠地完成它。第2步到第5步才是真正的工作所在——而这些步骤恰恰是大多数工具留给你自己处理的部分。

OCR停在哪里

OCR被设计用来解决第1步,它把这步做得很好。在清晰的印刷文字上,字符识别准确率通常超过99%。对于那个特定任务——将图片中的字符转换为文本字符串——这是一项成熟可靠的技术。

但输出的是一串文本流。把一张供应商发票送进OCR,你会得到类似这样的内容:

ACME Supplies Ltd
123 Commerce Street, Chicago IL 60601
INVOICE
Invoice No: INV-2024-0892    Date: March 15, 2024
Bill To: Greenfield Corp     Due: April 14, 2024
Description        Qty    Unit Price    Amount
Office chairs       4       $285.00    $1,140.00
Desk lamps         10        $45.00      $450.00
                                 Total: $1,590.00

文字都在。但你又回到了同样的问题面前:哪个数字是发票合计?哪个日期是开票日期,哪个是到期日?如果你要处理来自二十家供应商的三十张发票,每家把这些字段放在不同位置,使用不同标签,格式也各有差异。每种版面变化都是一个新的解析难题。

基于模板的OCR通过让你预先定义每种版面的像素坐标来解决这个问题:"发票编号总是在这个边框位置。"这确实管用——直到某家供应商更新了发票样式,或者你新增了一家供应商。每种新版面都需要一套新模板,维护成本随文档种类线性增长。

OCR的根本局限不在于准确率。在于OCR在字符层面运作,对一个字段在文档语境中的含义毫无感知。

图片转文字工具停在哪里

简单的图片转文字工具通常不过是界面更好的OCR。有些略进一步——以"图片转表格"或"照片转表格"为卖点的工具可以检测网格线,推断表格结构,保留源文档中可见表格的行列关系。对于有清晰边框列的银行流水,这看起来像是完整的解决方案。

局限在那个窄小场景之外很快就会暴露:

  • 依赖版面:如果你的文档采用表单布局(标签:值的配对形式)、双栏设计,或任何没有可见网格线的结构,就没有表格可供检测,工具会退回到纯文字输出。
  • 没有语义字段识别:即使保留了表格结构,工具也不知道哪一列是"金额",哪一列是"描述"。把你的目标列("提取供应商、发票编号、合计")与工具找到的列对应起来,仍然需要手工操作。
  • 无法跨文件汇总:每份文档产生一个独立的输出文件。把三十个碎片合并成一张完整的汇总表——并确保所有列的对齐关系保持一致——是你自己的问题。

实际效果是:在顺利的情况下,对单份结构清晰的文档,你能省去一些复制粘贴的工作。一旦有多份文档、版面各异,或数据以表单形式呈现,你又回到了手工完成第2步到第5步的状态。

大多数工具跳过的那步:知道哪段文字是哪个字段

语义字段识别——无论位置或标签如何,都能理解某个值在文档中扮演什么角色——是文档数据提取中最难的部分,也是大多数工具根本不去尝试的部分。

一张供应商发票可能把合计标注为"合计金额"、"应付金额"、"实付总额"或"结欠余额"。来自不同地区的供应商可能用略有差异的格式书写相同含义。对于理解发票的人类来说,这完全不是问题。但对于任何依赖位置映射或固定字符串匹配的工具而言,这是无法解决的难题。

AI视觉模型以不同的方式处理这个问题。在数百万份文档上训练过的模型理解发票词汇、银行流水结构和医疗记录惯例。当你要求它提取"发票合计"时,它不是在搜索字面字符串匹配——而是识别出在语义上就是发票合计的那个值,无论这家供应商使用了什么标签。"总金额"、"合计"、"应付款"和"价税合计"都会被解析到同一个字段。当一份文档包含五个不同日期时,"开票日期"返回的是文档创建日期,而不是付款到期日或交货日期——因为模型理解这些概念在语境中的语义区别。

这个语义层正是第2步和第3步真正需要的东西。没有它,字段识别就只能靠手工完成。

完整的工作流究竟是什么样的

当五个步骤全部由一个工具处理时,整个工作流程缩减为三个动作:上传文档、指定想要的列名、收到结构化的Excel文件。没有中间解析环节,没有手动列映射,没有拼合多份输出的操作。

使用简录AI的实际流程:

  1. 上传文件——PDF、JPG、PNG、截图或任意格式混合
  2. 输入你想要的列名:供应商名称、发票编号、开票日期、合计金额
  3. 下载一份Excel文件,每行是一份文档,每列正好是你要求的字段

工具负责字符识别、语义字段识别、格式标准化、跨文件汇总和导出。你指定的列名就是最终表格的标题——由于字段识别是基于语义而非位置,同一套列名可以跨所有供应商的版面使用,无需逐家配置。

OCR / 图片转文字:你仍需手工完成的部分

  • ✗ 判断哪个值属于哪个字段
  • ✗ 统一日期、货币和数字格式
  • ✗ 将N份独立输出合并为一张表
  • ✗ 处理不同供应商的版面差异
  • ✗ 导出带有统一列标题的干净文件

AI提取:五个步骤,全部自动化

  • ✓ 语义字段识别——无需预设模板
  • ✓ 格式标准化内置处理
  • ✓ 批量处理直接输出一张汇总表
  • ✓ 版面无关:一次性处理所有供应商
  • ✓ 输出即可分析,无需二次整理

在任何真实工作量下,效率差距都相当显著。人工录入平均每页约需3分钟;AI提取处理一页只需5-10秒——效率相差约18倍。对于三十张发票,这意味着从90分钟缩短到5分钟。更重要的是,输出结果高度一致:无论批次中有多少家供应商或多少种版面,每一行的字段名称、日期格式和数字格式都完全相同。

问题不在于OCR或图片转文字工具"能不能用"。它们能用。问题在于你真正需要完成的任务是什么——以及你正在用的工具是否把这个任务做完了。

常见问题

为什么OCR工具感觉解决了问题,但实际上没有?

因为它们确实解决了问题的一个真实部分——字符识别——而且以一种看得见、可衡量的方式完成了。你能看到文字输出。你看不到的,是等你真正使用这些文字时才会发现:字符识别只是五步流程中的第1步。第2步到第5步(字段识别、格式标准化、跨文件汇总、导出)并未被解决,而那里才是手工劳动的真正所在。OCR工具在它们的设计目标上成功了;它们从来就没打算完成全部工作。

能不能直接用ChatGPT或其他AI对话工具来处理?

对于单份文档,可以——上传图片,询问具体字段,有能力的AI对话工具会可靠地提取出来。局限在于规模:对话界面每次对话只处理一份文档,输出的是自由格式文本而非结构化的表格行,也无法直接导出Excel。把三十次对话的结果合并成一张一致的表格,需要额外工作。专用提取工具使用相同的底层AI能力,但封装了批量处理工作流,支持结构化输出和直接文件导出。处理一份文档时,AI对话工具完全够用;处理三十份时,就不够了。关于扫描件、照片与PDF的提取方式对比,可以参考这篇详细分析

扫描件(图片型PDF)也支持吗,不只是数字PDF?

支持。AI视觉提取把所有输入都当作图片处理,不依赖PDF内嵌文字层。扫描的纸质表单和数字生成的PDF处理方式完全相同。实际使用中,数字生成的PDF通常比手机拍照的图片更清晰,这会提升小字体的识别准确率——但两者都可以处理。

如果我要求的字段在文档中不存在,会发生什么?

该单元格会留空,而不是用附近的值来填充。这是刻意的设计:在财务核对或任何下游分析中,空白能正确地表示"该字段不存在"。错误的值——为了避免空格而填入了相邻字段的内容——会悄无声息地污染你的数据。如果某个你明确知道存在的字段总是出现空白,可能是列名表述太模糊;更具体的描述通常能解决这个问题。

准确率到底怎么样?

对于清晰PDF和截图中的印刷文字,字符识别准确率可达99%——与传统OCR在同等输入质量下的表现相当。有意义的额外提升在于字段定位准确率:在版面各异的文档中正确判断哪个值属于哪一列,而传统OCR在这里需要为每种版面单独制作模板。对于手写文档和纸质照片,准确率较低,取决于字迹清晰程度。无论使用哪种提取方式,在下游使用数据之前对提取结果进行抽查都是好习惯。

从OCR到AI提取的转变,是从解决第1步到解决全部五步的转变。如果你现在的工作流程是先跑一遍工具、再手动整理输出——那个中间环节的工作,正是AI提取所消除的。

上传一份文档,输入你的列名,查看结构化输出——无需设置,无需模板。

免费体验