PDF 与 OCR 边界

本节目标

理解 PDF 为什么不等于“带页码的 Word”,能按页选择原生文本抽取、OCR、版面/视觉模型或人工复核,并为每条路径保存足够的版本、位置和质量证据。

PDF 首先描述页面显示

PDF 可以把字符、字体、绘制指令和坐标分散存储。人眼看到的段落不一定对应一个内部文本对象;空格可能只是字形间距,表格可能只是若干线条和坐标文本。pypdf 官方文档明确讨论了阅读顺序、空格、表格、图片文字和内存等困难,也明确说明 pypdf 不是 OCR 软件。

因此“extract_text() 返回非空”只能证明解析器找到了某些文本对象,不能证明:

  • 文本完整且顺序正确;
  • 隐藏文本层与页面图像一致;
  • 表格行列、公式和脚注已恢复;
  • 页面没有重复、乱码或错位。

先给页面分类

页面类型现象首选路径主要风险
数字生成有字体和文本对象原生抽取 + 版面验证乱序、连字符、字体映射
扫描图像页面主要是位图,几乎无文本渲染 + OCR识字、旋转、分栏、噪声
混合页面图像、文本对象并存分区域或按层处理重复文本、图注遗漏
隐藏 OCR 层图像上覆盖不可见文字对齐抽查后复用或重做旧 OCR 层错误/错位
表单/签名/公式密集文本与视觉关系关键专用解析或 VLM + 人工门禁字段配对、符号、签名语义

分类最好按页或区域进行,而不是整份文件一刀切。封面可能是扫描图,正文却是数字文本。

决策顺序

  1. 原生抽取:成本低,保留已有字符信息;先检查文本量、字符质量、顺序和页面覆盖。
  2. OCR:无可靠文本层且页面有图像文字时使用;记录语言、分辨率、引擎与词/行位置。
  3. 版面/表格/公式模型:OCR 只识别字符与位置,不自动恢复语义结构。
  4. VLM:适合图表或复杂视觉理解,但输出可能遗漏、重述或生成;必须保留图像区域和结构化约束。
  5. 人工复核:关键金额、剂量、合同条款、公式、低置信字段或质量门禁失败时不可省略。

对数字 PDF 全量 OCR 通常浪费资源,还可能把正确的原生字符变成识别错误。OCRmyPDF 的目标之一是为扫描 PDF 添加可搜索文本层;当前 17.8 文档把已有文本层策略统一为 --mode default|force|skip|redo,旧 --force-ocr、--skip-text、--redo-ocr 仍是兼容别名。适配器要记录实际 mode、软件版本和输入页分类,不能只写“已 OCR”;触发条件必须明确。

OCR 适配器契约

OCR 产物至少记录:

  • 原 PDF 哈希、页码、渲染区域和页面图像哈希;
  • 渲染 DPI、旋转/去倾斜/二值化等预处理;
  • 引擎、版本、语言包与配置;
  • 词、行或块文本及 bounding boxes;
  • 引擎给出的置信信号(若有);
  • 处理耗时、警告、失败与人工复核状态。

Tesseract 的语言数据和页面分割配置会影响结果。置信分数是引擎内部信号,不是“该字段为事实的概率”,也不能跨引擎直接比较。

OCR 缓存键应包含源页面版本与 OCR 配置;否则换了语言包或 DPI 仍可能错误复用旧结果。Chunking 参数变化不应触发重新 OCR。

公式、表格和图像不是普通 OCR

  • 0/O、1/l/I、小数点、负号和上下标是高风险混淆;
  • 数学公式需要二维结构,线性纯文本经常丢分式、根号和上下标;
  • OCR 给出单词和坐标,不等于恢复表格表头、合并单元格和跨页关系;
  • 图表数值提取需要坐标轴、图例和视觉元素理解;
  • 手写、印章、签名的识别与法律含义是不同问题。

高风险字段应定义领域规则,例如金额格式、总和校验、日期范围和表格列一致性,并保留人工确认。

如何评测

按文档类型、语言、扫描质量和布局分层抽样。至少分别测:

  • 字符错误率(CER)/词错误率(WER):衡量转写差异,但不直接表示事实风险;
  • 关键字段准确率:金额、日期、编号、剂量等逐字段精确比较;
  • 阅读顺序:人工判断段落是否可读、脚注是否插错;
  • 表格单元格:行列、表头、合并关系和关键数值;
  • 可追溯性:任一输出能否回到页码和区域;
  • 覆盖率:空页、漏页、未识别区域与重复内容。

平均 CER 很低也可能掩盖一个关键小数点错误。验收阈值要由用途和风险决定,而不是照搬工具宣传数字。

安全、隐私与成本

PDF 和图像可能含个人信息、隐藏层、附件和元数据。使用远程 OCR/VLM 前要确认数据地域、保留策略、权限和供应商契约。日志不应复制全文;缓存应继承源文档权限并有删除策略。

OCR 工具不是恶意 PDF 隔离层

OCRmyPDF 当前文档明确说明它并非为抵御携带恶意内容的 PDF 而设计。文件检测、页数限制和 OCR mode 都不能替代隔离进程、最小权限、恶意内容扫描与人工发布门禁;教学项目只登记这些边界,未运行 PDF/OCR。

OCR/VLM 还受页数、分辨率、GPU/CPU、费用和延迟影响。设置单页像素、总页数、超时和并发上限;超限进入队列或人工处理,不要在交互请求中无限运行。

常见错误与排查

  • 文本非空就跳过 OCR:隐藏 OCR 层可能与图像错位,应抽样对齐。
  • 所有 PDF 先 OCR:会增加成本并可能降低数字 PDF 质量。
  • 只看一页“像是对的”:要覆盖真实布局和关键字段。
  • 把 OCR 置信度当正确率:它没有替代 gold label。
  • 让 VLM 直接输出最终 Markdown:缺少中间坐标、版本和遗漏检查。
  • 声称支持 PDF,但测试只有伪造头部:文件登记测试不等于 PDF 解析测试。

练习

  1. 为数字、扫描、混合、隐藏 OCR 层四类页面写触发规则、缓存键和回退状态。
  2. 设计一个 12 页 gold set,覆盖中文、英文、双栏、旋转、低分辨率、公式、表格、印章与关键数字。
  3. 为“发票总金额”设计字符级、字段级和人工复核三层门禁。
  4. 写一份外部 OCR 适配器接口:输入不得只含文件路径,输出不得只含全文字符串。

自测

  • 我能解释 PDF 文本对象与视觉阅读顺序的差异。
  • 我会逐页选择原生抽取、OCR、视觉模型或人工复核。
  • 我能为 OCR 结果保存引擎、配置、页面与坐标。
  • 我知道 CER、置信分数和关键字段准确率各回答什么问题。
  • 我不会把教学项目的格式登记误报成 PDF/OCR 能力验证。

参考资料与下一步

来源获取日期:2026-07-22;上述工具行为和安装方式可能随版本变化。下一步:元数据、质量验证与项目。