您的位置:首页技术文章
文章详情页

python解析PDF程序代码

浏览:3日期:2022-06-16 11:18:41
说在前面

和word的文本相比PDF更类似于一张张图片,图上放着一个个文字。对其的解析是将图片上的文字提取到text文件中,方便之后的分析。

添加依赖

在python的环境中安装PDFminer3k,不要装错了,一开始我装的是PDFminer,结果有几个包不能用pip install pdfminer3k

源程序代码

#!/usr/bin/env python3# -*- coding:utf-8 -*-# pip3 install pdfminer3kimport osfrom pdfminer.converter import PDFPageAggregatorfrom pdfminer.layout import LAParams, LTTextBoxHorizontalfrom pdfminer.pdfparser import PDFParser, PDFDocumentfrom pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter, PDFTextExtractionNotAllowedfrom pdfminer.pdfdevice import PDFDevicedef read_pdf(pdf_name, result_name): # 以二进制读模式打开 fp = open(pdf_name, ’rb’) # 用文件对象来创建一个pdf文档分析器 parser = PDFParser(fp) # 创建一个pdf文档 doc = PDFDocument() # 连接分析器 与文档对象 parser.set_document(doc) doc.set_parser(parser) # 提供初始密码,如果没有密码 就创建一个空的字符串 doc.initialize(’’) # 检测文档是否提供txt转换,不提供就抛出异常 if not doc.is_extractable:raise PDFTextExtractionNotAllowed # 创建PDf 资源管理器 来管理共享资源 rsrcmgr = PDFResourceManager() # 创建一个PDF设备对象 laparams = LAParams() device = PDFPageAggregator(rsrcmgr, laparams=laparams) # 创建一个PDF解释器对象 interpreter = PDFPageInterpreter(rsrcmgr, device) with open(result_name, 'w', encoding='u8') as fd_out:# 循环遍历列表,每次处理一个page的内容for i, page in enumerate(doc.get_pages(), 1): index = '===========《第{}页》==========='.format(i) print(index) fd_out.write(index + 'n') interpreter.process_page(page) # 接受该页面的LTPage对象 layout = device.get_result() for x in layout:# 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象 一般包括LTTextBox,# LTFigure, LTImage, LTTextBoxHorizontal 等等 想要获取文本就获得对象的text属性if not isinstance(x, LTTextBoxHorizontal): continueresults = x.get_text()print(results)fd_out.write(results)if __name__ == ’__main__’: # 获取读取文件夹 filePath = ’../PDFfile’ #遍历文件夹 for i,j,k in os.walk(filePath):for m in k: # 格式化输出的名称和地址 result = ’../TextFile/’ + m[:-4] + ’.txt’ # 格式化源文件路径 fileName = i + ’/’ + m # 调用函数解析 read_pdf(fileName, result)

参考以下代码内容:python 读取pdf文本内容

#!/usr/bin/env python3#-*- coding:utf-8 -*-# pip3 install pdfminer3k from pdfminer.converter import PDFPageAggregatorfrom pdfminer.layout import LAParams, LTTextBoxHorizontalfrom pdfminer.pdfparser import PDFParser, PDFDocumentfrom pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter, PDFTextExtractionNotAllowedfrom pdfminer.pdfdevice import PDFDevice def read_pdf(pdf_name, result_name): # 以二进制读模式打开 fp = open(pdf_name, ’rb’) # 用文件对象来创建一个pdf文档分析器 parser = PDFParser(fp) # 创建一个pdf文档 doc = PDFDocument() # 连接分析器 与文档对象 parser.set_document(doc) doc.set_parser(parser) # 提供初始密码,如果没有密码 就创建一个空的字符串 doc.initialize(’’) # 检测文档是否提供txt转换,不提供就抛出异常 if not doc.is_extractable:raise PDFTextExtractionNotAllowed # 创建PDf 资源管理器 来管理共享资源 rsrcmgr = PDFResourceManager() # 创建一个PDF设备对象 laparams = LAParams() device = PDFPageAggregator(rsrcmgr, laparams=laparams) # 创建一个PDF解释器对象 interpreter = PDFPageInterpreter(rsrcmgr, device) with open(result_name,'w',encoding='u8') as fd_out:# 循环遍历列表,每次处理一个page的内容for i,page in enumerate(doc.get_pages(),1): index = '===========《第{}页》==========='.format(i) print(index) fd_out.write(index + 'n') interpreter.process_page(page) # 接受该页面的LTPage对象 layout = device.get_result() for x in layout:# 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象 一般包括LTTextBox,# LTFigure, LTImage, LTTextBoxHorizontal 等等 想要获取文本就获得对象的text属性if not isinstance(x, LTTextBoxHorizontal): continueresults = x.get_text()print(results)fd_out.write(results) if __name__ == ’__main__’: pdf_name = ’test.pdf’ result = ’test.txt’ read_pdf(pdf_name, result)

以上就是python解析PDF的详细内容,更多关于python解析PDF的资料请关注好吧啦网其它相关文章!

标签: Python 编程
相关文章: