现在的位置: 首页 > 建站运维教程 > 正文

python解析pdf文件的三种方法

2023年01月23日 建站运维教程 ⁄ 共 1819字 ⁄ 字号 暂无评论

python解析pdf信息,目前还是不能做到很完善,每个方法都会有它的弊端,都需要结合自己的业务场景来和其它方法一块进行使用,从而达到一个相对满意的目标。接下来主要介绍几种方法。

一、PyPDF2 解析 PDF 文档

使用 Python 安装 PyPDF2 扩展包:

pip install PyPDF2
#---------OR
conda install -c conda-forge pypdf2

读取 PDF 文件

import PyPDF2
path = r"****.pdf"
#使用open的‘rb’方法打开pdf文件(这里必须得使用二进制rb的读取方式)
mypdf = open(path,mode='rb')
#调用PdfFileReader函数
pdf_document = PyPDF2.PdfFileReader(mypdf)
#使用pdf_document变量,获取各个信息
#或者PDF文档的页数
pdf_document.numPages
#输出PDF文档的第一页内容
first_page = pdf_document.getPage(0)
print(first_page.extractText())

PyPDF2 方法对中文的支持不好,而对英文的支持会很好,所以如果处理中文文档的话,可以使用下面这个方法。

二、pdfplumber 解析 PDF 文档
先安装需要的包文件

pip install pdfplumber

(1)解析文本内容
pdfplumber 中的 extract_text 函数是可以直接识别 PDF 中的文本内容。
首先读取整个 PDF 文档文本内容

import pdfplumber
import pandas as pd
with pdfplumber.open(path) as pdf:
content = ''
#len(pdf.pages)为PDF文档页数
for i in range(len(pdf.pages)):
#pdf.pages[i] 是读取PDF文档第i+1页
page = pdf.pages[i] #page.extract_text()函数即读取文本内容,下面这步是去掉文档最下面的页码
page_content = '\n'.join(page.extract_text().split('\n')[:-1])
content = content + page_content
print(content)

根据指定的某个需要提取的前后标志字段,可以截取需要信息

print(content.split('截取文本的前一信息')[1].split('截取文本后一信息')[0])

2)解析表格内容
上面介绍了 pdfplumber 解析文本内容的方法,这里介绍一下解析表格内容的方法,和上面十分类似,pdfplumber 中的 extract_tables 函数是可以直接识别 PDF 中的表格的。
由于使用 extract_tables 函数得到的是 Table 一个嵌套的 List 类型,转化成 DataFrame 会更方便查看和分析。

import pdfplumber
import pandas as pd

with pdfplumber.open(path) as pdf:
first_page = pdf.pages[0] for table in first_page.extract_tables():
df = pd.DataFrame(table)
df

看完上面的可以知道 pdfplumber 扩展包可以非常好的解析 PDF 的文本内容和表格内容,并且对中文有很好的支持,十分推荐使用该方法。

三、Camelot 解析 PDF 文档
Camelot 先使用 pip install camelot-py 语句安装,注意也需要安装cv2 包

import camelot
import pandas as pd
tables = camelot.read_pdf(filepath=path,pages='1',flavor='stream')
df = pd.DataFrame(tables[0].data)

Camelot 读取 PDF 文件中的表格数据很好用,并且能够很好的支持中文,但是 Camelot 有很多局限性。

首先,使用 stream 时,表格无法被自动侦测到,stream 把整个页面当成一个 table。
其次,camelot 只用使用基于文本的 PDF 文件而不能使用扫描文档。

综上所述,建议使用 pdfplumber 扩展包来解析 PDF 文档的文本和表格,如果只解析文本内容,也可以使用 pdfminer ,而解析英文文档内容,可以使用 PyPDF2 。

给我留言

您必须 [ 登录 ] 才能发表留言!