Python+Miner解析PDF
Python+Miner解析PDF
这个事呢,我们直接来吧,参考资料么一篇文档【312】Python提取pdf文本内容,官方参考文档在这里
一、安装
首先我们得明确一点,就是你的电脑上得有Python,版本无所谓
其次,我们得安装PdfMiner,安装方法比较简单,直接安装就行
pip install pdfminer
二、目标
将下方图片中得上方得pdf文件内容读取出来,保存到excel中,保证能够获取到站点名称和站点经纬度,还需要读取到两个站点之间得距离,但是距离这里有点小问题,所以就没有弄。
三、代码解析
经过分析pdf文件发现,每个站点都分属某个组(比如A1),所以基本思路就是创建一个数据对象,将每个组得数据都放到对象中,然后实现一个输出方法,重新对数据进行拼接,并保存到文件中。
# 这部分导包是从参考的csdn的博客中直接搞过来的,有一些并没有用到,可以去掉
# 总之,再次感谢博主
# 所以,照着抄吧
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams,LTTextBoxHorizontal
from pdfminer.pdfpage import PDFTextExtractionNotAllowed,PDFPage
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
import os,requests,re, sys# 创建类每个站点组的类
class StaData():# 站点组的名称name = None# 站点名称,每个组有多个站点,所以用列表保存sta = []# 经纬度信息N = []E = []# 距离信息,由于距离信息在pdf解析时,并不能很好的站点信息组织到一起,所以暂时没有用到这个数据# 后续还需要单独对他进行处理dis = []# 保存方法,将每个站点组的数据保存到csv文件中def toCsv(self, filename="c.csv"):# 以追加模式进行保存,最终形成一个excel表with open(filename, "a") as f:# 拼接字符串,按道理用join方法更好,但是,管他呢for i in range(len(self.sta) - 1):s = self.sta[i][1:] \+ "," \+ self.N[i] \+ "," \+ self.E[i] \+ "," \+ self.sta[i+1][1:] \+ "," \+ self.N[i+1] \+ "," \+ self.E[i+1] \+ "," \+ self.name \+ "\n"f.write(s)print(s)f.close()# 在这个地方清空列表,保证重新创建下一个站点组时列表是空的self.sta.clear()self.N.clear()self.E.clear()# 该函数copy自参考博客,其中更改了一下,将该函数改成了生成器
# 这样的话,该函数就会将内容一行一行的返回出来,我们再进行处理
def changePdfToText(filePath):# 以二进制读模式打开file = open(filePath, 'rb')#用文件对象来创建一个pdf文档分析器praser = PDFParser(file)# 创建一个PDF文档对象存储文档结构,提供密码初始化,没有就不用传该参数doc = PDFDocument(praser, password='')##检查文件是否允许文本提取if not doc.is_extractable:raise PDFTextExtractionNotAllowed# 创建PDf 资源管理器 来管理共享资源,#caching = False不缓存rsrcmgr = PDFResourceManager(caching = False)# 创建一个PDF设备对象laparams = LAParams()# 创建一个PDF页面聚合对象device = PDFPageAggregator(rsrcmgr, laparams=laparams)# 创建一个PDF解析器对象interpreter = PDFPageInterpreter(rsrcmgr, device)print(PDFPage.get_pages(doc))# 循环遍历列表,每次处理一个page的内容for page in PDFPage.create_pages(doc):interpreter.process_page(page)# 接受该页面的LTPage对象layout = device.get_result()# 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象# 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等for x in layout:if hasattr(x, "get_text"):# 获取文本内容results = x.get_text()# 如果文本内容中有换行符,则可以确定是多行内容的文本块# 那么就需要将内容进行分割,并按行输出if '\n' in results:# 且跟文本results = results.split("\n")# 遍历并返回文本for r in results:yield relse:# 如果没有换行,则直接返回yield results# 这个函数是新加的,作用呢就是通过上边的类创建对象,并设置对应的值
def createObject():创建生成器pdfparse = changePdfToText(filePath="./a.pdf")# 创建对象o = StaData()# 死循环,直到数据处理完成自动退出while True:d = Nonetry:# 使用next方法依次访问生成器,并获取生成器的数据d = next(pdfparse)except:# 如果获取不到数据了,则直接退出sys.exit()# 根据每个数据的特征,进行正则匹配# 如果A开头的后边有数字的,则是站点组名称if re.match("A\d{1,4}", d):# 如果是站点组名,则说明需要处理的数据是下一个组的数据了# 那么这时就需要将上一个组的数据输出到csv文件中,并清空对应列表o.toCsv()# 更改对象中的name名称o.name = d# 如果是▲|△开头,则对应的是站点名,将名称添加到站点名称elif re.match("[▲|△].+",d):o.sta.append(d)# 如果是N开头,则是经纬度,这里处理的有点问题,可以直接通过空格对数据进行切分的# 我先将空格去掉了,然后通过E字母进行切分,后来又加上了E,搞麻烦了elif d.startswith("N"):d = d.replace(" ", "")jw = d.split("E")jw[1] = "E" + jw[1]o.N.append(jw[0])o.E.append(jw[1])# 如果数据满足数字数字(数字数字)这种形式,则将前边的数字数字取出来elif re.match("\d{1-4}\(\d{1-4}\)", d):dis = d.split("(")o.dis.append(dis[0])print(o.toCsv)if __name__ == '__main__':createObject()print('ok,解析pdf结束!')
Python+Miner解析PDF相关推荐
- 用Python提取解析pdf文档中内容
用Python提取解析pdf文档中内容 文章目录: 参考: 1.https://blog.csdn.net/tmaczt/article/details/82876018 # Tika库 2.http ...
- python如何解析PDF文件
python如何解析PDF文件 python中读取pdf的方法:使用python第三方库pdfminerk3k 1.使用pdfminer库 pdfminer是一个主流的分析pdf的库.如果是pytho ...
- Python:解析PDF文本及表格——pdfminer、tabula、pdfplumber 的用法及对比
pdf 是个异常坑爹的东西,有很多处理 pdf 的库,但是没有完美的. 一.pdfminer3k pdfminer3k 是 pdfminer 的 python3 版本,主要用于读取 pdf 中的文本. ...
- python pdfminer解析pdf文件的每一行,得到每一行的坐标与每个字符的坐标
pdfminer的基本用法请参考:https://blog.csdn.net/weixin_35757704/article/details/121621559 一句话(用变量line表示)相对于页面 ...
- io python 读取pdf_python自动化办公之 Python 解析 PDF
上次给大家介绍了 Python 如何操作 Word 和 Excel ,而今天想为大家再介绍下,用 Python 如何解析 PDF ,PDF 格式不像前面两个那么规范,从它的表现来看,它更像是一张图片, ...
- python interpreter 中没有torch_python自动化办公之 Python 解析 PDF
上次给大家介绍了 Python 如何操作 Word 和 Excel ,而今天想为大家再介绍下,用 Python 如何解析 PDF ,PDF 格式不像前面两个那么规范,从它的表现来看,它更像是一张图片, ...
- python读取pdf表格_[转]Python 解析 PDF 文本和表格的四大方法介绍
Python 解析 PDF 文本和表格的四大方法介绍 == code for paper and NSFC Proj. parsing==: https://gitee.com/sonica/pdf_ ...
- Python实现分析pdf或者Word形式简历,并且保存到Excel中
Python实现分析当前文件夹里面所有的pdf或者Word形式简历,并且保存到Excel中 # -*- coding:utf-8 -*-#作者:公众号:湾区人工智能 #功能:实现分析pdf或者Word ...
- python怎么读取pdf文件_Python解析并读取PDF文件内容的方法
本文实例讲述了Python解析并读取PDF文件内容的方法.分享给大家供大家参考,具体如下: 一.问题描述 利用python,去读取pdf文本内容. 二.效果 三.运行环境 python2.7 四.需要 ...
最新文章
- Matlab数据的可视化 -- 简易线性函数图
- redis数据库价格_Caffeine和Redis居然可以这么搭,想不到吧,爱了爱了
- HTML特殊编码转换
- 用PostgreSQL运行文件中的SQL程序
- Teamcenter 入门开发系列问答(3)
- Handsontable 自定义菜单 自定义命令存放位置
- 拓端tecdat|数据观察“双十一”网购新常态
- 理论知识内容有_育婴师培训课程包含哪些内容?
- 基于MATLAB的人脸识别研究
- 中国DCS品牌知名度调查
- 软件测试工程师调研报告,软件测试工程师竞聘报告范文.docx
- 自建KMS激活服务器
- 长期不使用计算机会损坏吗,电脑长时间存放不用会不会影响硬件寿命
- 数据库防火墙技术展望【终章】
- 如何对接身份证实名认证?
- 【数学建模】基于matlab GUI平行停车模拟仿真【含Matlab源码 1877期】
- 小布老师oralce讲座笔记(六)
- 从零开始研发GPS接收机连载——8、跟踪调试之遇到瓶颈
- yacs、yaml进行实验参数配置详解
- 单款地图下载器如何授权
热门文章
- Java对象空间分配流程
- CeSi 进程集中管理部署
- 【OpenGL学习笔记⑦】——键盘控制镜头的平移【3D正方体 透视投影 观察矩阵 对LookAt的理解】
- Tomcat启动时报错:A child container failed during start解决方案-clean
- iOS多线程的初步研究(三)-- NSRunLoop
- PostOffice
- Excel将数值转换为按指定数字格式表示的文本
- 单片机流水灯全亮c语言程序,终极流水灯单片机C语言程序.doc
- 你们知道官网购买服务器可以返佣吗
- 【SDX62】WCN685X hostapd配置WPA2/WPA3混合模式,WPA3连接成功,只支持WPA2的设备连接失败问题分析及解决方案