如何批量提取PDF中的文字?

623 阅读3分钟

时间:24年12月4日

我的经历:

有些我想看的电子书(比如经济学原理)只有PDF版本,内容不清楚字还小,我习惯了看字体超大超清晰的纯文本电子书,所以就想着怎么批量把PDF里的文字提取出来。

提取PDF的方案:

  • 使用OCR工具,这个OCR简单来说就是用程序从图像中提取出文本内容。
  • ORC工具很多的,本文用的是一个Linux上批量OCR工具,需要你懂一点Linux的知识,如果你要提取的内容少,也可以用微信,首先给PDF拍照或截图自己发给自己,然后微信文字提取。

微信的图片浏览中有提取文字的功能

微信的图片浏览中有提取文字的功能

  • 我用的是OCRmyPDF,git上的一个开源工具,需要安装Linux或Mac,如果你是Windows的话就需要WSL或上虚拟机了。

关于OCRmyPDF

OCRmyuPDF是git上很火的一个ORC工具,这个工具本来是给万恶的文字全是图片格式的PDF加上ORC扫描的文字层使得PDF可以对文本进行复制&检索的,不过它的ORC功能也是可以直接提取出文字的。

使用步骤

首先需要Linux或Mac环境,我用的是Windows11+WSL2(ubuntu),WSL是巨硬自己开发一套的Linux虚拟方案,真的特别好用,安装(官方文档)也简单,想在Windows上整Linux的同学强烈建议尝试。

我这里会把主要操作和遇到的一些坑给列出来,如果你想更深入,也可以看ocrmypdf的官方操作文档

下是具体操作:

  1. 安装 ocrmypdf:apt install ocrmypdf

  2. 这工具默认只能扫描英语,所以要安装中文扩展包

    1. 显示所有 Tesseract 语言包的列表:apt-cache search tesseract-ocr,根据实际情况选择安装,里面中文有简体中文和繁体中文,我这只需要一个简中。
    2. 安装简体中文语言包:apt-get install tesseract-ocr-chi-sim
  3. 把PDF文件准备好,假设放在/home/mydir下,pdf文件名是in.pdf

  4. 进入这个目录cd /home/mydir,后面的操作都是在这个目录下

  5. 添加一个OCR的配置,用于去除中文文字中有空格问题,默认扫描出来的中文文字中间会有空格

    1. 创建文本文件ocr.cfg内容就一行文字preserve_interword_spaces 1
    2. 不会创建文本文件的可以百度下,相关文档很多。
  6. 开始提取文字:ocrmypdf --tesseract-config ocr.cfg -l chi_sim+eng --pages 11,12,42-71 --sidecar output2.txt in.pdf out.pdf

  7. 下面是所有选项的解析

    1. --tesseract-config ocr.cfg 这个对应上面的OCR配置文件,去除中文间空格的
    2. -l chi_sim+eng 指定要扫描的语言,这里是中文+英文,我的PDF内容包含中英文
    3. --pages 11,12,42-71 指定页数,不指定就是所有,建议先来个一页测试效果,PDF大的话全部扫描挺费时间的。
    4. --sidecar output2.txt 这是OCR扫描的文本信息,这是我们要用的结果了
    5. in.pdf 要扫描的PDF文件
    6. out.pdf 生成的PDF,加上了ORC层的,这是这个工具的主要功能,但对我来说没用,可以删除掉。

参考: