Github标星13.6k!一行代码从PDF提取Excel文件

news/2024/7/7 23:51:43

 Datawhale干货 

开源技术:OCR开源技术

我们在工作生活中经常会遇到表格识别的问题,比如导师说,把下面PDF文件里面的表格取出来整理成Excel表。

只要稍微会一点Python,这个开源项目神器几行代码解决!

使用展示

版面分析+表格识别

如图所示,针对一张完整的PDF图片,这个开源项目可以对文档图片中的文本、表格、图片、标题与列表区域进行分类。同时还可以利用表格识别技术完整地提取表格结构信息,使得表格图片变为可编辑的Excel文件。

不仅仅是PDF文件转excel,如果编程能力再强一些,结合版面分析技术,PDF转Word都不在话下。

而且使用也是非常方便,在完成Python whl包安装之后,简单几行代码即可完成快速试用。

最终结果会输出图片文件夹,Excel表和文字识别结果。

 

开源地址:

https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.2/ppstructure/README_ch.md

版面分析与表格识别核心技术概述

不管是版面分析还是表格识别,现有方案可大致分为基于图像处理的传统方法和基于深度学习的方法。

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

2.深度学习方法:除了直接使用检测模型来对版面内容进行分类以外,还融合了检测、分割、图神经网络、注意力机制等众多前沿技术能力。依赖算法工程师对于深度神经网络的精心设计,可以不再依赖阈值与参数,具有更好的泛化性。

PP-Structure核心技术解读

  • 版面分析技术

PP-Structure的版面分析技术,主要是对图片形式的文档进行版面分析,将文档划分为文字、标题、表格、图片以及列表5类区域(与Layout-Parser联合使用)。其核心技术思路与Layout-Parser项目密切合作,参考了Layout-Parser的工程结构设计,配合PaddleDetection开源的高效检测算法PP-YOLO v2,在数据集TableBank和PubLayNet上mAP分别达到93.6和96.2, NVIDIA Tesla P40 耗时仅需66.6ms,且可以支持用户根据自己的数据自定义训练。

Layout-Parser是开源的基于深度学习的文档图像分析工具箱,可用于布局检测,字符识别和许多其他文档处理任务,包含大量丰富模型,支持自定义DL模型,支持多个文档布局检测数据集。

GitHub地址:

https://github.com/Layout-Parser/layout-parser

  • 表格识别技术

表格识别技术则主要使用基于注意力机制的图片描述模型RARE,整体流程如下图所示,对于其中的表格区域进行表格识别处理。

表格识别的难点主要在于表格结构的提取,以及将表格信息与OCR信息融合。整体流程可以分为上下两部分,其中上半部分(黑色支路)是普通的OCR过程,通过(1)文本检测模块对表格图片进行单行文字检测,获得坐标,然后通过(2)文本识别模块识别模型得到文字结果。

而在下半部分的在蓝色支路中,表格图片首先经过(3)表格结构预测模块,获得每个Excel单元格的四点坐标与表格结构信息。结合黑色支路文本检测获得的单行文字文本框4点坐标,共同输入(4)Cell坐标聚合模块,再通过(5)Cell文本聚合模块,将属于同一单元格的文本拼接在一起。最后结合表格结构信息,通过(6)Excel导出模块获得Excel形式的表格数据。

下面分别针每个模块分别展开介绍。

1. 文本检测模块  2. 文本识别模块

主要使用PP-OCR提供的检测和识别算法。

3. 表格结构预测模块,主要使用基于Attention的图片描述模型RARE,RARE模型可以实现:输入一张图片,通过带有注意力机制的网络输出一段文字,描述图片的内容,而针对于表格图片的图片描述网络,输入一张经过版面分析的表格图片,输出的是一串HTML字符(如下图所示)。表格的结构通过HTML的结构标记表示,其中的内容即为表格文本中的内容。通过进一步的HTML解析,可以获得每个文本的单元格四点坐标和表格结构信息。

4. Cell坐标聚合模块,主要用来解决如何将跨行单元格的文本重新拼接在一个单元格内的问题。它通过计算由文本检测算法获得的文本框坐标(红色框)与表格结构预测模块得到的Cell坐标(蓝色框)之间的IOU和顶点距离来进行单行到多行的聚合。使用IOU判断哪些红色框同属于一个蓝色框,使用顶点距离和IOU判断红色框的排列顺序。

