今天由于某种原因需要将pdf中的文本提取出来,就去搜了下资料,发现PDFMiner是针对
内容提取的,虽然最后发现pdf里面的文本全都是图片,就没整成功,不过试了个文本可复制的
那种pdf文件,发现还是蛮好用的 。
PDFMiner----python的解析器和分析器
1.官方文档: http://www.unixuser.org/~euske/python/pdfminer/index.html
2.特征
3.安装
注:使用源码安装,并且处理中日韩语言的时候还需要一个额外的安装步骤
4.1解析pdf文件用到的类:
PDFMiner的类之间的关系图:
4.2基本用法
4.2.1解析pdf文件
1 from pdfminer.pdfparser import PDFParser
2 from pdfminer.pdfdocument import PDFDocument
3 from pdfminer.pdfpage import PDFPage
4 from pdfminer.pdfpage import PDFTextExtractionNotAllowed
5 from pdfminer.pdfinterp import PDFResourceManager
6 from pdfminer.pdfinterp import PDFPageInterpreter
7 from pdfminer.pdfdevice import PDFDevice
8
9
10 fp = open('mypdf.pdf', 'rb')
11 #创建一个PDF文档解析器对象
12 parser = PDFParser(fp)
13 #创建一个PDF文档对象存储文档结构
14 #提供密码初始化,没有就不用传该参数
15 document = PDFDocument(parser, password)
16 #检查文件是否允许文本提取
17 if not document.is_extractable:
18 raise PDFTextExtractionNotAllowed
19 #创建一个PDF资源管理器对象来存储共享资源
20 rsrcmgr = PDFResourceManager()
21 #创建一个pdf设备对象
22 device = PDFDevice(rsrcmgr)
23 #创建一个PDF解析器对象
24 interpreter = PDFPageInterpreter(rsrcmgr, device)
25 #处理文档当中的每个页面
26 for page in PDFPage.create_pages(document):
27 interpreter.process_page(page)
当然这只是进行解析,还可进行布局分析,我的数据就是从这一步的到的
4.2.2布局分析
首先对第一步的代码进行修改和增加
1 from pdfminer.layout import LAParams
2 from pdfminer.converter import PDFPageAggregator
3
4 # 设定参数进行分析
5 laparams = LAParams()
6 # 创建一个PDF页面聚合对象
7 device = PDFPageAggregator(rsrcmgr, laparams=laparams)
8 interpreter = PDFPageInterpreter(rsrcmgr, device)
9 for page in PDFPage.create_pages(document):
10 interpreter.process_page(page)
11 # 接收该页面的LTPage对象
12 layout = device.get_result()
布局分析返回的PDF文档中的每个页面LTPage对象。这个对象和页内包含的子对象,形成一个树结构
如图所示:
LTCurve:表示一个通用的
Bezier曲线4.2.3获得目录(纲要)
1 from pdfminer.pdfparser import PDFParser
2 from pdfminer.pdfdocument import PDFDocument
3
4 # Open a PDF document.
5 fp = open('mypdf.pdf', 'rb')
6 parser = PDFParser(fp)
7 document = PDFDocument(parser, password)
8
9 # Get the outlines of the document.
10 outlines = document.get_outlines()
11 for (level,title,dest,a,se) in outlines:
12 print (level, title)
1 # -*- coding: utf-8 -*-
2 from pdfminer.pdfparser import PDFParser
3 from pdfminer.pdfdocument import PDFDocument
4 from pdfminer.pdfpage import PDFPage
5 from pdfminer.pdfpage import PDFTextExtractionNotAllowed
6 from pdfminer.pdfinterp import PDFResourceManager
7 from pdfminer.pdfinterp import PDFPageInterpreter
8 from pdfminer.pdfdevice import PDFDevice
9 from pdfminer.layout import *
10 from pdfminer.converter import PDFPageAggregator
11 import os
12 os.chdir(r'F:\test')
13 fp = open('python.pdf', 'rb')
14 #来创建一个pdf文档分析器
15 parser = PDFParser(fp)
16 #创建一个PDF文档对象存储文档结构
17 document = PDFDocument(parser)
18 # 检查文件是否允许文本提取
19 if not document.is_extractable:
20 raise PDFTextExtractionNotAllowed
21 else:
22 # 创建一个PDF资源管理器对象来存储共赏资源
23 rsrcmgr=PDFResourceManager()
24 # 设定参数进行分析
25 laparams=LAParams()
26 # 创建一个PDF设备对象
27 # device=PDFDevice(rsrcmgr)
28 device=PDFPageAggregator(rsrcmgr,laparams=laparams)
29 # 创建一个PDF解释器对象
30 interpreter=PDFPageInterpreter(rsrcmgr,device)
31 # 处理每一页
32 for page in PDFPage.create_pages(document):
33 interpreter.process_page(page)
34 # 接受该页面的LTPage对象
35 layout=device.get_result()
36 for x in layout:
37 if(isinstance(x,LTTextBoxHorizontal)):
38 with open('a.txt','a') as f:
39 f.write(x.get_text().encode('utf-8')+'\n')
将书中的文本内容得到了,只是简单的使用,官方文档中讲解的很全面,在此只是做个小总结