[转]Python 解析 PDF 文本和表格的四大方法介绍

Python 解析 PDF 文本和表格的四大方法介绍

看到一个不错的知识文章,和大家分享一下:

很多文件为了安全都会存成 PDF 格式,比如有的论文、技术文档、书籍等等,程序读取这些文档内容带来了很多麻烦。Python 目前解析 PDF 的扩展包有很多,这里将对比介绍 PyPDF2、pdfplumber、pdfminer3k 以及 Camelot,告诉你哪个是好用的 PDF 解析工具。
本文使用的案例 PDF 文档下载链接:
链接:

https://pan.baidu.com/s/1zH7vY47AqBYKM0XbdABbUA
提取码:xhem

另外,获取 PDF 文档之后,会发现 PDF 文档中的换行符是以行的位置相同的,而不是跟段落相同。

1. PyPDF2 解析 PDF 文档

这里主要参考了 2019-03-07,Usman Malik 写的一篇文章:

Python for NLP: Working with Text and PDF Files

使用 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 方法对中文的支持不好,而对英文的支持会很好,所以如果处理中文文档的话,可以使用下面这个方法。

2. 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)

解析文本内容,取出 PDF 的售后解决方案中的故障代码内容,可以看到故障代码内容,如下图所示,故障代码在两页里面。


根据这类文档的规律可以知道,故障代码内容都是在文本故障代码列举如下:和 2. 之间,因此解析 PDF 之后取出这部分内容还是比较容易的:

print(content.split('故障代码列举如下:')[1].split('2.')[0])

运行结果如下,可以看出来很好的取出来这部分内容了。

(2)解析表格内容
上面介绍了 pdfplumber 解析文本内容的方法,这里介绍一下解析表格内容的方法,和上面十分类似,pdfplumber 中的 extract_tables 函数是可以直接识别 PDF 中的表格的。
这里展示解析 PDF 文档中第一页表格的方法,可以看出案例 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

可以看出这个函数非常容易的将 PDF 文档中的表格提取出来了。


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

3. pdfminer3k 解析 PDF 文档

pdfminer3k 是 pdfminer 的 python3 版本,主要用于读取 pdf 中的文本。如果直接搜索 pdfminer3k 的话会发现网上有非常多的教程,但是看了之后,你可能就想吐槽这些教程太繁琐了,看着头疼。

下面这个是 pdfminer 解析 PDF 文档的流向图。

pdfminer 方法解析 PDF 可以很好的提取文本内容,但是对于表格数据,能提取出文字,但是没有格式,会很不友好。因此你如果只需要提取文本内容的话,可以使用 pdfminer 扩展包,这个包也能很好的支持中文。

4. Camelot 解析 PDF 文档

安装
Camelot 先使用 pip install camelot-py 语句安装,如果报错,参考安装 Camelot 教程。
另外,使用 camelot 需要安装 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 。

原文地址:https://www.cnblogs.com/sonictl/p/12247186.html

时间: 2024-10-13 06:12:22

[转]Python 解析 PDF 文本和表格的四大方法介绍的相关文章

Python解析Wav文件并绘制波形的方法

资源下载 #本文PDF版下载 Python解析Wav文件并绘制波形的方法 #本文代码下载 Wav波形绘图代码 #本文实例音频文件night.wav下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在繁忙的生活中,我们经常会听些歌来放松一下自己,我们经常会从各种播放软件中听自己喜欢的歌,并且往往我们会下载一部分歌曲,而现在音频的种类也相当繁多,像是Wav,Mp3,FLAC,AAC等等很多格式,最近由于需要做一个能够分析Wav格式音频的波形来取得一些数据比如获取人录音时是否说完等等用途.本周先对解

python解析PDF文档

