OCRmyPDF 实战:3 步给扫描 PDF 做可搜索化,实现发票合同自动分类归档
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
OCRmyPDF 给扫描 PDF 加一层文字,产出可搜索 PDF,是它最核心的能力。照这篇做,你能搭出一套 OCR 文档分类流水线,把发票合同 PDF 自动归档进不同文件夹。
一堆图像 PDF,连关键词都搜不到
纸质文件数字化之后,麻烦才刚开始:
- 翻出来的都是扫描图像,
Ctrl+F搜不到任何东西 - 文件名常常是
扫描件001.pdf,内容是什么,只有打开才知道 - 想按"发票 / 合同 / 报告"分文件夹,只能靠肉眼一页页看
思路其实很直接:先用 OCR 给 PDF 补上文字层,让内容变得可搜索、可复制;再把提取出来的文本丢给一套分类规则,文件就自己各归各位了。
一条命令装好环境并验证
先把环境跑起来,全程两条命令:
git clone https://gitcode.com/GitHub_Trending/oc/OCRmyPDF cd OCRmyPDF pip install .装完在终端敲ocrmypdf --version。能打印版本号,说明 Python 依赖、Ghostscript、Tesseract 引擎都已就位,可以开工。
打通主链路:OCR 转换、提取文本、分类决策
这步最关键:转换、提取、分类,一次跑通。
第一步,把图像 PDF 变成可搜索 PDF:
ocrmypdf in.pdf out.pdf运行中它会扫描每一页、调用 Tesseract 识别,最后输出一份文字层和原图对齐的新 PDF,版式完全保留。
第二步加第三步,用一段最小 Python 把文本抠出来并做分类决策。规则用"关键词 + 正则"就够用,优先级从上到下:
def classify(text): if re.search(r"发票|INVOICE|Receipt", text, re.I): return "invoices" if re.search(r"合同|CONTRACT|Agreement", text, re.I): return "contracts" return "other"文本提取库任选其一,pdfplumber、pypdf都行:先open()打开转换后的 PDF,遍历页面把文本拼起来,再交给classify。命中哪条规则,文件就落到哪个目录,归档逻辑就是这么简单。
走向自动化:批量处理、目录监控与归档目录设计
单文件跑通后,剩下的事是让机器盯着。
- 批量处理:仓库自带批量脚本,递归遍历目录里所有 PDF 并逐个做 OCR,还带了原文件备份逻辑,扫描 PDF 批量处理直接拿它改
- 目录监控:watcher 脚本基于 watchdog 监听目录,新 PDF 一落盘就触发 OCR,适合扫描仪"吐完即走"的场景
- 归档目录:建议四段式结构
docs/ ├─ incoming/ # 待处理 ├─ sorted/ # 分类结果:invoices/ contracts/ reports/ other/ ├─ original/ # 原件备份 └─ ocr.log # 处理记录三条设计原则:原件先备份再移动,别在原目录直接改写;OCR 完成的文件移进sorted/,监控就不会重复处理它;顺手记一行日志(文件名、分类结果、时间),出错时好排查。
避坑与调优清单
- 先抽查再批量:转换完随手打开一个 PDF,选中文字、复制一下。复制出来的是乱码,说明扫描件本身质量不行,或者语言包不对
- 多语言要装语言包:
-l参数要匹配文档语言,中文文档没装chi_sim包,识别结果会惨不忍睹 - 规则要可维护:关键词从少到多,别一上来写五十个词。定期翻
other/文件夹,新类别从里面长出来,这才是规则的"养法" - 备份不可省:自动归档会移动甚至覆盖文件,
original/目录就是你的后悔药
收尾
到这里,OCR 转换、文本提取、分类决策、批量与目录监控四块就都接上了:一条命令完成 OCR 转换,一个classify函数决定文件去向,一个监控脚本让整条流水线自己转起来。后续如果other/里的文件越来越多,可以再往语义分类的方向演进,但那属于扩展话题了——先用关键词把八九成的文档分对,就已经够用。
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考