PDF 中图表的解析探究
PDF 中图表的解析探究
- 0. 引言
- 1. 开源方案探究
0. 引言
一直以来,对文档中的图片和表格处理都非常有挑战性。这篇文章记录一下最近工作上在这块的探究。图表分为图片和表格,这篇文章主要记录了对表格的探究。还有,我个人主要做日本项目,探究时主要是以日语为主。
1. 开源方案探究
RAGFlow出品的Deepdoc
面向中文,有一个开源方案非常不错,RAGFlow出品的Deepdoc,它的项目中有多个对不同文档的多个文档解析器,其中就有面向pdf的pdf_parser。
测试了一下日文的识别能力,结果并不理想,也解析了一部分代码,代码中有很多处理都是面向中文的。
所以,RAGFlow出品的Deepdoc并不适合日文的处理。
LangChain出品的PyMuPDFLoader
简单来说,就是读取文档中文字,无法保留文章中表格的信息。
NVIDIA出品的multimodal
没有key,测试不了。简单解析了下架构和代码,还是有很多参考性的。
unstructured项目
这个项目很有意思,使用partition函数,可以自动解释很多格式的文档,也包括pdf。
解析了部分代码后,发现这个项目有对pdf文章中表格的处理,也可以把pdf中表格数据转换成markdown和html,效果上也达到60-70分左右。
gptpdf项目
这个项目是将pdf文档的每一页都存成一张图片,并且通过画红框,将不同的区域区分出来,然后让多模态模型进行解析,表格时,返回markdown格式。
如果使用gpt-4o或者claude的话,效果很不错,即使token消耗比较大。
使用多模态模型处理这种表格数据,对token的消耗非常大。
综上所述,现在还没有完美方案,接下来,就尝试自己做一套吧。
自己做时,发现有很多细节需要考虑,
- 如果表格跨页了怎么处理
- 跨页后的表格是否有表头
- 跨页后的表格是否和上一页是同一行
- 等等
把基础的功能实现后,先试着突破了一下跨页问题,大部分问题已经基本解决。截图如下,
先写到这吧,后续继续探索。
Reference & Thanks:
- https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/
- https://github.com/infiniflow/ragflow/blob/main/deepdoc/README.md
- https://github.com/Unstructured-IO/unstructured
- https://github.com/CosmosShadow/gptpdf
- https://github.com/NVIDIA/GenerativeAIExamples/tree/main/experimental/multimodal_assistant
相关文章:

