Advertisement

PDF信息提取

阅读量:

PDF文件读取

1.PDF概述

PDF概述
可移植文档格式(PDF)是一种用独立于应用程序、硬件、操作系统的方式呈现文档的文件格式。每个PDF文件包含固定布局的平面文档的完整描述,包括文本、字形、图形及其他需要显示的信息。PDF文件格式在1990年代早期开发,用于分享包括文本格式和内置视频的文档,能跨平台操作,即使计算机平台完全不同,收件者亦无需适配相关或合用的应用软件接口。
解析PDF文件的python库主要有两个,PDFMiner库和pyPDF库,在这里主要讲解PDFMiner库来提取PDF文件内容。

2.环境配置

PDFMiner
PDFMiner是一种从PDF文档中提取信息的工具。与其他PDF相关工具不同,它完全专注于获取和分析文本数据。允许人们获取页面中文本的确切位置,以及字体或线条等其他信息。PDFMiner包括一个PDF转换器,可以将PDF文件转换为其他文本格式(如HTML)。它具有可扩展的PDF解析器,可用于除文本分析之外的其他目的。
适用于配合StringIO转出PDF文件中的文字类信息,对于图像的提取较弱,目前只支持JPEG图像。

pyPDF
pyPDF一样也是是一种从PDF文档中提取信息的工具。
PyPDF是一个纯python PDF库,能够分割,合并,裁剪和转换PDF文件的页面。它还可以向PDF文件添加自定义数据,查看选项和密码。它可以从PDF中检索文本和元数据,以及将整个文件合并在一起。
当前pyPDF库已经停止更新,最新的库是pyPDF2库。

安装PDFMiner
如果电脑里的python版本是python 2,则在命令行键入

复制代码
    pip install pdfminer
    
    
      
    

如果电脑里的python版本是python3,则在命令行键入

复制代码
    pip install pdfminer3k
    
    
      
    

3.PDFMiner解析

PDFMiner库的类

  • PDFParser 从文件中获取数据
  • PDFDocument 存储文档数据结构到内存中
  • PDFPageInterpreter 解析page内容
  • PDFDevice 把解析到的内容转化为你需要的格式
  • PDFResourceManager存储共享资源,例如字体或图片

PDFMiner库类之间的关系
由于PDF文件具有如此庞大而复杂的结构,因此整体解析PDF文件会消耗时间和内存。但是,大多数PDF处理任务并不需要每个部分。因此,PDFMiner采用延迟解析策略,即仅在必要时解析内容。
要解析PDF文件,需要至少使用两个类:PDFParser和PDFDocument。这两个对象彼此相关联。 PDFParser从文件中提取数据并PDFDocument存储它。我们还需要 PDFPageInterpreter处理页面内容并将PDFDevice其翻译为需要的任何内容。 PDFResourceManager用于存储共享资源,如字体或图像。
在这里插入图片描述

4.PDF文件提取

基本用法
首先我们用用文件对象来创建一个PDF文档分析器,提取出PDF数据;

复制代码
    praser = PDFParser(fp)
    
    
      
    

然后我们创建一个存储文档结构的PDF文档对象;

复制代码
    doc = PDFDocument()
    
    
      
    

然后我们连接分析器与文档对象;

复制代码
    praser.set_document(doc)
    doc.set_parser(praser)
    
    
      
      
    

然后提供初始化密码,如果没有密码则创建一个空的字符串;

复制代码
    doc.initialize()
    
    
      
    

接下来我们判断文档是否可以进行txt转换;

复制代码
    doc.is_extractable
    
    
      
    

接下来我们创建一个PDF资源管理器来管理共享资源;

复制代码
    rsrcmgr = PDFResourceManager()
    
    
      
    

接下来创建一个PDF设备对象;

复制代码
    device = PDFDevice(rsrcmgr)
    
    
      
    

接下来创建一个PDF解释器对象;

复制代码
    interpreter = PDFPageInterpreter(rsrcmgr,device)
    
    
      
    

循环遍历列表,每次处理一个page的内容。

复制代码
    for page in PDFPage.create_pages(doc):
    interpreter.process_page(page)
    
    
      
      
    

布局分析
如果我们要进行布局分析,我们需要对上面的代码进行修改和增加;
首先我们设定参数进行分析;

复制代码
    laparams = LAParams()
    
    
      
    

然后创建一个PDF页面聚合对象;

复制代码
    device = PDFPageAggregator(rsrcmgr, laparams=laparams)  
    interpreter = PDFPageInterpreter(rsrcmgr, device) 
    
    
      
      
    

最后我们在每个page页面接收该页面的LTPage对象;

复制代码
    layout = device.get_result()
    
    
      
    

这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等,想要获取文本就要获得对象的text属性。

全部评论 (0)

还没有任何评论哟~