目录
1.PyPDF2
2. pdfminer & pdfminer3k
3. pdfplumber
4. Camelot
虽然PDF文件对文本布局非常好,容易打印并阅读,但软件要将它们解析为纯文本并不容易,Python目前解析PDF的扩展包有很多,本文将分别介绍PyPDF2、pdfplumber、pdfminer3k以及Camelot(若发现还有其他函数,继续补充),并分析优缺点,告诉你哪个是好用的PDF解析工具。
PyPDF2 没有办法从 PDF 文档中提取图像、图表或其他媒体,但它可以提取文 本,并将文本返回为 Python 字符串。
缺点:PyPDF2从PDF提取文本时可能会出错,甚至根本打不开某些PDF文件。
基本实现代码如下:
import PyPDF2
# 使用open的‘rb’方法打开pdf文件,使用二进制模式
mypdf = open('pdfexample.pdf',mode='rb')
# 调用PdfFileReader函数
pdf_document = PyPDF2.PdfFileReader(mypdf)
# 使用PdfFileReader对象的变量,获取各个信息,如numPages属性获取PDF文档的页数
pdf_document.numPages
# 调用PdfFileReader对象的getPage()方法,传入页码,取得Page对象:输出PDF文档的第一页内容
first_page = pdf_document.getPage(0)
# 调用Page对象的extractText()方法,返回该页文本的字符串
text = first_page.extractText())
PDFMiner是一个从PDF文档中提取信息的工具。与其他pdf相关的工具不同,它完全专注于获取和分析文本数据。PDFMiner允许获取页面中文本的确切位置,以及其他信息,比如字体或行。它包括一个PDF转换器,可以将PDF文件转换成其他文本格式(如HTML)。它有一个可扩展的PDF解析器,可以用于其他目的而不是文本分析。
pdfminer3k 是 pdfminer 的 python3 版本,主要用于读取 pdf 中的文本,下面是pdfminer 解析PDF文档的流向图。
pdfminer方法解析PDF可以很好的提取文本内容,但是对于表格数据,能提取出文字,但是没有格式,会很不友好。因此你如果只需要提取文本内容的话,可以使用pdfminer扩展包,这个包也能很好的支持中文。
参考:
https://www.cnblogs.com/wj-1314/p/9429816.html
Pdfplumber是一个可以处理pdf格式信息的库,可以很好地解析PDF的文本和表格内容。可以查找关于每个文本字符、矩阵、和行的详细信息,也可以对表格进行提取并进行可视化调试,并且对中文有很好的支持,十分推荐使用该方法。
参考:https://blog.csdn.net/blmoistawinde/article/details/82051915
pdfplumber.pdf中包含了.metadata和.pages两个属性:
每个pdfplumber.page的类中包含了几个主要的属性:
一些常用的方法:
1. 解析文本内容
pdfplumber中的extract_text()函数是可以直接识别PDF中的文本内容:
import pdfplumber
import pandas as pd
with pdfplumber.open(path) as pdf:
content = ''
for i in range(len(pdf.pages)):
# 读取PDF文档第i+1页
page = pdf.pages[i]
# page.extract_text()函数即读取文本内容,下面这步是去掉文档最下面的页码
page_content = '\n'.join(page.extract_text().split('\n')[:-1])
content = content + page_content
# 提取以上解析结果中,“地方法规”和“2.其他有关资料”之间的内容
result = content.split('地方法规列举如下:')[1].split('2.其他有关资料')[0]
2. 解析表格内容
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]
tables = first_page.extract_tables()
for table in tables
df = pd.DataFrame(table)
# 第一列当成表头:
df = pd.DataFrame(table[1:],columns=table[0])
Camelot读取PDF文件中的表格数据很好用,并且能够很好的支持中文,但是Camelot有很多局限性:
import camelot
import pandas as pd
tables = camelot.read_pdf(filepath=path,pages='1',flavor='stream')
df = pd.DataFrame(tables[0].data)
综上所述,建议使用pdfplumber扩展包来解析PDF文档的文本和表格,如果只解析文本内容,也可以使用pdfminer ,而解析英文文档内容,可以使用PyPDF2。