PDF-Extract-Kit (PDF内容抽取开源项目)

Github 地址:https://github.com/opendatalab/PDF-Extract-Kit


整体介绍

PDF文档中包含大量知识信息,例如文本、表格、图像、公式等。此外,PDF的文档布局也相当复杂,页眉、页脚、表格标题、图片标题等等,提取高质量的PDF内容并非易事。将PDF内容提取工作进行拆解:

  • 布局检测:使用LayoutLMv3模型进行区域检测,如图像表格,标题,文本等;
  • 公式检测:使用YOLOv8进行公式检测,包含行内公式行间公式
  • 公式识别:使用UniMERNet进行公式识别
  • 光学字符识别:使用PaddleOCR进行文本识别

注意: 由于文档类型的多样性,现有开源的布局检测公式检测很难处理多样性的PDF文档,为此内容采集多样性数据进行标注和训练,使得在各类文档上取得精准的检测效果,细节参考布局检测和公式检测部分。
对于公式识别,UniMERNet方法可以媲美商业软件,在各种类型公式识别上均匀很高的质量。
对于OCR,我们采用PaddleOCR,对中英文OCR效果不错。

PDF内容提取框架如下图所示

在这里插入图片描述

PDF-Extract-Kit输出格式

{"layout_dets": [    # 页中的元素{"category_id": 0, # 类别编号, 0~9,13~15"poly": [136.0, # 坐标为图片坐标,需要转换回pdf坐标, 顺序是 左上-右上-右下-左下的x,y坐标781.0,340.0,781.0,340.0,806.0,136.0,806.0],"score": 0.69,   # 置信度"latex": ''      # 公式识别的结果,只有13,14有内容,其他为空,另外15是ocr的结果,这个key会换成text},...],"page_info": {         # 页信息:提取bbox时的分辨率大小,如果有缩放可以基于该信息进行对齐"page_no": 0,      # 页数"height": 1684,    # 页高"width": 1200      # 页宽}
}

其中category_id(类别)包含的类型如下:

{0: 'title',              # 标题1: 'plain text',         # 文本2: 'abandon',            # 包括页眉页脚页码和页面注释3: 'figure',             # 图片4: 'figure_caption',     # 图片描述5: 'table',              # 表格6: 'table_caption',      # 表格描述7: 'table_footnote',     # 表格注释8: 'isolate_formula',    # 行间公式(这个是layout的行间公式,优先级低于14)9: 'formula_caption',    # 行间公式的标号13: 'inline_formula',    # 行内公式14: 'isolated_formula',  # 行间公式15: 'ocr_text'}              # ocr识别结果

效果展示

结合多样性PDF文档标注,训练了鲁棒的布局检测公式检测模型。在论文、教材、研报、财报等多样性的PDF文档上,pipeline都能得到准确的提取结果,对于扫描模糊、水印等情况也有较高鲁棒性。
请添加图片描述

使用教程

环境安装 (Linux)

conda create -n pipeline python=3.10pip install -r requirements.txtpip install --extra-index-url https://miropsota.github.io/torch_packages_builder detectron2==0.6+pt2.3.1cu121

安装完环境后,可能会遇到一些版本冲突导致版本变更,如果遇到了版本相关的报错,可以尝试下面的命令重新安装指定版本的库。

pip install pillow==8.4.0

除了版本冲突外,可能还会遇到torch无法调用的错误,可以先把下面的库卸载,然后重新安装cuda12和cudnn。

pip uninstall nvidia-cusparse-cu12

运行提取脚本

python pdf_extract.py --pdf data/pdfs/ocr_1.pdf

参数解释:

  • pdf :待处理的pdf文件,如果传入一个文件夹,则会处理文件夹下的所有pdf文件。
  • output: 处理结果保存的路径,默认是"output"
  • vis: 是否对结果可视化,是则会把检测的结果可视化出来,主要是检测框和类别
  • render: 是否把识别得的结果渲染出来,包括公式的latex代码,以及普通文本,都会渲染出来放在检测框中。注意:此过程非常耗时,另外也需要提前安装xelateximagemagic

本项目专注使用模型对多样性文档进行高质量内容提取,不涉及提取后内容拼接成新文档,如PDF转Markdown。如果有此类需求,请参考另一个Github项目: MinerU


在Windows上运行 : 在Windows环境下使用PDF-Extract-Kit

在macOS上运行: 在macOS系统使用PDF-Extract-Kit

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

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

相关文章

C++:聚合类、嵌套类、局部类、union类详细介绍与分析

聚合类 (1)What(什么是聚合类) 本质是一个自定义类型的数据结构(结构体或类),但聚合类有以下特性: 所有的成员都是public没有任何构造函数没有基类类内部没有初始值 (2)Why(聚合类的作用&…

ES6 正则的扩展(十九)

1. 正则表达式字面量改进 特性:在 ES6 中,正则表达式字面量允许在字符串中使用斜杠(/)作为分隔符。 用法:简化正则表达式的书写。 const regex1 /foo/; const regex2 /foo/g; // 全局搜索2. u 修饰符(U…

python调用chrome浏览器自动化如何选择元素

功能描述:在对话框输入文字,并发送。 注意: # 定位到多行文本输入框并输入内容。在selenium 4版本中,元素定位需要填写父元素和子元素名。 textarea driver.find_element(By.CSS_SELECTOR,textarea.el-textarea__inner) from …

前端出发能走多远——从一个网络请求开始

当通过浏览器输入一个网址时,浏览器经历了一些列的过程,最终将网页展示给用户。这个过程是如何进行的呢?我们可以通过一个简单的例子来了解这个过程。 假设我们输入了一个网址 https://www.example.com,我们可以通过浏览器的开发…

2024.04最新 鹦鹉优化算法 (PO) 开源MATLAB代码

!!!只需要代码的直接跳转到最后一节,有开源代码 1.算法简介2.灵感来源与核心思想2.1 灵感来源2.2 核心思想 3.主要步骤3.1 种群初始化3.2 觅食行为3.3 停留行为3.4 交流行为3.5 对陌生人的恐惧行为 4.伪代码与核心代码4.1流程图与伪代码流程图伪代码 4.2 核心代码(P…

nodejs下载+react安装

一、nodejs安装 1、nodejs下载 具体安装可参考连接:2023最新版Node.js下载安装及环境配置教程(非常详细)从零基础入门到精通,看完这一篇就够了_nodejs安装及环境配置-CSDN博客 下载地址:Node.js — 下载 Node.js 测…

ubuntu 更新源

前言 实现一键替换在线源 一键更新源 ubuntu 全球镜像站以下支持现有ubuntu 20&#xff0c;22&#xff0c;24 echo "Delete the default source" rm -rf /etc/apt/sources.listecho "Build a new source" cat <<EOF>>/etc/apt/sources.li…

微信小程序 button样式设置为图片的方法

微信小程序 button样式设置为图片的方法 background-image background-size与background-repeat与border:none;是button必须的 <view style" position: relative;"><button class"customer-service-btn" style"background-image: url(./st…

MVC架构在Web开发中的实现

MVC架构在Web开发中的实现 1、MVC架构概述2、MVC架构的实现 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Web开发领域&#xff0c;MVC&#xff08;Model-View-Controller&#xff09;架构模式是一种广泛使用的软件设计模式&#xff0c…

【学习笔记】虚幻SkeletalMesh学习(一)基础介绍

文章目录 零、前言一、资源介绍1.1 骨架资源1.2 骨架网格体资源 二、UE4中的定义2.1 骨骼数据2.2 模型网格数据 三、渲染3.1 RenderData的初始化3.2 渲染对象的创建3.3 渲染对象的更新3.3.1 游戏线程的更新&#xff08;*FSkeletalMeshObjectGPUSkin::Update*&#xff09;3.3.2 …

Android11 framework 禁止三方应用开机自启动

Android11应用自启动限制 大纲 Android11应用自启动限制分析验证猜想&#xff1a;Android11 AOSP是否自带禁止三方应用监听BOOT_COMPLETED​方案禁止执行非系统应用监听到BOOT_COMPLETED​后的代码逻辑在执行启动时判断其启动的广播接收器一棍子打死方案&#xff08;慎用&#…

Spring Cloud-Eureka-02

什么是Eureka Eureka是Netflix开源的一款服务发现与治理框架。在微服务架构中&#xff0c;服务的数量庞大且不断变化&#xff0c;因此需要一种机制来管理和发现服务。Eureka提供了一种简单而强大的方式来实现服务的注册、发现和负载均衡。它包括Eureka Server和Eureka Client两…

矩阵形式的bezier曲线

本文分享一段矩阵形式的bezier代码&#xff1a; clc clear% 控制点 P [25;10;5;13]; %% 获得M矩阵 n length(P) - 1; M zeros(n1,n1); for i 1:n1for j 1:n1if(ij<n3)M(i,j) (-1)^(n -i-j2)*nchoosek(n,n-i1)*nchoosek(n-i1,j-1);elseM(i,j) 0;endend end t_temp l…

蚁群算法路径规划

蚁群算法&#xff08;Ant Colony Optimization, ACO&#xff09;是通过模拟自然界蚂蚁觅食行为来解决优化问题的启发式算法。其核心思想是利用蚂蚁之间通过信息素传递来寻找最优解。以下是蚁群算法的基本原理&#xff1a; 1. 基本概念 信息素&#xff1a;蚂蚁在路径上释放的化…

将AWS RDS MySQL实例从存储未加密改为加密的方案

问题描述&#xff1a; 因为AWS RDS官方文档【1】中已经明确说明&#xff0c;MySQL RDS的存储为EBS卷&#xff0c;用KMS进行RDS加密有如下限制&#xff1a; 您只能在创建RDS的时候&#xff0c;选择加密。对于已经创建的RDS实例&#xff0c;您无法将为加密的实例&#xff0c;直…

centos5 git报错 ‘No kex alg‘

centos5安装完成git后&#xff0c;拉代码报错 ‘No kex alg’ 分析原因可能是ssh版本过低&#xff0c;下面是升级ssh的步骤。 1、下载openssl库 访问 https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/ 下载 openssh-5.9p1.tar.gz 2、编译安装 tar -xvzf openssh-5.9p1…

buu做题(5)

目录 [GXYCTF2019]禁止套娃 方法一: 方法二: [NCTF2019]Fake XML cookbook [GXYCTF2019]禁止套娃 页面里啥也没有 使用dirsearch 扫一下目录 发现有 git 使用工具githack拉取源码 <?php include "flag.php"; echo "flag在哪里呢&#xff1f;<br&g…

集合有关细节

1、哈希碰撞&#xff1a;已经被占导致的冲突。 2、红黑树是一种自平衡的二叉查找树&#xff0c;是要比较大小进行插入的。 在Java中一些自定义的对象怎么比较大小呢&#xff1f; ①首先相应的类实现Comparable接口&#xff1b; ②然后重写接口的compareTo方法指定比较哪些属…

PostgreSQL使用(三)

说明&#xff1a;本文介绍PostgreSQL的数据类型和运算符&#xff1b; 数据类型 常用的数据类型如下&#xff1a; 运算符 如下&#xff1a; 运算符的优先级如下&#xff1a; 不需要强记硬背&#xff0c;只需要记住括号可以提高运算符的优先级即可&#xff1b; 总结 本文介绍…

【JavaEE进阶】——Spring AOP

目录 &#x1f6a9;Spring AOP概述 &#x1f6a9;Spring AOP快速⼊⻔ &#x1f393;引入AOP依赖 &#x1f393;编写AOP程序 &#x1f6a9;Spring AOP 详解 &#x1f393;Spring AOP核⼼概念 &#x1f393;通知类型 &#x1f393;PointCut &#x1f393;切⾯优先级 Ord…