5. Cell文本聚合模块,根据已有的红色文本框顺序,按照从上到下从左到右顺序利用(4)Cell坐标聚合模块的结果将(2)文本识别结果和进行拼接,这样对于多行文本的单元格内容即可拼接成一个字符串。

6. Excel导出模块,将(3)表格结构预测结果html结果与(5)Cell文本聚合模块文本结果结合,最终导出为Excel输出。

以上所有内容均在PaddleOCR项目开源,目前star数量超过13.5k

延伸阅读:

PaddleOCR历史表现回顾

  • 2020年6月,8.6M超轻量模型发布,GitHub Trending 全球趋势榜日榜第一。

  • 2020年8月,开源CVPR2020顶会算法,再上GitHub趋势榜单!

  • 2020年10月,发布PP-OCR算法,开源3.5M超超轻量模型,再下Paperswithcode 趋势榜第一。

  • 2021年1月,发布Style-Text文本合成算法,PPOCRLabel数据标注工具,star数量突破10000+,截至目前已经达到11.5k,在《Github 2020数字洞察报告》中被评为中国GithubTop20活跃项目。

  • 2021年4月,开源AAAI顶会论文PGNet端到端识别算法,Star突破13k

  • 2021年8月,开源版面分析与表格识别算法。

文本检测识别效果:

这个最强OCR项目,值得拥有:

https://github.com/PaddlePaddle/PaddleOCR

相关学习

8月12日(周四)20:15-21:30百度高级研发工程师将带我们解读文档分析技术PP-Structure及PaddleOCR应用落地经验,欢迎大家踊跃报名直播课!

 

扫描二维码,加入交流群

点击阅读原文可直接报名


http://lihuaxi.xjx100.cn/news/257221.html

相关文章

【C#串口编程计划】C#串口协议解析 -- 文本数据

本文介绍了利用C#接收串口数据(文本)并进行分析的标准过程。

one pragmatical sqlhelper

namespace ConsoleApplication2 {using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Data.SqlClient;using System.Configuration;public class SqlHelper{/// <summary>/// 连接字符串/// </summa…

牛客网:为什么不能将实数作为 HashMap 的 key?

欢迎关注方志朋的博客&#xff0c;回复”666“获面试宝典1.起因让我关注到这一点的起因是一道题:牛客网上的max-points-on-a-line题目是这么描述的:Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.大意就是给我一些点的…

「摸鱼」神器来了,Python 实现人脸监测制作神器

作者 | 李秋键 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 最近都在讨论工作摸鱼&#xff0c;网易云音乐也出了合理摸鱼时间表&#xff0c;今天给大家推荐如何用python实现摸鱼~码住呦&#xff01; 引言&#xff1a;脸部表情是人类情绪的最直接外部表现之一和进…

冲上热搜!清华95后博士,搞科研演绎浪漫爱情故事获赞千万

点击上方“视学算法”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达本文系募格课堂整合&#xff0c;参考来源&#xff1a;清华大学、中国新闻周刊、辽沈晚报、微博从清华本科毕业到博士后&#xff0c;他可以是拿过奥赛金牌、做起实验训练有素…

【C#串口编程计划】通信协议解析 -- byte[]与常用类型的转换

刚刚完成一个串口通讯的系统。目前在把串口通信的代码整合到团队的类库中&#xff08;把串口通信与网口Soket通讯整合起来&#xff0c;后面只需要配置参数&#xff0c;就可实现网络与串口通讯的转换&#xff09;&#xff0c;故C#串口编程计划的最后一篇图文“C#通讯类库框架”还…

Applet相关知识

1、Applet定义 Applet是采用Java编程语言编写的小应用程序&#xff0c;该程序可以包含在 HTML&#xff08;标准通用标记语言的一个应用&#xff09;页中&#xff0c;与在页中包含图像的方式大致相同。含有Applet的网页的HTML文件代码中部带有<applet> 和</applet>这…

伤感的故事

人的生活本来就是哪么的平淡无味。如果是一对老人&#xff0c;我会认为这样的平淡是幸福的&#xff0c;因为他们两个人从年轻一起走到白发苍苍。如果是年轻人&#xff0c;哪么是可悲的。我记得有一个人给我讲了一个故事&#xff0c;故事的内容就是&#xff1a;“有一天一个老和…