python解析PDF程序代码
python解析PDF程序代码
说在前面
和word的文本相比PDF更类似于一张张图片,图上放着一个个文字。对其的解析是将图片上的文字提取到text文件中,方便之后的分析。
添加依赖
在python的环境中安装PDFminer3k,不要装错了,一开始我装的是PDFminer,结果有几个包不能用
pip install pdfminer3k
源程序代码
#!/usr/bin/env python3 # -*- coding:utf-8 -*- # pip3 install pdfminer3k import os from pdfminer.converter import PDFPageAggregator from pdfminer.layout import LAParams, LTTextBoxHorizontal from pdfminer.pdfparser import PDFParser, PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter, PDFTextExtractionNotAllowed from 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): continue results = 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 PDFPageAggregator from pdfminer.layout import LAParams, LTTextBoxHorizontal from pdfminer.pdfparser import PDFParser, PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter, PDFTextExtractionNotAllowed from 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): continue results = 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中怎么动态声明变量赋值
这篇文章将为大家详细讲解有关Python中怎么动态声明变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中变量的存储原理是什么
-
Python中怎么引用传递变量赋值
这篇文章将为大家详细讲解有关Python中怎么引用传递变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中怎么获取程序执行文件路径
python中怎么获取程序执行文件路径,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的...
-
Python中如何获取文件系统的使用率
Python中如何获取文件系统的使用率,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴...
-
Python中怎么获取文件的创建和修改时间
这篇文章将为大家详细讲解有关Python中怎么获取文件的创建和修改时间,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读...
-
python中怎么获取依赖包
今天就跟大家聊聊有关python中怎么获取依赖包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据...
-
python怎么实现批量文件加密功能
-
python中怎么实现threading线程同步
小编给大家分享一下python中怎么实现threading线程同步,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!...
-
python下thread模块创建线程的方法
本篇内容介绍了“python下thread模块创建线程的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来...