Python | 从 PDF 中提取文本内容
前言
本来打算推一篇如何使用 Python 从 PDF 中提取文本内容的文章,但是因为审核原因,公众号上发不出来。尝试排查了一个小时,还是没有搞定,索性就放弃挣扎了。我在这里放出来文章的第一部分,如果有兴趣,可以前往我的 Github 或者码云上查看全文。
Github 访问:https://github.com/GangLi-0814/PyStaData/blob/master/Python_for_Research/Exporting_Data_from_PDFs/Exporting_Data_from_PDFs.md
码云访问:https://gitee.com/mudaozzz/PyStaData/blob/master/Python_for_Research/Exporting_Data_from_PDFs/Exporting_Data_from_PDFs.md
正文
PDF(Portable Document Format),译作便携式文档格式,是一种用独立于应用程序、硬件、操作系统的方式呈现文档的文件格式。PDF 文件通常混合了矢量图形、文本和位图,其基本内容包括:文本存储为内容字符串、由图形和线条组成的用于说明和设计的矢量图形、由照片和其他类型的图片组成的位图。这是 百科-PDF 的解释。
结合自己的经验,我觉得常见的 PDF 文件可以分为两类:一种是文本转化而成(Text-Based),这种文件通常可以直接复制和粘贴;另一种是扫描文件而成(Scanned),比如影印书籍、插入图片制成的文件。依据这个划分,将 Python 中处理 PDF 文件的第三方库可以简单归类:
-
Text-Based:
PyPDF2
,pdfminer
,textract
,slate
等库可用于提取文本;pdfplumber
,camelot
等库可用来提取表格。 -
Scanned:先将文档转为图片,再利用 OCR(光学字符识别)提取内容,如
pytesseract
库;或者采用OpenCV
进行图像处理。
上述大部分是第三方库,所以需要先进行安装:
$pip install PyPDF2
$pip install pdfminer
$pip install pdfminer.six
$pip install textract
$pip install slate
$pip install pdfplumber
$pip install camelot
$pip install pdf2image
$pip install pillow
$pip install pytesseract
接下来,我们就分别使用上面提到的方法,分别看看对两类文档的处理。
- 《快学Scala》第三章 数组相关操作
- 《快学Scala》第二章 控制结构和函数
- A+B for Input-Output Practice (VI)
- 前后端分离跨服务器文件上传-Java SpringMVC版
- 数组和链表的区别
- 《快学Scala》第一章 基础
- 二分查找法的实现和应用汇总
- 《快学Scala》第一章 基础
- 移动端打印输出内容以及网络请求-vconsole.js
- 二分查找法的实现和应用汇总
- JavaScript前端和Java后端的AES加密和解密
- 《Spark MLlib 机器学习实战》1——读后总结
- angularjs自定义指令实现分页插件
- A+B for Input-Output Practice (V)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何实现四元数的运算
- 最牛一篇布隆过滤器详解
- 编写一个IDEA插件之:开发环境准备那些坑
- 编写一个IDEA插件之:使用PSI分析Java代码
- 编写一个IDEA插件之:自动生成Java代码
- 编写一个IDEA插件之:事件监听
- 重新加载故障节点上的 Ceph 卷
- 一个Spring Bean从诞生到逝去的九次人生转折!
- 原创 | 详解git rebase,让你走上git大神之路
- 启用chrome浏览器内置的二维码生成插件
- ZeroLogon漏洞(CVE-2020-1472)防御性指南
- 原创 | 随机数大家都会用,但是你知道生成随机数的算法吗?
- 原创 | codeforces 1425E,一万种情况的简单题
- 原创 | codeforces 1417C,逆向思考的数据结构题
- 原创 | 操作失误不要慌,这个命令给你的Git一次反悔的机会