大模型(LLMs)RAG 版面分析——表格识别方法篇

大模型(LLMs)RAG 版面分析——表格识别方法篇

一、为什么需要识别表格?

表格的尺寸、类型和样式展现出多样化的特征,如背景填充的差异性、行列合并方法的多样性以及内容文本类型的不一致性等。同时,现有的文档资料不仅涵盖了现代电子文档,也包括历史的手写扫描文档,这些文档在样式设计、光照条件以及纹理特性等方面存在显著差异。因此,表格识别一直是文档识别领域的重大挑战。下图所示为一个示例:
在这里插入图片描述

注:左上:有颜色背景的全线表,右上:少线表,左中:无线表,左下:有复杂表格线条样式的表格,右下:拍照得到的手写历史文档。

二、介绍一下 表格识别 任务?

表格识别包括表格检测和表格结构识别两个子任务。表格识别过程可细分为两个关键步骤:

  • 表格定位(Table Localization):此阶段涉及识别并划定表格的整体边界,采用的技术手段包括但不限于目标检测算法,如YOLO、Faster RCNN或Mask RCNN,甚至有时借助生成对抗网络(GAN)来精确勾勒出表格的外在轮廓。

表格元素解析与结构重建(Table Element Parsing and Structure Reconstruction):

  • 表格单元格划分(Cell Detection):这一子任务着重于识别和区分表格内部的各个单元格,不论它们是由连续线条完全包围还是部分包围,抑或是无明显线条分隔。

  • 表格结构理解(Table Structure Understanding):在此环节中,系统深入分析表格区域以提取其中的数据内容及其内在逻辑关系,明确行与列的分布规律以及单元格之间的层次关联,最终实现对表格原始结构的高度准确复原。

三、有哪些 表格识别方法?

传统方法

利用规则指导和图像处理技术,执行如下步骤以识别结构:

  1. 应用腐蚀与膨胀算法来细化和增强目标区域边界特征。
  2. 通过分析像素连通性,确定并标记图像中的各个显著区域。
  3. 实施线段检测和直线拟合技术,精确描绘出图像内的线性结构元素。
  4. 计算这些线性结构之间的交点,以此构建可能的边框或连接关系网络。
  5. 合并初步检测到的边界框(猜测框),运用智能合并策略减少冗余并提高精度。
  6. 根据尺寸筛选优化,剔除不符合预期大小条件的候选区域,从而获得更为准确的目标识别结果。

pdfplumber表格抽取

参考:https://github.com/jsvine/pdfplumber#extracting-tables

pdfplumber 如何进行 表格抽取?
  1. 因为表格及单元格都是存在边界的(由可见或不可见的线表示),所以第一步,pdfplumber是找到可见的或猜测出不可见的候选表格线。
  2. 因为表格以及单元格基本上都是定义在一块矩形区域内,所以第二步,pdfplumber是根据候选的表格线确定它们的交点。根据得到的交点,找到它们围成的最小的单元格。把连通的单元格整合到一起,生成一个检测出的表格对象。
pdfplumber 常见的表格抽取模式?
  • lattice抽取线框类的表格

    1. 把pdf页面转换成图像
    2. 通过图像处理的方式,从页面中检测出水平方向和竖直方向可能用于构成表格的直线。
    3. 根据检测出的直线,生成可能表格的bounding box
    4. 确定表格各行、列的区域
    5. 根据各行、列的区域,水平、竖直方向的表格线以及页面文本内容,解析出表格结构,填充单元格内容,最终形成表格对象。
  • stream抽取非线框类的表格
    6. 通过pdfminer获取连续字符串(串行)
    7. 通过文本对齐的方式确定可能表格的bounding box(文本块)
    8. 确定表格各行、列的区域
    9. 根据各行、列的区域以及页面上的文本字符串,解析表格结构,填充单元格内容,最终形成表格对象。

深度学习方法-语义分割

table-ocr/table-detect:票据图片复杂表格框识别(票据单元格切割)
  1. table-ocr

    • 思路:运用unet实现对文档表格的自动检测,表格重建
    • 链接:https://github.com/chineseocr/table-ocr
  2. table-detect

    • 思路:table detect(yolo) , table line(unet) (表格检测/表格单元格定位)
    • 链接:https://github.com/chineseocr/table-detect
