国产开源PDF解析工具MinerU

前言
PDF的数据解析是一件较困难的事情,几乎所有商家都把PDF转WORD功能做成付费产品。
PDF是基于PostScript子集渲染的,PostScript是一门图灵完备的语言。而WORD需要的渲染,本质上是PDF能力的子集。大模型领域,我们的目标文件格式一般是markdown,markdown相较于WORD更加简单,是WORD的子集。
子集向父集转换是容易的,因为子集有的功能,父集都有。而父集向子集转换是困难的,因为父集的众多功能,子集并不具备。
通过元素映射的方式来实现PDF的解析,是不现实的。于是,上海人工智能实验室的研发人员提出利用多种深度学习算法,来直接分析和识别PDF上的文字、图片、公式、表格等,再反向合并成最终的markdown文件。
总的来说,PaddleOCR 负责文本的检测与识别,而 TableMaster 负责表格的结构解析和内容整合,二者结合实现了对文档图像中表格的全面识别和理解。
MinerU涉及的模型
| 模型名称 | 模型功能 | 模型详情 |
|---|---|---|
| LayoutLMv3 | 布局检测模型 | unilm/layoutlmv3 at master · microsoft/unilm (github.com) |
| UniMERNet | 公式识别模型 | opendatalab/UniMERNet: UniMERNet: A Universal Network for Real-World Mathematical Expression Recognition (github.com) |
| StructEqTable | 表格识别模型 | Alpha-Innovator/StructEqTable-Deploy: A High-efficiency Open-source Toolkit for Table-to-Latex Task (github.com) |
| YOLO | 公式检测模型 | ultralytics/ultralytics: Ultralytics YOLO11 🚀 (github.com) |
| PaddleOCR | OCR模型 | PaddlePaddle/PaddleOCR: Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices) (github.com) |
| DocLayout-YOLO | 布局检测模型 | opendatalab/DocLayout-YOLO: DocLayout-YOLO: Enhancing Document Layout Analysis through Diverse Synthetic Data and Global-to-Local Adaptive Perception (github.com) |
将DeepSeek V2论文输入到MinerU中,得到下列输出内容:
-
1.images目录
pdf中的图片![![[Pasted image 20250221095616.png]]](https://i-blog.csdnimg.cn/direct/2ed9a3f915bc44a48d26a191821c46dd.png)
-
2.DeepSeek-AI 等 - 2024 - DeepSeek-V2 A Strong, Economical, and Efficient M.md
最终输出的markdown文件![![[Pasted image 20250221100942.png]]](https://i-blog.csdnimg.cn/direct/dd6eeb2363664e8f95b30c226594cf3d.png)
-
3.DeepSeek-AI 等 - 2024 - DeepSeek-V2 A Strong, Economical, and Efficient M_content_list.json
未知 -
4.DeepSeek-AI 等 - 2024 - DeepSeek-V2 A Strong, Economical, and Efficient M_layout.pdf
版面分析结果![![[Pasted image 20250221095951.png]]](https://i-blog.csdnimg.cn/direct/ee2621d9fa124ca78fa69b094468b747.png)
-
5.DeepSeek-AI 等 - 2024 - DeepSeek-V2 A Strong, Economical, and Efficient M_middle.json
包含以下字段信息:
| 字段名 | 解释 |
|---|---|
| pdf_info | list,每个元素都是一个dict,这个dict是每一页pdf的解析结果,详见下表 |
| _parse_type | ocr | txt,用来标识本次解析的中间态使用的模式 |
| _version_name | string, 表示本次解析使用的 magic-pdf 的版本号 |
- 6.DeepSeek-AI 等 - 2024 - DeepSeek-V2 A Strong, Economical, and Efficient M_model.json
所有元素的检测框坐标
[{"layout_dets": [{"category_id": 1,"poly": [193,793,1462,793,1462,1354,193,1354],"score": 0.983},{"category_id": 0,"poly": [319,314,1340,314,1340,424,319,424],"score": 0.968},{"category_id": 3,"poly": [207,1410,1444,1410,1444,1976,207,1976],"score": 0.966},
-
7.DeepSeek-AI 等 - 2024 - DeepSeek-V2 A Strong, Economical, and Efficient M_origin.pdf
原始pdf文件 -
8.DeepSeek-AI 等 - 2024 - DeepSeek-V2 A Strong, Economical, and Efficient M_spans.pdf
不同元素的检测框可视化![![[Pasted image 20250221095844.png]]](https://i-blog.csdnimg.cn/direct/fac947f8c29544a082b70a33fa417211.png)
Miner功能
- 删除页眉、页脚、脚注、页码等元素,确保语义连贯
- 输出符合人类阅读顺序的文本,适用于单栏、多栏及复杂排版
- 保留原文档的结构,包括标题、段落、列表等
- 提取图像、图片描述、表格、表格标题及脚注
- 自动识别并转换文档中的公式为LaTeX格式
- 自动识别并转换文档中的表格为HTML格式
- 自动检测扫描版PDF和乱码PDF,并启用OCR功能
- OCR支持84种语言的检测与识别
- 支持多种输出格式,如多模态与NLP的Markdown、按阅读顺序排序的JSON、含有丰富信息的中间格式等
- 支持多种可视化结果,包括layout可视化、span可视化等,便于高效确认输出效果与质检
- 支持纯CPU环境运行,并支持 GPU(CUDA)/NPU(CANN)/MPS 加速
- 兼容Windows、Linux和Mac平台
Miner效果实测
最令人惊叹的是公式识别,例如输入pdf样式如下:
![![[Pasted image 20250221100703.png]]](https://i-blog.csdnimg.cn/direct/8b5012c155be471bbf78cca813d9c018.png)
输出markdown样式如下:
![![[Pasted image 20250221100901.png]]](https://i-blog.csdnimg.cn/direct/f9e0440f72804bec9731e7619c5f583b.png)
基本上没什么问题,但是小状况还是挺多的,例如将 R d h n h × d \mathbb{R}^{d_h n_h\times d} Rdhnh×d识别成了 R d h n h \ × d \mathbb{R}^{d_h n_h\backslash\ \times d} Rdhnh\ ×d
但是,表格的识别比较差,例如,输入pdf表格为:![![[Pasted image 20250221101330.png]]](https://i-blog.csdnimg.cn/direct/6d4d40cfc05d4a9d941a8c64f51f0921.png)
输出markdown样式为:
![![[Pasted image 20250221101250.png]]](https://i-blog.csdnimg.cn/direct/2cd5269668d24100a2e4e0db32c65236.png)
每一大类(English)中的所有行内容都混在一起了。
另外,对PDF中算法栏的识别也比较差
输入PDF:
![![[Pasted image 20250221101601.png]]](https://i-blog.csdnimg.cn/direct/7e8cf7d660164f929a423fccab4c5d85.png)
输出markdown:
![![[Pasted image 20250221101706.png]]](https://i-blog.csdnimg.cn/direct/270c5b20ce484b3f9c71633632dd8076.png)
缺少了算法栏的边框信息,以及一些符号也不太准确。
MinerU使用
MinerU支持如下三种部署方式:
- 在线体验
- CPU体验
- GPU体验
详见MinerU/README_zh-CN.md at master · opendatalab/MinerU (github.com)
总结
MinerU尽管在表单、算法栏识别效果一般,但已经是开源项目中效果最好的一档了。希望持续进步,继续为开源PDF解析社区做出贡献!!!
相关文章:
国产开源PDF解析工具MinerU
前言 PDF的数据解析是一件较困难的事情,几乎所有商家都把PDF转WORD功能做成付费产品。 PDF是基于PostScript子集渲染的,PostScript是一门图灵完备的语言。而WORD需要的渲染,本质上是PDF能力的子集。大模型领域,我们的目标文件格…...
消息中间件的开源实现
根据你的需求,以下是一些可以实现类似阿里巴巴 MetaQ 功能的消息中间件和相关项目,这些项目可以帮助你实现消息的动态配置和管理: 1. RocketMQ RocketMQ 是一个分布式消息中间件,支持高吞吐量、低延迟的消息传递,适合…...
AcWing 299 裁剪序列
这道题算是我做过所有的单调队列优化 d p dp dp 题目中最难想的一道题,所以写篇题解再捋捋思路。 暴力 首先很容易想到设 d p i dp_i dpi 表示将前 i i i 个数划分成若干序列,【每个序列的最大值之和】的最小值。 那么就会有: d p i …...
P2889 [USACO07NOV] Milking Time S
题目大意 有 N N N 个小时可以挤奶。其中有 m m m 个时间段可以给 Bessis 奶牛挤奶。第 i i i 个时间段为 s i s_i si ~ t i t_i ti,可以获得 E f f i Eff_i Effi 滴奶。每次挤完奶后,人都要休息 R R R 小时。最后问,一共能挤出…...
基于Spring Boot的健康医院门诊在线挂号系统设与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
PyTorch-基础(CUDA、Dataset、transforms、卷积神经网络、VGG16)
PyTorch-基础 环境准备 CUDA Toolkit安装(核显跳过此步骤) CUDA Toolkit是NVIDIA的开发工具,里面提供了各种工具、如编译器、调试器和库 首先通过NVIDIA控制面板查看本机显卡驱动对应的CUDA版本,如何去下载对应版本的Toolkit工…...
复现论文:DPStyler: Dynamic PromptStyler for Source-Free Domain Generalization
论文:[2403.16697] DPStyler: Dynamic PromptStyler for Source-Free Domain Generalization github: TYLfromSEU/DPStyler: DPStyler: Dynamic PromptStyler for Source-Free Domain Generalization 论文: 这篇论文还是在PromptStyler:Prompt-driven Style Gener…...
6.将cr打包成网络服务|使用postman进行测试|编写oj_server的服务路由功能(C++)
将cr打包成网络服务 compile_server.cc #include "compile_run.hpp" #include "../comm/httplib.h"using namespace ns_compile_and_run; using namespace httplib;//编译服务随时可能被多个人请求,必须保证传递上来的code,形成源…...
基于SpringBoot + Vue的共享汽车(单车)管理系统设计与实现+毕业论文+开题报告+指导搭建视频
本系统包含管理员、用户两个角色。 管理员角色:个人中心管理、用户管理、投放地区管理、汽车信息管理、汽车投放管理、汽车入库管理、使用订单管理、汽车归还管理。 用户角色:注册登录、汽车使用下单、汽车归还。 本共享汽车管理系统有管理员和用户。管…...
Day54(补)【AI思考】-SOA,Web服务以及无状态分步解析与示例说明
文章目录 **SOA,Web服务以及无状态**分步解析与示例说明**分步解析与示例说明****1. 核心概念解析****2. 为什么说SOA与Web服务是“正交的”?****3. 架构风格 vs. 实现技术****4. 接口(Interface)的核心作用****5. Web服务的“被认…...
回溯算法之组合和排列问题
文章目录 1.什么是回溯算法2.回溯算法解题步骤3.回溯算法解决组合问题4.回溯算法解决排列问题 1.什么是回溯算法 回溯算法是一种通过尝试所有可能的解决方案来解决问题的算法策略,它通常用于求解组合优化、排列组合、路径搜索等类型的问题,是一种暴力求解的算法。 2…...
gihub上适合练手的Python项目
GitHub 上有许多适合练手的 Python 项目,涵盖了从初学者到中级开发者的不同难度级别。以下是一些推荐的项目类型和具体示例,帮助你提升 Python 编程技能: 1. 基础项目 适合初学者,帮助掌握 Python 基础语法和常用库。 示例项目&…...
解锁CSnakes:.NET与Python的融合魔法
一、引言 在软件开发的广袤领域中,我们常常面临各种复杂的业务需求和技术挑战。不同的编程语言犹如各具特色的工具,它们在不同的场景下展现出独特的优势。例如,C# 以其强大的类型系统和丰富的类库,在企业级应用开发中占据重要地位…...
Python常见面试题的详解16
1. 如何强行关闭客户端和服务器之间的连接? 在网络编程中,有时需要强行中断客户端和服务器之间的连接。对于基于 TCP 协议的连接,由于其面向连接的特性,需要采取特定的步骤来确保连接被正确关闭;而 UDP 是无连接协议&a…...
建筑兔零基础自学python记录29|实战词云可视化项目——分人物阵营词云(上)7
我们在上次情感分析的基础上,不分积极消极,按文本中人物的阵营分为3队。可以猜想按照积极消极分类是有现成的feeling可以分析,但人物阵营却是没有现成资料,需要额外给出信息的。 图1 图2 上面两图的文字大小和数量有区别…...
Vi 编辑器基本使用指南
一、Vi 编辑器的启动与退出 启动 Vi 编辑器 在终端中,输入vi加上要编辑的文件名,如vi example.txt,如果example.txt存在,Vi 编辑器会打开该文件;若不存在,则会创建一个新的空文件并打开。如果只输入vi&am…...
22、《Spring Boot消息队列:RabbitMQ延迟队列与死信队列深度解析》
Spring Boot消息队列实战:RabbitMQ延迟队列与死信队列深度解析 引言 在现代分布式系统中,消息队列承担着解耦、削峰填谷和异步通信的重要职责。本文将深入探讨Spring Boot与RabbitMQ的整合应用,重点解析延迟队列与死信队列的实现原理及实战…...
linux 命令+相关配置记录(持续更新...)
linux 命令记录相关配置记录 磁盘切换 cd D:#这里表示切换到D盘查看wsl 安装的linux 子系统 wsl --list -vwsl 卸载 linux 子系统 wsl --unregister -xxx # xxx 表示子系统的名字备份Linux 子系统 导出 wsl --export xxx yyy # xxx 表示子系统的名字 yyy 表示压…...
ssh工具
文章目录 ssh简介ssh远程连接Linux下使用SSH安装安装ssh服务端安装ssh客户端 命令启动重启查看ssh的状态 ssh 配置文件ssh连接地址 配置文件基本配置注意通配符心跳和密钥ssh的Include跳板 ProxyJump内网穿透 Windows下使用SSH安装ssh 配置文件ssh连接地址 配置文件 ssh简介 s…...
LLM大语言模型私有化部署-使用Dify的工作流编排打造专属AI诗词数据分析师
背景 前面的文章通过 Ollama 私有化部署了 Qwen2.5 (7B) 模型,然后使用 Docker Compose 一键部署了 Dify 社区版平台。 LLM大语言模型私有化部署-使用Dify与Qwen2.5打造专属知识库:在 Dify 平台上,通过普通编排的方式,创建了基于…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
