查看原文
其他

PyMuPDF提取文本信息

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:王碧琪 文字编辑:方    言 技术总编:张    邯



Python云端培训课程火热招生中~

     爬虫俱乐部将于2020年7月25日至28日线上举行Python编程技术训练营,本次培训采用理论与案例相结合的方式,帮助大家在掌握Python基本思想的基础上,学习科学计算技术与网络数据抓取技术,详情可点击《Python云端培训课程开始报名~》,或点击文末阅读原文直接提交报名信息呦~

之前的推文中,我们使用PDFminer、PDFplumber提取了PDF文档中的文本信息,今天我们介绍PyMuPDF。PyMuPDF可从Python环境中访问MuPDF的许多重要功能,而MuPDF可以访问PDF、XPS、OpenXPS、CBZ(漫画书档案)、FB2和EPUB(电子书)格式的文件,这些是扩展名为.pdf,.xps,.oxps,.cbz,.fb2或.epub的文件,所以相较于前两个库,PyMuPDF的功能更加强大。
今天待处理的pdf文档内容如下:

今天的目的是:使用该库,将PDF文档中的文本信息提取出来并转成txt文档。
当然,我们需要先安装一下:
pip install pymupdf
1.导入
import fitzprint(fitz._doc_) 
2.打开PDF文档
ifile = r"e:\1.pdf"ofile = r"e:\1.txt"doc = fitz.open(ifile) #打开文档#doc=fitz.Document(ifile) 与上一行语句作用相同print(doc)print(type(doc))
结果是:
fitz.Document('E:\1.pdf')<class 'fitz.fitz.Document'>
这里生成的doc就是fitz处理后的文档,doc是一个fitz.fitz.Document对象。关于Document用法官网有详细介绍,这里我们介绍几个常用方法。(官网:https://pymupdf.readthedocs.io/en/latest/document/#document)
print(doc.name) #文档的名称print(doc.metadata) #metadata (dict)文档的相关信息,以词典格式保存print(doc.pages()) #doc的pages对象print(doc.pageCount) #pages的数目(int)print(len(doc)) #doc的长度,即pages的数目print(doc.loadPage()) #读入一个Pagelistpi=doc.getPageImageList(0) #得到page0中的image,生成一个列表 print(listpi)
运行的结果对应是:
E:\1.pdf{'format': 'PDF 1.7', 'title': None, 'author': '王 碧琪', 'subject': None, 'keywords': None, 'creator': 'Microsoft® Word 2019', 'producer': 'Microsoft® Word 2019', 'creationDate': "D:20200306152024+08'00'", 'modDate': "D:20200306152024+08'00'", 'encryption': None}<generator object Document.pages at 0x000001A5B43617C8>11page 0 of E: \1.pdf[(21, 0, 500, 378, 8, 'DeviceRGB', '', 'Image21', 'DCTDecode')]

3.进行提取

(1)对于某一页进行提取

doc可以直接采用切片形式指定某一个page,本PDF文档中只有一个page,注意是0而非1 。getText()方法可以提取出page中的全部文本信息。

pa=doc[0]text1=pa.getText()print(text1)

也可以对doc对象使用getPageText(page),其中page为指定页码。

text2=doc.getPageText(0)print(text2)

(2)对全部page进行提取

pages是一个generator,需要遍历得到每一页的信息。

for p in doc.pages(): text3 = p.getText() print(text3)

text1、text2、text3的结果相同,其中的换行与原PDF相同:


4.导出到txt中

最后将提取出的信息保存到txt文件中即可:
with open(ofile,"w") as f: for page in doc: text = page.getText() f.write(text)
完整程序:
pip install pymupdfimport fitzprint(fitz.__doc__) ifile = r"e: \1.pdf"ofile =r"e: \1.txt"doc = fitz.open(ifile) #打开文档#doc=fitz.Document(ifile) 与上一行语句作用相同print(doc)print(type(doc))print(doc.name) #文档的名称print(doc.metadata) #metadata (dict)文档的相关信息,以词典格式保存print(doc.pages()) #doc的pages对象print(doc.pageCount) #pages的数目(int)print(len(doc)) #doc的长度,即pages的数目print(doc.loadPage()) #读入一个Pagelistpi=doc.getPageImageList(0) #得到page0中的image,生成一个列表 print(listpi)pa=doc[0]text1=pa.getText()print(text1)text2=doc.getPageText(0)print(text2)for p in doc.pages():# for p in doc:#与上一行语句作用相同 text3 = p.getText() print(text3)with open(ofile,"w") as f: for page in doc: text = page.getText() f.write(text)
MuPDF库中的内容还很丰富,接下来小编将继续介绍使用它来提取PDF文档中的图片,敬请期待~






对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐

Mylabels命令介绍     

数据集的划分——交叉验证法

大数据视角下的大学录取分数排行
集成学习介绍之二——Boosting算法

PDF文本信息提取(二)

取长补短、互通有无 ——集成学习介绍之Bagging &随机森林
PDF表格信息提取
神经网络——brain
marktouse标记使用变量
换种视角看问题——支持向量机(SVM)
提取PDF文本信息:入门
毕业季|b站《入海》评论爬取
Stata云端课程来啦
利用广义线性模型实现的分类——Logistic回归
Requests get爬虫之设置headers
数据分析薪资待遇如何?——跟我来,带你看
Vardistinct一键去重计数

关于我们



微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存