腾讯表格图像识别
  • 链接:https://github.com/tommyMessi/tableImageParser_tx
  • 思路:图像分割,分割类别是4类:横向的线,竖向的线,横向的不可见线,竖向的不可见线,类间并不互斥,也就是每个像素可能同时属于多种类别,这是因为线和线之间有交点,交点处的像素是同属多条线的。
  • 模型:对比DeepLab系列,fcn,Unet,SegNet等,收敛最快的是Unet。
  • 已测试,效果惨不忍睹
TableNet
  • 论文:《TableNet: Deep Learning Model for End-to-end Table Detection and Tabular Data Extraction from Scanned Document Images》
  • 论文链接:https://www.researchgate.net/publication/337242893_TableNet_Deep_Learning_Model_for_End-to-end_Table_Detection_and_Tabular_Data_Extraction_from_Scanned_Document_Images
  • 简介:TableNet 是一个现代深度学习架构,由 TCS 研究年的团队在 2019 年提出。主要动机是通过手机或相机从扫描的表格中提取信息。他们提出了一个解决方案,其中包括准确检测图像中的表格区域,然后检测和提取检测到表的行和列中的信息。
  • 数据集:使用的数据集是马莫特。它有2000页PDF格式,这是收集与相应的地面真相。这还包括中文页面。
  • 架构:该体系结构基于 Long 等人,这是用于语义分段的编码器解码器模型。相同的编码器/解码器网络用作用于表提取的 FCN 体系结构。使用 Tesseract OCR 对图像进行预处理和修改。
  • 输出:使用模型处理文档后,将生成表和列的掩码。这些蒙版用于从图像中筛选出表及其列区域。现在使用 Tesseract OCR,从分段区域中提取信息。
  • 效果:他们还提出了与ICDAR进行微调的相同型号,其性能优于原始型号。微调车型的召回、精度和 F1 得分分别是 0.9628、0.9697 和 0.9662。原始模型的记录指标为 0.9621、0.9547、0.9583。
CascadeTabNet
  • 开源代码:
    • 开源代码(star:650):https://github.com/DevashishPrasad/CascadeTabNet
    • 开源代码(star:1):https://github.com/virtualsocie
  • 介绍:一种基于端到端深度学习的方法,它使用级联掩码R-CNN HRNet模型来进行表检测和结构识别。其优点:
    1. 提出了级联网络:一种基于级联掩膜区域的CNN高分辨率网络(Cascade mask R-CNN HRNet)模型检查表的区域,同时从检测的表中识别结构体信息
    2. 端到端解决表格检测和表格识别两个子任务
    3. 用实例分割解决表检测,提高精度
    4. 展示了一种有效的基于迭代迁移学习的方法,可以帮助模型使用少量的训练数据在不同类型的数据集上运行良好
SPLERGE
  • 论文名称:Deep Splitting and Merging for Table Structure Decomposition
  • 论文地址:https://ieeexplore.ieee.org/document/8977975
  • 论文代码:https://github.com/CharlesWu123/SPLERGE
  • 思想:一种先自顶向下、再自底向上的两阶段表格结构识别方法SPLERGE,分为Split和Merge两个部分。Split部分先把整个表格区域分割成表格所具有的网格状结构,该部分由图11所示的深度学习模块组成两个独立的模型,分别预测表格区域的行分割和列分割情况。最终,模型预测每一行或列像素是否属于单元格间的分隔符区域。而Merge部分则是对Split的结果中的每对邻接网格对进行预测,判断它们是否应该合并。
