深圳网站搭建哪里好,淘宝客新增网站,只知道网站后台怎么做301,emlog wordpressPDFMiner简介
pdf提取目前的解决方案大致只有pyPDF和PDFMiner。据说PDFMiner更适合文本的解析#xff0c;首先说明的是解析PDF是非常蛋疼的事#xff0c;即使是PDFMiner对于格式不工整的PDF解析效果也不怎么样#xff0c;所以连PDFMiner的开发者都吐槽PDF is evil. 不过这些…PDFMiner简介
pdf提取目前的解决方案大致只有pyPDF和PDFMiner。据说PDFMiner更适合文本的解析首先说明的是解析PDF是非常蛋疼的事即使是PDFMiner对于格式不工整的PDF解析效果也不怎么样所以连PDFMiner的开发者都吐槽PDF is evil. 不过这些并不重要。
PDFMiner是一个可以从PDF文档中提取信息的工具。与其他PDF相关的工具不同它注重的完全是获取和分析文本数据。PDFMiner允许你获取某一页中文本的准确位置和一些诸如字体、行数的信息。它包括一个PDF转换器可以把PDF文件转换成HTML等格式。它还有一个扩展的PDF解析器可以用于除文本分析以外的其他用途。
PDFMiner内置两个好用的工具pdf2txt.py和dumppdf.py
pdf2txt.py从PDF文件中提取所有文本内容。但不能识别画成图片的文本这需要特征识别。对于加密的PDF你需要提供一个密码才能解析对于没有提取权限的PDF文档你得不到任何文本。dumppdf.py把PDF文件内容变成pseudo-XML格式。这个程序主要用于debug但是它也可能用于提取一些有意义的内容比如图片。PDFMiner在python2中名为PDFMiner在python3中名为PDFMiner3k分别上链接 PDFMiner 官方主页https://euske.github.io/pdfminer/ PDFMiner github主页https://github.com/euske/pdfminer pdfminer3k 官方主页https://pypi.org/project/pdfminer3k/ pdfminer3k github主页https://github.com/jaepil/pdfminer3k 解析pdf文件用到的类
PDFParserPDF文档分析器从一个文件中获取数据PDFDocumentPDF文档对象保存获取的数据和PDFParser是相互关联的PDFPageInterpreterPDF文档解析器处理页面内容变成Python可以解析PDFResourceManagerPDF资源管理器用于存储共享资源如字体或图像。PDFDevice: 将其翻译成你需要的格式LAParamsPDF参数分析器分析pdf文件参数PDFPageAggregatorPDF聚合器读取获取的文档对象
他们之间的关系图如下 布局分析返回的PDF文档中的每个页面LTPage对象。这个对象和页内包含的子对象形成一个树结构,如图所示 LTPage :表示整个页。可能会含有LTTextBoxLTFigureLTImageLTRectLTCurve和LTLine子对象。LTTextBox:表示一组文本块可能包含在一个矩形区域。注意此box是由几何分析中创建并且不一定 表示该文本的一个逻辑边界。它包含LTTextLine对象的列表。使用 get_text方法返回的文本内容。LTTextLine :包含表示单个文本行LTChar对象的列表。字符对齐要么水平或垂直取决于文本的写入模式。 get_text方法返回的文本内容。LTCharLTAnno:在文本中实际的字母表示为Unicode字符串。需要注意的是虽然一个LTChar对象具有实际边界 LTAnno对象没有因为这些是“虚拟”的字符根据两个字符间的关系例如一个空格由布局分析后插入。LTImage:表示一个图像对象。嵌入式图像可以是JPEG或其它格式但是目前PDFMiner没有放置太多精力在图形对象。LTLine:代表一条直线。可用于分离文本或附图。LTRect:表示矩形。可用于框架的另一图片或数字。LTCurve:表示一个通用的Bezier曲线
一个简单的示例
# encoding: utf-8
import sys
import importlib
importlib.reload(sys)
from pdfminer.pdfparser import PDFParser,PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal,LAParams
from pdfminer.pdfinterp import PDFTextExtractionNotAllowedpath C:\\Users\\admin\\Desktop\\t.pdf
def parse():fp open(path, rb) #用文件对象来创建一个pdf文档分析器PDFParserpraser PDFParser(fp)# 创建一个PDF文档PDFDocumentdoc PDFDocument()# 连接分析器 与文档对象praser.set_document(doc)doc.set_parser(praser)# 提供初始化密码,如果没有密码 就创建一个空的字符串doc.initialize()# 检测文档是否提供txt转换不提供就忽略if not doc.is_extractable:raise PDFTextExtractionNotAllowedelse:# 创建PDf 资源管理器 来管理共享资源PDFResourceManagerrsrcmgr PDFResourceManager()# 创建一个PDF设备对象LAParamslaparams LAParams()# 创建聚合器,用于读取文档的对象PDFPageAggregatordevice PDFPageAggregator(rsrcmgr, laparamslaparams)# 创建一个PDF解释器对象,对文档编码解释成Python能够识别的格式PDFPageInterpreterinterpreter PDFPageInterpreter(rsrcmgr, device)# 循环遍历列表每次处理一个page的内容for page in doc.get_pages(): # doc.get_pages() 获取page列表# 利用解释器的process_page()方法解析读取单独页数interpreter.process_page(page)# 这里layout是一个LTPage对象,里面存放着这个page解析出的各种对象,一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal等等,想要获取文本就获得对象的text属性# 使用聚合器get_result()方法获取页面内容layout device.get_result()for x in layout:if (isinstance(x, LTTextBoxHorizontal)):#需要写出编码格式with open(rC:\Users\admin\Desktop\1.txt, a,encodingutf-8) as f:results x.get_text()f.write(results \n)if __name__ __main__:parse()
或者使用官方的一个例子简单写如下
rsrcmgr PDFResourceManager(cachingcaching) # 创建一个PDF资源管理器对象来存储共赏资源
outfp io.open(outfile, wt, encodingcodec, errorsignore) #指定outfile
device XMLConverter(rsrcmgr, outfp, laparamslaparams, outdiroutdir)
fp io.open(file, rb) #来创建一个pdf文档分析器
process_pdf(rsrcmgr, device, fp, pagenos, maxpagesmaxpages, passwordpassword, cachingcaching, check_extractableTrue) #调用process_pdf
fp.close()
device.close()
outfp.close()
参考链接
https://blog.csdn.net/liuqingpeng_1/article/details/79560753
https://www.zhangshengrong.com/p/Z9a2AAy1Vk/
https://blog.csdn.net/qq_29750461/article/details/80011255
https://blog.csdn.net/sinat_37967865/article/details/80145487