打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python—PDF文本与图片抽取

PDF是人们日常使用最多的跨平台文档。其是一种用独立于应用程序、硬件、操作系统的方式呈现文档的文件格式。每个PDF文件包含固定布局的平面文档的完整描述,包括文本、字形、图形及其他需要显示的信息。因此,具有良好的跨平台特性,但同时,也为抽取其内容带来了不便。

PDF最初版本于1993发行,最新版本为2.0。

今天,我们使得Python来抽取PDF文档中的文本与图片。

文本抽取

PDF文本抽取相对容易,效果最好的是pdfminer(https://github.com/euske/pdfminer)。基本能抽取出所有文本。

pdfminer是开源的纯Python编写,支持最新至PDF 1.7版本。

pdfminer的使用比较简单

安装:

pip install pdfminer

使用:

python pdf2txt.py -o <抽取保存的文本文件名> -t text -O <源pdf文件>

如上就实现了文本抽取,抽取的是纯文本,无格式、字体等信息。

原文

抽取出的文本

pdfminer有个麻烦的地方,对于CJK编码的PDF文档,需要手动安装也能正常抽取文字。

图片抽取

PDF图片抽取是个比较难的问题,目前Python可以调用的比较好的库是PyMuPDF(https://github.com/pymupdf/PyMuPDF)。PyPDF2(https://github.com/mstamy2/PyPDF2)库也可以实现部分功能,但已于2018年停止更新。

这些库的问题是,无法抽取出所有的图片,同时,抽取出的图片问题不一。

这里以 https://arxiv.org/pdf/1703.10135.pdf 文件为例。

使用PyMuPDF 代码如下:

import fitz # PyMuPDFdef get_pixmaps_in_pdf(pdf_filename): doc = fitz.open(pdf_filename) xrefs = set() for page_index in range(doc.pageCount): for image in doc.getPageImageList(page_index): xrefs.add(image[0]) # Add XREFs to set so duplicates are ignored pixmaps = [fitz.Pixmap(doc, xref) for xref in xrefs] doc.close() return pixmapsdef write_pixmaps_to_pngs(pixmaps): for i, pixmap in enumerate(pixmaps): pixmap.writePNG(f'{i}.png') # Might want to come up with a better namepixmaps = get_pixmaps_in_pdf('Wang_et_al_2017_Tacotron.pdf')write_pixmaps_to_pngs(pixmaps)

抽取效果如下。整篇PDF文档,只抽取出如下的几个图片。

比如,第二页的图片就无法抽取出来。

理想状态下,第6页的图片与示例应该合并一成一张图抽取出来,但实际上是分开抽取。

好的。Python抽取PDF文字与图片的介绍就到这里。

大家有更好的图片抽取工具或方法,欢迎留言贡献,谢谢

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
使用Python操作PDF:常用PDF库总结
如何利用python将pdf文件转化为txt文件?
3个Python PDF库,提取信息、转换格式、分割剪裁有它就够了!
Python 办公自动化之 PDF 最强操作手册
python读取pdf和docx
Python读取PDF内容
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服