这两天一直在windows上做用python(版本是3.6)抽取pdf中内容的东西,主要就是从pdf中提取出里面的字体和表格内容。尝试了好些个库,现在算是找到比较符合我需求(比较好用)的pdf解析的了。在这个过程中,用了以下几个库:
-
PDFminer
-
PDFminer算是一个还算不错的吧,安装直接用pip安装就行。如下:
pip install pdfminer3k
它这个对pdf中内容做了好些个对象,用这些对象来存储不同的信息,比如表格有LTFigure对象存储、文本有LTTextBoxHorizontal对象来存储。对于文本的提取,基本上都是通过画框提取的,所以提取出的text都是一行一行返回的。这样的后果就是说不清明明是一句话,却被分成两行或三行显示。比如我现在做的,对行、句子比较敏感,不能将所有的行连在一起,所以在提取出结果后,还需要对结果进行处理,以达到我们的目的。
-
看它说明应该是可以提取出里面表格的,但无论在哪也没找到他这个表格要怎么操作,怎么把里面内容拿出来,所以就没有用它,转而去寻找其它的工具。
-
-
tabula
-
在网上看大伙对这个都还挺推崇的,是专门用来提取pdf中表格的一个工具库。安装的话,也是直接使用pip即可,如下:
pip install tabula-py
因为它是依赖于java的,所以要是电脑上没有java环境的话,需要配置一下,将java的所在的安装目录加到环境变量PATH中。
-
但是,怎么说呢,不知道我使用的有问题还是怎么样,表格中几个格合并成的单元格读取的时候,会出问题。
-
-
pdfplumber
-
这个是我现在用的,个人觉得还是比较好用的。对于pdf中文本的抽取,原理还有效果跟PDFminer差不多。对于某一页中文本读取的话,直接调用pdfplumber.extract_text()就可以了。对于表格的话,也是直接调用extract_tables()就可以找到该页中所有的表格中的内容,并且可以直接转换成padas中DataFrame的形式,就我现在测试的来看,结果基本没有差错。表格提取中也可以自己设置一些参数什么的,比如设置表格的分割线是什么类型什么的,很是方便。表格提取的问题跟文本的相似,要是一个表格在两页或更多页的话,他会把这一个表格读成多个,所以需要我们在得到结果后,在对结果处理,把表格连接起来。
-
安装的话,相比起来稍微麻烦点,需要先安装两个软件:ImageMagic和Ghstscript。
-
ImageMagic可以从下载链接下载,16位的更精确些,但消耗的计算机资源也相对大一些,8位的差一些,可以自己选择,但是一定要下载的是6.X的版本。
-
Ghostscript可以从下载链接下载,无论自己电脑是32还是64位的,都下载安装32位的
-
上面两个安装结束后,就可以直接通过pip安装pdfplumber了。
pip install pdfplumber
-
-