从PDF中提取信息----PDFMiner

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

今天由于某种原因需要将pdf中的文本提取出来,就去搜了下资料,发现PDFMiner是针对

内容提取的,虽然最后发现pdf里面的文本全都是图片,就没整成功,不过试了个文本可复制的

那种pdf文件,发现还是蛮好用的。

PDFMiner----python的PDF解析器和分析器

1.官方文档:http://www.unixuser.org/~euske/python/pdfminer/index.html

2.特征

完全使用python编写。 (适用于2.4或更新版本) 解析,分析,并转换成PDF文档。 PDF-1.7规范的支持。 (几乎) 中日韩语言和垂直书写脚本支持。 各种字体类型(Type1、TrueType、Type3,和CID)的支持。 基本加密(RC4)的支持。 PDF与HTML转换。 纲要(TOC)的提取。 标签内容提取。 通过分组文本块重建原始的布局。3.安装

注:使用源码安装,并且处理中日韩语言的时候还需要一个额外的安装步骤

4.用法

4.1解析pdf文件用到的类:

PDFParser:从一个文件中获取数据PDFDocument:保存获取的数据,和PDFParser是相互关联的PDFPageInterPReter处理页面内容PDFDevice将其翻译成你需要的格式PDFResourceManager用于存储共享资源,如字体或图像。PDFMiner的类之间的关系图:

4.2基本用法

4.2.1解析pdf文件

1frompdfminer.pdfparserimportPDFParser2frompdfminer.pdfdocumentimportPDFDocument3frompdfminer.pdfpageimportPDFPage4frompdfminer.pdfpageimportPDFTextExtractionNotAllowed5frompdfminer.pdfinterpimportPDFResourceManager6frompdfminer.pdfinterpimportPDFPageInterpreter7frompdfminer.pdfdeviceimportPDFDevice8910fp = open('mypdf.pdf','rb')11#创建一个PDF文档解析器对象12parser =PDFParser(fp)13#创建一个PDF文档对象存储文档结构14#提供密码初始化,没有就不用传该参数15document =PDFDocument(parser, passWord)16#检查文件是否允许文本提取17ifnotdocument.is_extractable:18raisePDFTextExtractionNotAllowed19#创建一个PDF资源管理器对象来存储共享资源20rsrcmgr =PDFResourceManager()21#创建一个pdf设备对象22device =PDFDevice(rsrcmgr)23#创建一个PDF解析器对象24interpreter =PDFPageInterpreter(rsrcmgr, device)25#处理文档当中的每个页面26forpageinPDFPage.create_pages(document):27interpreter.process_page(page)

当然这只是进行解析,还可进行布局分析,我的数据就是从这一步的到的

4.2.2布局分析

首先对第一步的代码进行修改和增加

1frompdfminer.layoutimportLAParams2frompdfminer.converterimportPDFPageAggregator34#设定参数进行分析5laparams =LAParams()6#创建一个PDF页面聚合对象7device = PDFPageAggregator(rsrcmgr, laparams=laparams)8interpreter =PDFPageInterpreter(rsrcmgr, device)9forpageinPDFPage.create_pages(document):10interpreter.process_page(page)11#接收该页面的LTPage对象12layout = device.get_result()

布局分析返回的PDF文档中的每个页面LTPage对象。这个对象和页内包含的子对象,形成一个树结构

如图所示:

LTPage :表示整个页。可能会含有LTTextBox,LTFigure,LTImage,LTRect,LTCurve和LTLine子对象。LTTextBox:表示一组文本块可能包含在一个矩形区域。注意此box是由几何分析中创建,并且不一定

表示该文本的一个逻辑边界。它包含LTTextLine对象的列表。使用 get_text()方法返回的文本内容。LTTextLine :包含表示单个文本行LTChar对象的列表。字符对齐要么​​水平或垂直,取决于文本的写入模式。

get_text()方法返回的文本内容。LTCharLTAnno:在文本中实际的字母表示为Unicode字符串(?)。需要注意的是,虽然一个LTChar对象具有实际边界,

LTAnno对象没有,因为这些是“虚拟”的字符,根据两个字符间的关系(例如,一个空格)由布局分析后插入。LTImage:表示一个图像对象。嵌入式图像可以是JPEG或其它格式,但是目前PDFMiner没有放置太多精力在图形对象。LTLine:代表一条直线。可用于分离文本或附图。LTRect:表示矩形。可用于框架的另一图片或数字。LTCurve:表示一个通用的Bezier曲线4.2.3获得目录(纲要)

1frompdfminer.pdfparserimportPDFParser2frompdfminer.pdfdocumentimportPDFDocument34#Open a PDF document.5fp = open('mypdf.pdf','rb')6parser =PDFParser(fp)7document =PDFDocument(parser, password)89#Get the outlines of the document.10outlines =document.get_outlines()11for(level,title,dest,a,se)inoutlines:12print(level, title)

5.个人使用

1#-*- coding: utf-8 -*-2frompdfminer.pdfparserimportPDFParser3frompdfminer.pdfdocumentimportPDFDocument4frompdfminer.pdfpageimportPDFPage5frompdfminer.pdfpageimportPDFTextExtractionNotAllowed6frompdfminer.pdfinterpimportPDFResourceManager7frompdfminer.pdfinterpimportPDFPageInterpreter8frompdfminer.pdfdeviceimportPDFDevice9frompdfminer.layoutimport*10frompdfminer.converterimportPDFPageAggregator11importos12os.chdir(r'F:\test')13fp = open('python.pdf','rb')14#来创建一个pdf文档分析器15parser =PDFParser(fp)16#创建一个PDF文档对象存储文档结构17document =PDFDocument(parser)18#检查文件是否允许文本提取19ifnotdocument.is_extractable:20raisePDFTextExtractionNotAllowed21else:22#创建一个PDF资源管理器对象来存储共赏资源23rsrcmgr=PDFResourceManager()24#设定参数进行分析25laparams=LAParams()26#创建一个PDF设备对象27#device=PDFDevice(rsrcmgr)28device=PDFPageAggregator(rsrcmgr,laparams=laparams)29#创建一个PDF解释器对象30interpreter=PDFPageInterpreter(rsrcmgr,device)31#处理每一页32forpageinPDFPage.create_pages(document):33interpreter.process_page(page)34#接受该页面的LTPage对象35layout=device.get_result()36forxinlayout:37if(isinstance(x,LTTextBoxHorizontal)):38with open('a.txt','a') as f:39f.write(x.get_text().encode('utf-8')+'\n')

将书中的文本内容得到了,只是简单的使用,官方文档中讲解的很全面,在此只是做个小总结。

注:转载请注明出处

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航