Python 自动化接单实战(四):PDF 批量提取先识别文本层还是扫描件

"把这些 PDF 转成 Excel"不是一个单一需求。电子 PDF 有可复制文本,扫描件只有图片;表格可能跨页,页眉也可能被误当成数据。报价前先识别文件类型,比一开始堆 OCR 参数更重要。

一、先做轻量分类,不急着提取

下面的标准库脚本通过文件特征做第一轮分流。它不是完整 PDF 解析器,但能快速发现加密文件、疑似图片型文件和异常小文件。

python 复制代码
from pathlib import Path

def classify(path):
    data = path.read_bytes()
    if not data.startswith(b"%PDF-"):
        return "not_pdf"
    if b"/Encrypt" in data:
        return "encrypted"
    image_count = data.count(b"/Subtype /Image")
    text_ops = data.count(b" BT") + data.count(b"\nBT")
    return "scanned_like" if image_count > 2 and text_ops == 0 else "text_like"

for path in sorted(Path("input").glob("*.pdf")):
    print(path.name, classify(path))

输出示例:

text 复制代码
invoice-01.pdf text_like
invoice-02.pdf scanned_like
contract.pdf encrypted

分类结果决定后续工具:文本型文件使用 PDF 文本库,扫描件进入 OCR,小部分加密或破损文件进入人工确认。

二、先定义字段证据,再处理版式

发票提取不能只输出金额,还要保留文件名、页码、原始片段和置信状态。金额正则命中多个位置时不要擅自选择最大值,应输出候选并标记 needs_review。

python 复制代码
import re

def amount_candidates(text):
    pattern = r"(?:合计|总额)[::\s]*[¥¥]?(\d+(?:\.\d{1,2})?)"
    return re.findall(pattern, text)

sample = "小计:80.00\n合计:96.00"
print(amount_candidates(sample))

输出:

text 复制代码
['96.00']

三、验收按文件类型分层

从每种版式抽样,记录字段正确率与需要人工复核的比例。扫描件还要覆盖旋转、阴影、低分辨率和印章遮挡。若客户不能提供可核对的期望结果,就先交付分类报告和小样本,不承诺整批准确率。


📌 本文用文件分类、字段证据和分层验收拆开了 PDF 提取问题,避免把所有失败都归因于 OCR。

💬 你的 PDF 资料更常见的是扫描件、跨页表格、加密文件还是版式频繁变化?

👉 关注《Python 自动化接单实战》,下一篇继续拆解第三方 API 对接中的分页、限流与幂等。

参考来源

相关推荐
海姐软件测试7 分钟前
Python 自动化与 AI 结合:基于 Jenkins 的回归验证实践
人工智能·python·自动化
Haoyunyi14 分钟前
2026年做期货量化,和三年前已经不是一回事了
大数据·人工智能·python·金融·区块链
余槐i29 分钟前
yt-dlp 线程开到 16 反而更慢:1000 个视频的实测与限速原因
性能优化·ffmpeg·自动化·开发工具·yt-dlp
再__努力1点31 分钟前
一个开源的AI边缘计算平台:一个项目把算能、瑞芯微、x86的NPU全打通了
人工智能·python·课程设计·媒体·流媒体
小oo呆39 分钟前
【学习心得】Python函数参数中的两个特殊分隔符
开发语言·python
SEO_juper1 小时前
AI 爬虫 robots.txt 检查工具:你的站是不是把 AI 挡在门外了
开发语言·人工智能·爬虫·python·外贸独立站
看我debug1 小时前
Android 运行时分析工作台 (Demo)。统一管理 Frida 脚本、自动注入(修改运行时代码)、收集结构化结果、生成 JSON 报告。
android·python·pip
染指11101 小时前
151.Agent-LangGraph-Send发送(Map-Reduce模式)
人工智能·python·langchain·状态模式·agents
OKkankan1 小时前
python 进阶(三):面向对象进阶——从“会写 class”到设计可维护的后端对象
开发语言·数据结构·python
用户0332126663671 小时前
Python 办公自动化:用 Python 快速生成精美 PPT 演示文稿
python