基于OCR技术的PDF表格提取脚本

基于百度飞桨paddleocr技术

苏格拉底两千多年前就警醒过我们:人啊,认识你自己,这句不仅被作为神谕镌刻在雅典阿波罗神庙外的柱子上,也成了一众哲学家从未停止探讨的问题。可笑的是,这句一直用来提醒自己的话在某种特殊情况下已被遗忘干净,在未充分对工作进行调研的前提下,我竟然无知地以为本任务需求明确、逻辑简单、容易实现,殊不知针对PDF的PCR识别集视觉领域的分类、检测、分割于一身。在经历一系列碰壁、思索、查阅、复现的过程后,我才勉强实现了这款识别效果不是特别鲁棒的PDF表格提取脚本。我是头猪。

1 技术综述

亡羊补牢,尚未晚矣。在意识到任务的难度后,我对任务进行了大体的调研,了解到针对PDF的OCR表格识别主要依靠两种技术:版面分析和表格识别。其中,版面分析利用检测相关技术,解决了表格内容的位置关系;表格识别利用分类和识别的技术,主要是基于版面分析结果对不同区域的表格内容进行识别。总的来说,不管是版面分析还是表格识别,现有方案可大致分为基于图像处理的传统方法基于深度学习的方法

1.1 基于图像处理的传统方法

版面分析比较著名的是 O’Gorman 在 1993 年 TPAMI 中发表的算法 Docstrum。算法的主要思想是通过自下而上的方法依次将图像中的黑白连通域划分为文字、文本行与文本块,从而得到版面布局。表格识别的传统方法通过腐蚀、膨胀等操作获得表格线、划分行列区域,然后将单元格与文本内容相结合重构为表格对象。但是这类算法在版面布局的分析和表格结构的提取上依赖各种阈值和参数的选择,对于不同场景下的文档图片难以保证鲁棒性和泛化性。

1.2深度学习方法

深度学习方法除了直接使用检测模型来对版面内容进行分类以外,还融合了检测、分割、GAN、Attention等众多前沿技术,不再依赖超参数的选择,而是通过神经网络主动地学习解决问题,具有更好的泛化性能。具体内容太多,这里不再赘述。

2 傻瓜式配置教程

1 安装anaconda

安装很简单,读者自行查阅,不再赘述。
anaconda官网下载地址:
https://www.anaconda.com/
国内镜像下载地址:
https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?C=M&O=D
我用的版本百度云下载地址:
链接:https://pan.baidu.com/s/1fRJPjDgZc_JO0nGfcKF87A
提取码:50i0

2 安装Pycharm

pycharm官网分为专业版和社区版,专业版第一个月免费,社区版永久免费,安装教程读者自行查阅。
下载地址:https://www.jetbrains.com/pycharm/download/#section=windows

3 安装各种集成包

3.1 安装paddlepaddle

这里给大家安装的是cpu版本的飞桨2.3.0,省去了配置CUDA的一系列复杂操作,如果要配置GPU版本的飞桨,可以查阅我之前的文章。

python -m pip install paddlepaddle==2.3.0 -i https://mirror.baidu.com/pypi/simple

3.2 安装paddleocr

3.2.1 安装python_Levenshtein-0.12.2

需要自行下载本地安装,请将下载后的文件保存至D:\tmp,百度云地址:
链接:https://pan.baidu.com/s/1meV65eIuVLkfbDv8tnyG2w
提取码:sf10

pip install D:\tmp\python_Levenshtein-0.12.2-cp37-cp37m-win_amd64.whl

3.2.2 安装Shapely-1.8.1

需要自行下载本地安装,请将下载后的文件保存至D:\tmp,百度云地址:
链接:https://pan.baidu.com/s/1fisn8CYlIrtSIxmBINkFug
提取码:u2mg

pip install D:\tmp\Shapely-1.8.1.post1-cp37-cp37m-win_amd64.whl

3.2.3 安装paddleocr

pip install "paddleocr>=2.0.1"

3.3 更新protobuf

卸载旧版protobuf

pip uninstall protobuf

更新

pip install protobuf==3.20.1

3.4 安装 Layout-Parser

pip3 install -U https://paddleocr.bj.bcebos.com/whl/layoutparser-0.0.0-py3-none-any.whl

4 PDF表格提取识别脚本

思路:将指定页面的包含表格的PDF转换为图片,利用OCR技术识别图片中的表格内容

4.1 PDF2Image脚本

将PDF指定页码进行提取,转化为图片

import os
import fitzdef extractImage(pdf_path=r'input/YM2021.pdf',save_path=r'output/YM2021'):base_path =  pdf_path# 要检测的PDF路径save_path= save_path# 检测结果保存文件路径if not os.path.exists(save_path):# 创建保存文件路径os.makedirs(save_path)print("请输入要识别的页码:")rec_page= list(map(int,input().split()))zoom_rate=3# 设置图片相对于PDF文件在XY轴上的缩放比例,1~为放大,~1为缩小zoom_x,zoom_y = zoom_rate,zoom_ratetrans = fitz.Matrix(zoom_x, zoom_y).prerotate(0)print("=="*15,"\033[31m {} \033[0m开始转换".format(os.path.basename(base_path)),"=="*15)doc = fitz.open(base_path)  # 打开一个PDF文件,doc为Document类型,是一个包含每一页PDF文件的列表for pg in rec_page:pm = doc[pg-1].get_pixmap(matrix=trans, alpha=False)  # 将其转化为光栅文件(位数)new_full_name = os.path.basename(base_path).split(".")[0]  # 保证输出的文件名不变save_dir = os.path.join(save_path, "{}_page{}.jpg".format(new_full_name,pg))pm.save(save_dir)print('='*27,'Page:{} conversion finished'.format(pg),'='*27)print("=="*15,"\033[31m {} \033[0m转换完成".format(os.path.basename(base_path)),"=="*15)