1.安装 pip install pdfminer3k 2.  python读取PDF文档代码分析 PDF格式不是规范格式. 尽管它被叫做"PDF文档", 但并不像word或者html文档.PDF的表现更像一张图片.PDF更像是在一张纸的各个准确的位置上把内容都摆放出来.大部分情况下,没有逻辑结构,比如句子或段落,并且不能自适应页面大小的调整.PDFMiner尝试通过猜测它们的布局来重建它们的结构,但是不保证一定能工作.我知道这样很难看,但是,PDF确实不够规范. 下面这个图片是使用流

pdf如何添加水印以及删除水印方法介绍

相信大家对于水印都不陌生,在纸张上,它具有防伪的作用.而在信息时代的今天,电子水印可以维护我们的版权,防止他人抄袭我们的智慧成果.我们如何才能给pdf添加水印和删除水印,今天小编就给大家介绍方法供大家使用.操作软件:迅捷PDF编辑器软件地址:https://www.xunjiepdf.com/editor1.在给pdf文件添加水印以及删除水印之前,我们需要准备一款软件使用,这里小编使用的是迅捷pdf编辑器.2.当我们打开pdf文件后,我们需要找到水印工具,我们点击界面上方的文档按钮后弹出了许多工

python游戏pygame模块画圆及移动方法介绍

1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #Author: ss 4 5 import pygame 6 import sys 7 8 # 初始化 9 pygame.init() 10 11 size = width,height = 1000,600 # 设置屏幕尺寸 12 BLUE = 0,0,255 13 WHITE = 255,255,255 14 BLACK = 0,0,0 15 RED = 255,0,0 16 GREEN

深入学习python解析并读取PDF文件内容的方法

这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应用.主要参考了一些已有的博客内容,代码. 主要思路是首先利用一个做项目的形式,描述所做的问题,运行环境,和需要安装的库,然后写代码,此代码是在python2.7中运行,然后写出在python3.6中运行的代码,并详细解释python2.7和python3.6中python库的一些不同之处,最后详细的

Delphi提取PDF文本

生成PDF的控件很多,但解析的不是太多,pdf Toolkit可以,但测试的第一个复杂的pdf就报告错误,并且汉字乱码,可能使用的版本或使用方法不对. 想起之前使用java调用的Apache名下的pdfBox库很好用,于是就用下载了pdfBox,使用Delphi来调用pdfBox解析pdf文本. 环境要求:java运行环境 pdfBox应用包:pdfbox-app-2.0.6.jar 这里使用了DOS命令行来解析,然后调用解析结果. 首先是执行DOS命令: procedure CheckResu

PDFBox的使用——分页提取PDF文本

需求:用java分页提取PDF文本. PDFBox是一个很好的可以满足上述需求的开源工具. 1.PDF文档结构 要解析PDF文本,我们首先要了解PDF文件的结构. 关于PDF文档,最重要的几点: 一,PDF文档内容比较复杂,比如有纯文本(可以提取出其中的文字,可以用PDF软件中的“复制”功能).图片(无法使用PDF软件中的“复制”功能).表单.视频.音频等,总之形式比较复杂: 二,PDF文件采用二进制流与纯文字混合的编码模式,并且没有采用 Unicode 等标准字符编码方式,其字符编码采用 Ad

python read PDF for chinese

1 import sys 2 import importlib 3 importlib.reload(sys) 4 5 from pdfminer.pdfparser import PDFParser,PDFDocument 6 from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter 7 from pdfminer.converter import PDFPageAggregator 8 from pdfmine

python 解析docx文档的方法,以及提取插入的文本对象和图片

首先安装docx模块,通过pip install docx或者在docx官方链接上下载安装都可以 下面来看下如何解析docx文档:文档格式如下 有3个部分组成 1 正文:text文档 2 一个表格. 3一个插入的文件对象.4 一个图片 这4个部分是我们在docx文档中最常见的几种格式.解析代码如下 import docx def docx_try():     doc=docx.Document(r'E:\py_prj\test.docx')     for p in doc.paragraph