DeepDeSRT
  • 论文名称:DeepDeSRT:Deep Learning for Detection and Structure Recognition of Tables in Document Images
  • 论文地址:https://www.dfki.de/fileadmin/user_upload/import/9672_PID4966073.pdf
  • 论文代码:https://github.com/CharlesWu123/SPLERGE
  • 思路:DeepDeSRT 是一个神经网络框架,用于检测和理解文档或图像中的表。它有两个解决方案,如标题中提及:
    1. 它提供了一个基于学习的深度解决方案,用于文档图像中的表检测。
    2. 它提出了一种基于深度学习的表结构识别方法,即识别检测到的表中的行、列和单元格位置。
  • 数据集:使用的数据集是 ICDAR 2013 表竞争数据集,包含 67 个文档,总页数为 238 页。
  • 结构:
    3. 表格检测:建议的模型使用快速 RCNN 作为检测表的基本框架。该体系结构分为两个不同的部分。在第一部分中,他们根据所谓的区域建议网络 (RPN) 的输入图像生成区域建议。第二部分,他们使用快速RCNN对区域进行分类。为了支持此体系结构,他们使用了ZFNet和 VGG- 16 的权重。
    4. 结构识别:成功检测到表并了解其位置后,了解其内容的下一个挑战是识别和定位构成表物理结构的行和列。因此,他们使用完全连接的网络与 VGG-16 的权重,从行和列中提取信息。

总结

本文介绍了大模型(LLMs)RAG 版面分析中的表格识别方法。首先,阐述了表格识别的重要性及其面临的挑战。接着,详细介绍了表格识别任务的两个子任务:表格检测和表格结构识别。随后,列举了多种表格识别方法,包括传统方法、pdfplumber表格抽取、以及多种深度学习方法如TableNet、CascadeTabNet、SPLERGE和DeepDeSRT。每种方法都有其独特的思路和实现方式,展示了表格识别领域的多样性和复杂性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣(leetcode)题目总结——辅助栈篇

leetcode 经典题分类 链表数组字符串哈希表二分法双指针滑动窗口递归/回溯动态规划二叉树辅助栈 本系列专栏:点击进入 leetcode题目分类 关注走一波 前言:本系列文章初衷是为了按类别整理出力扣(leetcode)最经典题目&#xff0c…

【Elasticsearch】01-ES安装

1. 安装 安装elasticsearch。 docker run -d \--name es \-e "ES_JAVA_OPTS-Xms512m -Xmx512m" \-e "discovery.typesingle-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/usr/share/elasticsearch/plugins \--privileged \--networ…

【python系列】python数据类型的分类和比较

一、数据类型的定义 在程序设计的类型系统中,数据类型(英语:Data type),又称资料型态、资料型别,是用来约束数据的解释。——Wikipedia 从定义我们可以看出来,数字类型的理解最主要的是约束数据的解释,每个类型都有他们自己所使用得场景,这个就是数字类型的分类,分类…

自我通信11

?ueCpG>5P%o_ 1. 环境安装好vmware ,里面装个linux系统,比如ubuntu 2. 虚拟机里面安装qemu sudo apt update sudo apt install qemu qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager 3. 虚拟机里面git下载Xv6 git c…

【JavaSE】【多线程】阻塞队列

目录 一、阻塞队列1.1 生产者消费者模型1.2 Java提供的阻塞队列1.3 实现一个简单生产者消费者模型 二、自己实现阻塞队列2.1 成员变量2.2 构造方法2.3 put方法2.4 take方法2.5 最终代码 一、阻塞队列 阻塞队列:是一种特殊的队列,也有先进先出的特性。它…

【pytest】pytest注解使用指南

前言:在 pytest 测试框架中,注解(通常称为装饰器)用于为测试函数、类或方法提供额外的信息或元数据。这些装饰器可以影响测试的执行方式、报告方式以及测试的组织结构。pytest 提供了多种内置的装饰器,以及通过插件扩展…

Spark RDD 的 combineByKey、cogroup 和 compute 算子的作用

在面试中如果被问到 Spark RDD 的 combineByKey、cogroup 和 compute 算子的作用,建议从核心作用、实现原理(源码解析) 和 实际应用场景三方面组织答案。 1. combineByKey 核心作用 combineByKey 是一个通用的聚合算子,用于对 K…

el-table合并单元格之后,再进行隔行换色的且覆盖表格行鼠标移入的背景色的实现

