提取PDF文本信息:入门
本文作者:王碧琪
文字编辑:钱梦璇
技术总编:张 邯
Stata暑期线上课程火热招生中~
爬虫俱乐部将于2020年7月11日至14日在线上举行为期四天的Stata编程技术定制培训。课程通过案例教学模式,旨在帮助大家在短期内掌握Stata的基本命令、编程、数据处理以及结果输出等技术,并针对最新版Stata中的实用新功能做出详细介绍,包括框架功能(frame:读入多个数据集)等等。同时,此次云端课程提供录播,提供线上答疑。详细培训大纲及报名方式请查看《Stata云端课程来啦》,或点击文末阅读原文直接提交报名信息呦~
PDF格式的文件经常出现在我们的办公生活中,它更像是一张图片,我们没办法进行编辑和复制等操作。所以为了解决这一问题,pdfminer应运而生,今天就来试一下,用pdfminer提取简单文字的pdf文档内容。
一、简介
pdfminer是Python中的一个库,它可以告诉我们某文本在分页上具体的位置和字体信息。可以通过pip安装,注意库的名字在Python3中改为pdfminer3k了:
pip install pdfminer3k
二、处理
(一)导入pdfminer
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTTextBox
这些类的功能如下所示:
类名 | 含义 |
---|---|
PDFParser | 从文件中获取数据 |
PDFDocument | 存储文档数据结构到内存中 |
PDFPageInterpreter | 解析page内容 |
PDFDevice | 把解析到的内容转化为你需要的东西 |
PDFResourceManager | 存储共享资源,例如字体或图片 |
(二)读入待处理PDF文档
创建一个PDF文档实例,打开示例文件:
doc = PDFDocument()
parser = PDFParser(open(r"G:\simple1.pdf"))
parser.set_document(doc)
doc.set_parser(parser)
我们可以调用doc的get_pages() 方法查看每一页:
print(doc.get_pages())
结果是:
<generator object PDFDocument.get_pages at 0x00000266CEBE4848>
这里是一个生成器,因为pdfminer的解析原则是“用了再干”,而并不会先将整个文档解析,生成器的相关内容可以查看推文《可迭代对象、迭代器、生成器傻傻分不清楚》。可以通过for循环遍历内容:
for page in doc.get_pages():
print(page)
结果是:
<PDFPage: Resources={'ProcSet': <PDFObjRef:6>, 'Font': {'F1': <PDFObjRef:7>}}, MediaBox=[0, 0, 612, 792]>
小编查找官方文档,得知这些是返回的page的一些属性。Resources代表pdf的来源,标注了名称以及字体,mediabox是page的位置坐标。这些不用过分在意,只需要继续进行提取,完成任务即可。
(三)解析页面
创建一个PDF解释器对象:
device = PDFPageAggregator( PDFResourceManager(), laparams = LAParams() )
interpreter = PDFPageInterpreter( PDFResourceManager(), device)
pdfminer会通过解释器解析每一页的内容,得到每一页的LTPage对象,其中包括LTTextBox\LTFigure等。他们的关系如下图所示:
(图片源自网络,侵删)
本篇文章仅提取文本,所以只需要提取LTTextBox,接下来的系列文章还会讲到图片、表格等内容,会用到其他的对象。
(四)获取文字内容
使用循环遍历每一页,针对每一页进行解析,提取LTTextBox并输出:
for page in doc.get_pages():
interpreter.process_page(page)
layout = device.get_result()
for x in layout:
if isinstance(x, LTTextBox):
print(x.get_text().strip())
运行结果如下:
至此,pdf文档中的文本内容已经成功提取出来了。
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。