如何把pdf文件提取出来,怎么把pdf文件文字提取出来
今天,由于某种原因,我需要从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转换。轮廓提取。标签内容提取。通过组合文本块来重建原始布局。
3.安装
注意:使用源代码安装和处理中文、日文和韩文时,需要一个额外的安装步骤。
4.用法
4.1解析pdf文件用到的类:
从文件中获取数据。PDFDocument:保存采集的数据,与PDFPageInterpreter相关。pdfpageinterpreter处理页面内容。PDFDevice将其翻译成您需要的格式。PDFResourceManager用于存储共享资源,如字体或图像。PDFMiner的类之间的关系图:
4.2基本用法
4.2.1解析pdf文件
1从pdfminer.pdfparser导入PDFParser 2从pdfminer.pdfdocument导入PDFDocument 3从pdfminer.pdfpage导入PDFPage 4从pdfminer.pdfpag e导入PDFTextExtractionNotAllowed 5从pdfminer.pdfinterp导入PDFResourceManager 6从pdfminer.pdfinterp导入PDFPageInterpreter 7从pdfminer.pdfpag设备导入PDF device 8 9 10fp=open( my PDF . PDF , rb) 11 #创建一个不需要传递参数15 document=PDFDocument(parser,Password)16 #检查文件是否允许文本提取17如果不允许document.is _ extractable: 18引发pdftextraction connected 19 #创建一个pdf explorer对象来存储共享资源20 rsrcmgr=pdfresourceManager()21 #创建一个PDF device对象22 device=PDFDevice(rsrcmgr)23 #创建一个PDF parser对象24 interpreter=pdfpageinterpreter(rsrcmgr,device) 25 #处理中的每一页Create _ pages(文档):27解释器。流程_页面(第页)
当然这只是为了分析,也是为了版面分析。我的数据就是从这一步得到的。
4.2.2布局分析
首先,修改并添加第一步中的代码。
1来自pdf miner。布局从pdf miner导入la params2。converter导入pdfpageaggregator 3 4 #设置分析参数5 laparams=LAParams() 6 #创建PDF页面聚合对象7 Device=PDF page aggregator(rsrcmgr,LAParams=LAParams)8 interpreter=PDF page . Create _ pages(document)9 for page:10 interpreter . process _ page(page)11 #接收LTPage对象12 layout=device.get_result()
按布局分析返回的PDF文档中的每个page LTPage对象。该对象和页面中包含的子对象形成一个树形结构。
如图所示:
LTPage:表示整页。可能包含LTTextBox、LTFigure、LTImage、LTRect、LTCurve和LTLine子对象。LTTextBox:表示一组文本块可以包含在一个矩形区域中。请注意,此框是通过几何分析创建的,但这不是必需的
表示文本的逻辑边界。它包含LTTextLine对象的列表。使用get_text()方法返回的文本内容。LTTextLine:包含表示单个文本行的LTChar对象列表。字符对齐方式可以是水平对齐,也可以是垂直对齐,这取决于文本的书写模式。
get_text()方法返回的文本内容。LTCharLTAnno:文本中的实际字母表示为Unicode字符串(?)。注意,尽管LTChar对象有一个实际的边界,
LTAnno对象没有,因为这些是"虚拟"的字符,根据两个字符间的关系(例如,一个空格)由布局分析后插入l图像:表示一个图像对象。嵌入式图像可以是联合图像专家组或其它格式,但是目前PDFMiner没有放置太多精力在图形对象100 .lt行:代表一条直线。可用于分离文本或附图LTRect:表示矩形。可用于框架的另一图片或数字LTCurve:表示一个通用的贝塞尔曲线曲线
4.2.3获得目录(纲要)
一从pdfminer.pdfparser导入PDFParser 2从pdfminer.pdfdocument导入pdf文档3 4 #打开便携文档格式文档5 fp=open(mypdf.pdf , Rb )6 parser=pdf parser(FP)7 document=pdf document(parser,password) 8 9 #获取文档的大纲10个大纲=文档。Get _ outlines()11 for(level,title,dest,a,se) in outlines:12 print (level,title)
5.个人使用
1 # -*-编码:utf-8 -*- 2从pdfminer.pdfparser导入PDFParser 3从pdfminer.pdfdocument导入pdf文档4从pdfminer.pdfpage导入pdf第5页从pdfminer.pdfpage导入PDFTextExtractionNotAllowed 6从pdfminer.pdfinterp导入PDFResourceManager 7从pdfminer.pdfinterp导入pdf page解释器8从pdfminer.pdfdevice导入pdf设备9从pdf miner。pdf Rb)14 #来创建一个可移植文档格式文件的扩展名(可移植文档格式的缩写)文档分析器15 parser=PDFParser(fp) 16 #创建一个便携文档格式文档对象存储文档结构17文档=文档(解析器)18 #检查文件是否允许文本提取19如果不是文档。is _ extractable:20 raise pdftextextractionnotallowed 21 else:22 #创建一个便携文档格式资源管理器对象来存储共赏资源23 rsrcmgr=PDFResourceManager()24 #设定参数进行分析25 laparams=LAParams()26 #创建一个便携文档格式设备对象27 #设备=pdf设备(rsrcmgr)28设备=pdf页面聚合器(rsrcmgr,laparams=laparams)29 #创建一个便携文档格式解释器对象30解释器=PDFPageInterpreter(rsrcmgr,设备)31 #处理每一页32对于PDFPage.create_pages(文档)中的页面:33解释器.进程_页面(页面)34 #接受该页面的LTPage对象35布局=器件。get _ result()36 for x in layout:37 if(is instance(x,lt textbox horizontal)):38 with open( a . txt , a) as f:39 f.write(x.get_text().编码( utf-8) n )
将书中的文本内容得到了,只是简单的使用,官方文档中讲解的很全面,在此只是做个小总结。
注:转载请注明出处
转载于:https://www。cnblogs。com/圆姑娘/p/4979267。超文本标记语言