PDF文本提取——扫描图片中文字提取

在数据分析处理中,常常需要抽取PDF中的文本数据,例如文档检索系统需要对PDF中文本做倒排索引。然而,一些PDF文档是通过扫描图片构成,直接使用诸如PDFBox之类的工具无法提取其中的文本。为此,本文介绍一种提取思路:首先利用ImageMagick将PDF转换为图片,然后利用Tesseract-OCR将从图片中识别文字。【也可以使用一些基于Tesseract-OCR GUI工具来提取,例如gImageReader,其他相关工具见https://github.com/tesseract-ocr/tesseract/wiki/User-Projects-%E2%80%93-3rdParty

(1)首先,需要安装ImageMagick,并使用Python包Wand调用。

从ImageMagick官网(http://www.imagemagick.org)下载对应操作系统安装包(本文以Window为例进行介绍),并按照官网说明进行安装。安装完成后,需要将ImageMagick的安装目录加入环境变量,以便相关命令能够调用能够调用。在Python中可以使用pip install Wand安装Wand包。

安装完成后,可以使用如下命令将PDF转换为图片:

magick -density 300 1.pdf 1.png

其中1.pdf为待转换PDF,1.png为转换后的图像。需要注意的是,如果PDF有多页,假设有2页,则转换后的图像命名中会加入页码,如:1-0.png、1-1.png。

相同作用的Python代码如下所示。

from wand.image import Image
pdf_file_path = ‘1.pdf’
with Image(filename=pdf_file_path, resolution=300) as img:
with img.convert(format) as converted:
converted.save(filename=img_file_path)

(2)然后,需要安装Tesseract-OCR,并使用Python包pytesseract调用

从Tesseract-OCR官网(https://github.com/tesseract-ocr/tesseract/wiki)下载对应操作系统安装包(本文以Windows为例进行介绍),并按照官网说明进行安装。安装完成后,需要将Tesseract-OCR的安装目录加入环境变量以便相关命令能够调用能够调用。此外,还需要下载从tessdata(https://github.com/tesseract-ocr/tessdata)下载中文训练数据chi_sim.traineddata(这里以简体中文为例,其他语言自行下载),下载完chi_sim.traineddata需要将其放在Tesseract-OCR安装目录下的tessdata目录中。在Python中可以使用pip install pytesseract安装pytesseract包。

安装完成后,可以使用如下命令从图片中识别中文:

tesseract 1-0.png 1-0 -l chi_sim

其中1-0.png为待提取的图片,1-0为提取后文本存放的文件名(最终保存为1-0.txt)。

相同作用的Python代码如下所示:

from PIL import Image
import pytesseract
pytesseract.image_to_string(Image.open(‘1-0.png’), lang=’chi_sim’)

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注