4.2 Image2Excel脚本

import os
import cv2
from paddleocr import PPStructure,save_structure_res
from pdf2imageDemo import extractImage# 1.Set Path
pdf_path=r'input/YM2021.pdf'# 要检测的PDF路径
base_path=r'pdf2image/'+os.path.basename(pdf_path).split('.')[0]# 从PDF中提取图片后的保存路径,文件名称与PDf相同
save_folder = 'res/'+os.path.basename(pdf_path).split('.')[0]# 最终检测识别结果的保存路径,文件名称与PDF相同# 2.PDF transpose to Image
extractImage(pdf_path,base_path)# 3.OCR recognize Image table
table_engine = PPStructure(show_log=True)
for img_name in os.listdir(base_path):print('=='*15,"												

【Python自动化】PDF表格内容转化为Excel相关推荐

  1. 用python提取PDF表格内容保存到excel

    一 提取pdf方法介绍 任务是用python提取PDF里的表格文件到excel里面去.做为一个 学了一个周python的人来说当然像尝试一下看能不能做到,事实证明是可以的只是可能代码有点烂...... ...

  2. R语言批量将PDF中表格,转化为excel

    您好!以下是使用R语言将PDF中的表格批量转化为Excel的步骤: 1. 安装必要的包 您需要安装`pdftools`和`tabulizer`包.可以通过以下代码来安装它们: install.pack ...

  3. python将pdf转成excel_PDF转EXCEL,python的这个技能知道吗?

    当在pdf上看到自己想用的表格,却无法将其复制下来的时候,只能默默地打开excel对照着pdf表格的形式敲打出来,既费时又费力!这里介绍如何用python程序将pdf上的表格自动转化为excel表! ...

  4. pdf表格怎么转换成excel呢?

    在正常工作中,与同事对接时,有时收到的文件会出现DPF格式的,因为PDF格式的文件在传输过程中出错率低于Excel文档.但是,PDF文件不能编辑.这里需要把PDF文件转换成Eccel文件,这样内容才可 ...

  5. python百度paddle表格文字识别生成excel

    表格识别技术主要使用基于注意力机制的图片描述模型 RARE,整体流程如下图所示,对于其中的表格区域进行表格识别处理. 表格识别的难点主要在于表格结构的提取,以及将表格信息与 OCR 信息融合.整体流程 ...

  6. python自动化pdf报告_[Python] 自动化办公 PDF提取文字、表格、图片

    转载请注明:陈熹 chenx6542@foxmail.com (简书号:半为花间酒) 若公众号内转载请联系公众号:早起Python 本例可以学到的知识点: 使用 pdfplumber 提取 PDF 中 ...

  7. python提取pdf表格数据并保存到excel中

    pdfplumber操作pdf文件 python开源库pdfplumber,可以较为方便地获取pdf的各种信息,包含pdf的基本信息(作者.创建时间.修改时间-)及表格.文本.图片等信息,基本可以满足 ...

  8. python读取pdf表格_【Python 库】解析PDF文本及表格——pdfminer、tabula、pdfplumber 的用法及对比...

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

  9. python自动生成表格_Python自动整理 Excel 表格

    相信有不少朋友日常工作会用到 Excel 处理各式表格文件,更有甚者可能要花大把时间来做繁琐耗时的表格整理工作.最近有朋友问可否编程来减轻表格整理工作量,今儿我们就通过实例来实现 Python 对表格 ...

最新文章

  1. mysql 查询任务_mysql中怎样显示服务器正在执行的sql任务
  2. 遗传算法介绍和遗传算法的python实现
  3. sendmail邮件服务器配置
  4. java程序中可以有几个构造方法_java中多个构造方法可以相互引用么?
  5. 关于机器学习的一些感想
  6. ExtJs中Store简介(秘籍)
  7. html5怎么让div集中,html – 如何集中5个div而不使用margin-left?
  8. objective 修改plist文件
  9. PHOTOSHOP使用总结
  10. 教你用报表工具搭建企业考核系统
  11. 计算机软件可以控制单片机,一个电脑控制单片机通讯程序分享
  12. 2k21sports服务器暂时不可用,NBA2K20服务器不可用怎么解决 nba2k20进不去游戏解决办法...
  13. 用Python验证指数基金定投策略
  14. 【微服务】(十)—— 统一网关Gateway
  15. 《Qt on Android核心编程》介绍
  16. 通过 TokenType(){}.getType()获取Persionlt;Tgt; 泛型T的类型和数值
  17. python字典取值_python字典,python字典取值
  18. 【鱼骨图】【数学史】行列式、矩阵论的历史
  19. “网管”必备的五大网络数据分析工具
  20. 毕设小程序随笔-如何在wx.navigateBack()时刷新页面

热门文章

  1. 【系列】如何管理数据团队01
  2. )用计算机解决问题的基本过程是(,计算机解决问题基本过程 答案.doc
  3. 大连开发区计算机培训班比较好的,大连口碑比较好的办公软件培训班在哪儿
  4. 你该不会还不知道吧——免费资源蓝桥杯单片机组完全版信息总结
  5. 卡巴斯基郑启良:支持信创发展是卡巴斯基的重要使命
  6. 玩转STM32(17)理解SystemInit函数
  7. linux 硬盘格式化,挂载,反挂载等操作
  8. 第一周项目2 计算长方体的表面积和表面积
  9. 结合工作详解PDCA实践
  10. 关于PDCA和GTD分享的思考