el-table 中有现成的隔行换色功能,只要增加 stripe 属性即可。但是如果有单元格合并的话,这个属性就不可用了。这时候我们就需要动点小心思了。 基于相同字段进行合并 单元格合并:基于表头中的某一列,具有相同值的个数相加进行合…

OpenAI模型whisper 音频转文本

最近有一个音频转文本的需求,了解到了OpenAI的whisper模型可以实现。 Whisper 是 OpenAI 提供的一个通用语音识别模型,支持多语言的音频转文本功能,并具有较高的准确性。它的主要用途包括自动语音识别 (ASR)、语言翻译(将音频直接…

微信小程序样式

一、尺寸单位rpx rpx是小程序新增加的自适应单位,可以根据不同设备的屏幕宽度进行自适应缩放。 小程序规定任何型号手机屏幕宽度都是750rpx。 提示:微信小程序的设计稿宽度建议是750px,这样就节省单位换算了。 二、全局样式和局部样式 1、…

Vue Router两种路由实现方式异同点总结

Vue.js 中的路由主要通过 Vue Router 实现,它支持多种路由模式,其中最常用的两种是 hash 模式和 history 模式。这两种模式在 URL 结构、工作原理以及对服务器配置的要求上有所不同。 1.Hash 模式(默认模式) ‌URL 结构‌&#…

Guava Cache

Guava Cache 单应用、本地缓存依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.1-jre</version> </dependency>示例 import com.google.common.cache.*;import java.util.…

ubuntu下连接了192.168.1.x和192.168.2.x两个网络段,如何让这个两个网段互相通信?

在 Ubuntu 上连接两个网络段&#xff08;如 个人终端A 192.168.1.10 和 个人终端B 192.168.2.10&#xff09;&#xff0c;需要配置路由和网络转发功能&#xff0c;使这两个网段能够相互通信。以下是实现方法&#xff1a; 步骤 1&#xff1a;确认网络配置 1. 确保 Ubuntu 机器…

汽车资讯新高度:Spring Boot技术飞跃

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

Go LCL、Go CEF 与 Go WV:打造跨平台桌面应用的利器

大家好&#xff0c;我是YC&#xff0c;在这里给大家分享Go LCL、Go CEF 与 Go WV&#xff1a;打造跨平台桌面应用的利器 如对此系统感兴许或需要源码&#xff0c;欢迎私信or留言&#xff01; Go LCL&#xff1a;原生控件的跨平台之旅 开源地址: https://github.com/energye/…

03-axios常用的请求方法、axios错误处理

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

子集选择——基于R语言实现(最优子集选择法、逐步回归法、Lasso回归法、交叉验证法)

( a )使用 rnorm() 函数生成预测变量X(n=100)与噪声向量 ϵ \epsilon ϵ(n=100) set.seed(1) x<-rnorm(100)#预测变量X eps<-rnorm(100)#噪声向量$\epsilon$( b ) 生成响应变量Y(n=100),

机器学习基础04_朴素贝叶斯分类决策树分类

目录 一、朴素贝叶斯分类理论 1、贝叶斯分类理论 2、条件概率 3、全概率公式 4、贝叶斯推断 5、朴素贝叶斯推断 6、拉普拉斯平滑系数 二、决策树分类 1、相关概念 2、基于信息增益决策树的建立 3、基于基尼指数决策树的建立 一、朴素贝叶斯分类理论 1、贝叶斯分类理…

git日志查询和导出

背景 查看git的提交记录并下载 操作 1、找到你idea代码的路径&#xff0c;然后 git bash here打开窗口 2、下载所有的日志记录 git log > commit.log3、下载特定日期范围内记录 git log --since"2024-09-01" --until"2024-11-18" 你的分支 > c…

Qt 和 WPF(Windows Presentation Foundation)

Qt 和 WPF(Windows Presentation Foundation)都是用于构建桌面应用程序图形用户界面的框架,它们在很多方面有相似之处,但也存在一些关键的差异。下面是它们的主要相同点和区别点。 相同点: 用于构建桌面应用程序: Qt 和 WPF 都主要用于构建具有丰富用户界面(GUI)的桌面…