PDF 中图表的解析探究
PDF 中图表的解析探究 0. 引言1. 开源方案探究 0. 引言 一直以来,对文档中的图片和表格处理都非常有挑战性。这篇文章记录一下最近工作上在这块的探究。图表分为图片和表格,这篇文章主要记录了对表格的探究。还有,我个人主要做日本项目&…...
递推(C语言)
文章目录 1.斐波那契数列2.太波那契数列3.二维递推问题4.实战4.1 力扣509 斐波那契数4.2 力扣70 爬楼梯4.3 力扣119 杨辉三角|| 递推最通俗的理解就是数列,递推和数列的关系就好比 算法 和 数据结构 的关系,数列有点 像数据结构中的线性表(可以是顺序表&…...

安卓微信8.0之后如何利用缓存找回的三天之前不可见的朋友圈图片
安卓微信8.0之后如何利用缓存找回的三天之前不可见的朋友圈图片 复习了下安卓程序的知识,我们会了解到,安卓程序清楚数据的时候有两个选项 一个是清除全部数据一个是清除缓存。 清除全部数据表示清除应用数据缓存。 对于安卓微信8.0之后而言࿰…...
ES6 Class(类) 总结(九)
ES6 中的 class 是一种面向对象编程的语法糖,提供了一种简洁的方式来定义对象的结构和行为。 JavaScript 语言中,生成实例对象的传统方法是通过构造函数。下面是一个例子。 function Point(x, y) {this.x x;this.y y; } Point.prototype.toString fu…...
使用 Vue.js 和 Element Plus 实现自动完成搜索功能
使用 Vue.js 和 Element Plus 实现自动完成搜索功能 一、前言1.环境准备2.组件配置3.后端数据请求4.样式5.总结 一、前言 在前端开发中,实现自动完成(autocomplete)功能可以极大地提升用户体验,特别是在需要用户输入和选择内容的…...

SpringBoot自定义starter
SpringBoot自定义starter 1、SpringBoot之starter机制 1.1、什么是自定义starter SpringBoot中的starter是一种非常重要的机制(自动化配置),能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖&#…...

深入探索大语言模型
深入探索大语言模型 引言 大语言模型(LLM)是现代人工智能领域中最为重要的突破之一。这些模型在自然语言处理(NLP)任务中展示了惊人的能力,从文本生成到问答系统,无所不包。本文将从多个角度全面介绍大语…...
querylist多线程采集curlMulti时,报错Curl error(60)
前言 在使用querylist多线程采集的时候,报错: Curl error(60)。测试了下用http时没有问题,https时有问题。其原因在于多线程采集库引用的另一个库有问题。需要手动更改。 解决 找到:vendor/ares333/php-curl/src/Curl.php 文件,…...
Python数据分析~~美食排行榜
目录 1.模块的导入和路径的选择 2.访问前面五行数据 3.按照条件进行筛选 4.获取店铺评分里面的最高分 5.打印对应的店铺的名字 1.模块的导入和路径的选择 # 导入pandas模块,简称为pd import pandas as pd # 使用read_csv()函数 # TODO 读取路径"/Users/fe…...
Linux下解压.tar.gz文件
.tar.gz 是一种常用的压缩包格式,尤其在Unix、Linux以及macOS系统中非常普遍。这个格式结合了两种不同的功能: Tar (.tar): “Tar” 是“Tape Archive”的缩写,最初是为了将数据备份到磁带上而设计的。Tar命令可以将多个文件和目录打包成一个…...

【电商选品干货】差异化卖点要这样打造,80%商家却做不到
今天就给大家说说,如何去挖掘产品的差异化卖点?我们要找差异化卖点,就是因为我们的产品转化率不足,通常有下面几点原因: 1、产品差异化卖点不足,商家占比30% 2、流量和产品卖点不匹配,商家占比…...

LabVIEW比例压力控制阀自动测试系统
开发了一套基于LabVIEW编程和PLC控制的比例控制阀自动测试系统。该系统能够实现共轨管稳定的超高压供给,自动完成比例压力控制阀的耐久测试、流量滞环测试及压力-流量测试。该系统操作简便,具有高精度和高可靠性,完全满足企业对自动化测试的需…...

运营商认证API在Java、Python、PHP中的使用教程
随着数字化浪潮的推进,实名认证已深入我们生活的方方面面,从线上购物到电子资金转移,手机号已成为注册账号的主要凭证。然而,这也带来了身份验证的难题和手机号被盗用注册账号的风险。在信息爆炸的时代背景下,确保每个…...
用虚拟机,可以在x86的电脑上虚拟出arm的电脑吗
1.用虚拟机,可以在x86的电脑上虚拟出arm的电脑吗 是的,可以在x86的电脑上使用虚拟机技术虚拟出ARM架构的电脑。以下是通过虚拟机实现x86电脑上虚拟ARM电脑的几个关键步骤: 选择合适的虚拟化软件:通常,你可以使用如QE…...
富格林:可信观念摆脱暗箱陷阱
富格林指出,投资者产生的暗箱亏损多半是由于被不可信观念的迷惑影响,以为真的可以毫不费力就能赚钱,最后发现连交易的本金都打水漂了。事实上,投资市场并不像大家想得那么简单。要想安全实现交易成功,避免暗箱陷阱&…...

WEB前端01-HTML5基础(01)
一.WEB相关概念 软件架构 C/S: Client/Server (客户端/服务器端):在用户本地有一个客户端程序,在远程有一个服务器端程序 优点:用户体验好 缺点:开发、安装,部署,维护麻烦 B/S: Br…...

JUC-常见方法与线程的状态
常见方法 start()与run() 主线程直接调用某个线程t1的run()方法,run方法也会执行,但是并不会启动新的线程,而是有主线程调用的run方法,必须使用start才能启动新线程,但是start只能调用一次。 sleep()与yield() sle…...

如果你酿的酒是黄色,说明肯定是 “糊锅”了。
刚刚酿出的酒一般都是清澈见底的,如果你酿的酒是黄色,说明肯定是 “糊锅”了。这样的酒不仅颜色是黄的,而且还能闻到一股特别浓厚的 焦糊味。 这样的酒,米酒小哥是非常非常熟悉的,因为刚开始学习酿酒的那段时 间&#…...

国漫推荐07
玄幻、奇幻 1.侠岚系列 《侠岚》(第1至6季) 《画江湖之侠岚》(侠岚第7季) 2.《斗破苍穹》 三十年河东,三十年河西,莫欺少年穷! 3.《武动乾坤》(第1至4季) 4.《妖神记》…...
力扣刷题35.搜索查找位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2示例 2: 输入:…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...