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相关推荐

  1. 用Python提取解析pdf文档中内容

    用Python提取解析pdf文档中内容 文章目录: 参考: 1.https://blog.csdn.net/tmaczt/article/details/82876018 # Tika库 2.http ...

  2. python如何解析PDF文件

    python如何解析PDF文件 python中读取pdf的方法:使用python第三方库pdfminerk3k 1.使用pdfminer库 pdfminer是一个主流的分析pdf的库.如果是pytho ...

  3. Python:解析PDF文本及表格——pdfminer、tabula、pdfplumber 的用法及对比

    pdf 是个异常坑爹的东西,有很多处理 pdf 的库,但是没有完美的. 一.pdfminer3k pdfminer3k 是 pdfminer 的 python3 版本,主要用于读取 pdf 中的文本. ...

  4. python pdfminer解析pdf文件的每一行,得到每一行的坐标与每个字符的坐标

    pdfminer的基本用法请参考:https://blog.csdn.net/weixin_35757704/article/details/121621559 一句话(用变量line表示)相对于页面 ...

  5. io python 读取pdf_python自动化办公之 Python 解析 PDF

    上次给大家介绍了 Python 如何操作 Word 和 Excel ,而今天想为大家再介绍下,用 Python 如何解析 PDF ,PDF 格式不像前面两个那么规范,从它的表现来看,它更像是一张图片, ...

  6. python interpreter 中没有torch_python自动化办公之 Python 解析 PDF

    上次给大家介绍了 Python 如何操作 Word 和 Excel ,而今天想为大家再介绍下,用 Python 如何解析 PDF ,PDF 格式不像前面两个那么规范,从它的表现来看,它更像是一张图片, ...

  7. python读取pdf表格_[转]Python 解析 PDF 文本和表格的四大方法介绍

    Python 解析 PDF 文本和表格的四大方法介绍 == code for paper and NSFC Proj. parsing==: https://gitee.com/sonica/pdf_ ...

  8. Python实现分析pdf或者Word形式简历,并且保存到Excel中

    Python实现分析当前文件夹里面所有的pdf或者Word形式简历,并且保存到Excel中 # -*- coding:utf-8 -*-#作者:公众号:湾区人工智能 #功能:实现分析pdf或者Word ...

  9. python怎么读取pdf文件_Python解析并读取PDF文件内容的方法

    本文实例讲述了Python解析并读取PDF文件内容的方法.分享给大家供大家参考,具体如下: 一.问题描述 利用python,去读取pdf文本内容. 二.效果 三.运行环境 python2.7 四.需要 ...

最新文章

  1. Matlab数据的可视化 -- 简易线性函数图
  2. redis数据库价格_Caffeine和Redis居然可以这么搭,想不到吧,爱了爱了
  3. HTML特殊编码转换
  4. 用PostgreSQL运行文件中的SQL程序
  5. Teamcenter 入门开发系列问答(3)
  6. Handsontable 自定义菜单 自定义命令存放位置
  7. 拓端tecdat|数据观察“双十一”网购新常态
  8. 理论知识内容有_育婴师培训课程包含哪些内容?
  9. 基于MATLAB的人脸识别研究
  10. 中国DCS品牌知名度调查
  11. 软件测试工程师调研报告,软件测试工程师竞聘报告范文.docx
  12. 自建KMS激活服务器
  13. 长期不使用计算机会损坏吗,电脑长时间存放不用会不会影响硬件寿命
  14. 数据库防火墙技术展望【终章】
  15. 如何对接身份证实名认证?
  16. 【数学建模】基于matlab GUI平行停车模拟仿真【含Matlab源码 1877期】
  17. 小布老师oralce讲座笔记(六)
  18. 从零开始研发GPS接收机连载——8、跟踪调试之遇到瓶颈
  19. yacs、yaml进行实验参数配置详解
  20. 单款地图下载器如何授权

热门文章

  1. Java对象空间分配流程
  2. CeSi 进程集中管理部署
  3. 【OpenGL学习笔记⑦】——键盘控制镜头的平移【3D正方体 透视投影 观察矩阵 对LookAt的理解】
  4. Tomcat启动时报错:A child container failed during start解决方案-clean
  5. iOS多线程的初步研究(三)-- NSRunLoop
  6. PostOffice
  7. Excel将数值转换为按指定数字格式表示的文本
  8. 单片机流水灯全亮c语言程序,终极流水灯单片机C语言程序.doc
  9. 你们知道官网购买服务器可以返佣吗
  10. 【SDX62】WCN685X hostapd配置WPA2/WPA3混合模式,WPA3连接成功,只支持WPA2的设备连接失败问题分析及解决方案