PDF文件提取开源工具调研总结

概述

PDF是一种日常工作中广泛使用的跨平台文档格式,常常包含丰富的内容:包括文本、图表、表格、公式、图像。在现代信息处理工作流中发挥了重要的作用,尤其是RAG项目中,通过将非结构化数据转化为结构化和可访问的信息,极大地提高了信息检索和生成的准确性、效率和实用性。所以PDF文档提取在RAG中显得尤为重要。

目前提取PDF文档内容的思路主要分为三个精细度:

  1. 直接解析PDF的内容流和内部结构,获取文本和元素信息。这种方式只适合标准的PDF,扫描版的PDF无法识别。
  2. 基于布局分析小模型和OCR模型识别文本块、段落和表格等。这种方式适用于标准版和扫描版的PDF,满足大多数需求,但是如果PDF非标准化布局,效果就不太好。OCR工具可以识别文字,布局分析模型识别PDF的基本布局和元素。
  3. 基于布局分析模型、OCR模型、识别公式和表格的模型,识别PDF中更加丰富的元素。这种方法能识别复杂和丰富的各种PDF元素,但是基于大模型,需要的资源较多,并且在CPU环境下速度较慢,需要基于GPU运行。

下面是几个开源的PDF提取工具分析调研和总结,希望能跟感兴趣的同行一起分享学习。

PyMuPDF

这是一个Python处理PDF的神器,后面会重点写博客,介绍这个工具的使用技巧和方法。

PyMuPDF 1.24.9 documentation

PyMuPDF 是一个基于 MuPDF 引擎的轻量级 PDF 处理库,用于在 Python 中处理和分析 PDF (和其他)文档。它提供了丰富的功能,包括从 PDF 中提取文本和图像、处理注释、生成页面截图等。PyMuPDF 的设计目标是高效、灵活且易于使用,适合需要对 PDF 文档进行深入处理的开发者和数据分析师。

基本原理

核心依赖于 MuPDF 引擎,MuPDF 是一款高性能的 PDF 和 XPS 渲染器,专注于快速、紧凑的 PDF 处理。PyMuPDF 将 MuPDF 的强大功能通过 Python 接口暴露出来,提供给用户。

  • 页面渲染:MuPDF 使用高效的渲染算法,将 PDF 页面内容转换为位图图像。PyMuPDF 可以直接调用这些渲染功能,将页面生成高质量的图像文件。
  • 文本和图像提取:MuPDF 能够解析 PDF 文档的内容流,识别出其中的文本、图像和绘制对象。PyMuPDF 使用这些解析功能,将文本和图像提取为 Python 对象。
  • 内容结构分析:MuPDF 的解析引擎可以读取 PDF 的内部结构,PyMuPDF 基于此提供页面内容分析功能,允许用户深入了解 PDF 页面各个部分的构成。

主要功能

  • 文本提取
    • 直接从 PDF 页面中提取文本,支持提取特定区域的文本内容。
    • 可以按段落、行或单词提取文本,同时保留文本的布局信息。
  • 图像提取
    • 从 PDF 页面中提取嵌入的图像,支持提取图像对象和绘制的矢量图形。
    • 可以指定页面区域来提取部分图像内容。
  • 页面渲染
    • 将 PDF 页面渲染为图像文件(如 PNG、JPEG),用于创建页面截图或预览。
    • 支持设置渲染分辨率和缩放比例,以满足不同分辨率下的需求。
  • 处理注释和标注
    • 读取和提取 PDF 页面上的注释和标注(如高亮、下划线、注释框)。
    • 可以添加、删除或修改页面上的注释对象。
  • PDF 文件操作
    • 支持合并、分割、旋转、裁剪和重新排列 PDF 页面。
    • 可以创建新的 PDF 文档,添加文本、图像和图形。
  • 页面搜索
    • 在 PDF 文档中搜索特定的文本内容,返回匹配文本的位置和所在页面。
  • 内容分析
    • 提供对 PDF 页面内容(如文本块、图形、形状、路径等)的详细分析功能,帮助用户了解页面的结构和内容布局。

实际使用效果

优点:

  • 可以准确的提取出正常PDF中的所有元素和bbox布局,包括文字、表格和图片。文字的识别准确率基本高于99%。
  • 可以直接进行PDF页面的拷贝和截取
  • 可以直接把PDF页面转换为图片
  • 可以合并、分割、旋转、裁剪和重新排列PDF页面

缺点:

  • 识别图片只能识别图层,某些复杂的PDF识别出来的图片并不是原始的图片
  • 识别表格,容易把表格邻近的文字识别进去
  • 无法识别公式
  • 无法自动去除页眉页脚

扩展功能

1. PyMuPDF4LLM

支持将PDF转换为Markdown格式,也支持输出LlamaIndex的文档输出。可以识别文本、表格、图片和标题。

测试结论:实际测试发现,这里面还是存在很多问题,比如左右版面的pdf没办法正确输出顺序。但是其中识别pdf文档标题的内容可以借鉴,还有识别图片准确位置的方法可以借鉴,后续用于优化我们的PDF提取功能。

2. PyMuPDF Pro

在PyMyPDF支持pdf的基础上,增加对Office文档的支持,包括doc/docx、xls/xlsx、ppt/pptx、hwp/hwpx。不过效果也一般,跟实际解析word、ppt文档的效果还差一些。

3. PyMuPDF OCR

基于Tesseract-OCR服务,实现pdf的扫描版文字解析,基本原理是把扫描版pdf转成图片,然后提交给Tesseract-OCR进行OCR识别。

测试结论:但是功能有限,OCR识别准确率很低,且需要提前指定语言,只能识别指定语言的内容。就算指定了语言,识别效果也很差,准确率低于50%。

MinerU

这个工具是国内团队开源出来的,对于中文PDF提取效果很好,后面会详细介绍这个项目的原理和源码

OpenDataLab 是一个专注于数据和人工智能研究的开源平台,致力于提供高质量的数据集、模型和工具,支持科研人员和开发者的工作。并且提供开源数据处理全流程的工具,包括数据提取、数据清洗、数据标注、数据质量评估、数据可视化与分析等。本文中重点关注数据提取工具MinerU。

整体介绍

项目地址:opendatalab/MinerU: A one-stop, open-source, high-quality data extraction tool, supports PDF/webpage/e-book extraction.一站式开源高质量数据提取工具,支持PDF/网页/多格式电子书提取。 (github.com)

MinerU是一个一站式、开源、高质量的数据提取工具,主要包含以下功能:

  • 提取PDF,基于PDF-Extract-Kit工具(后面会详细介绍这个工具)实现精确和高效的提取PDF英文和中文文档
  • 提取Office文档(opendatalab/magic-doc (github.com),是一个轻量级、开源的用于将多种格式的文档(PPT/PPTX/DOC/DOCX/PDF)转化为 markdown 格式的工具
  • 提取HTML文档(opendatalab/magic-html (github.com),提供了一套工具,能够轻松地从HTML中提取主体区域内容。无论您处理的是复杂的HTML结构还是简单的网页,这个库都旨在为您的HTML抽取需求提供一个便捷高效的接口。

这里重点调研了提取PDF的功能,下面是详细介绍。

功能简介

Magic-PDF是OpenDataLab基于PDF-Extract-Kit实现的PDF提取工具平台,实现了精确和高效的提取PDF英文和中文文档的功能,可以在cpu和gpu上运行,并且提供命令行和API两种使用方式。核心的功能包括:

  • 识别版面元素,删除页眉/页脚/脚注,保留正文图表
  • 定位图片/表格,准确转换为多模态Markdown格式(表格识别很慢,但是如果不开启可以直接切成图片)
  • 解析数学公式、超长公式,转换为Markdown格式
  • 保留原文档的结构,包括标题、段落、列表
  • 提取图像、图片标题、表格、表格标题
  • 自动识别文档中的公式并将公式转换成latex
  • 自动识别文档中的表格并将表格转换成latex
  • 乱码PDF自动检测并启用OCR
  • 支持CPU和GPU环境
  • 支持windows/linux/mac平台

提供的用户API包括:

  • 解析普通的pdf
  • 解析扫描版的pdf
  • 解析普通和扫描混合的pdf

功能测试结果

整体测试识别得准确率较高,基本高于95%,跟PyMyPDF识别普通版pdf的效果差不多。下面是详细的功能点测试效果说明。

功能点测试效果备注说明
识别pdf类型(普通/扫描)可以识别普通类型和扫描版本的pdf,还可以识别pdf是否被加密了,如果是加密了,则不解析。1、竖向的文字没办法识别
2、扫描版的pdf识别效果挺好,并且自动去掉页眉页脚等元素
3、普通类型的pdf识别效果反而不如PyMuPdf,会有一些文字识别不太准确
识别版面元素,删除页眉/页脚/脚注,保留正文图表扫描pdf和普通pdf都可以识别,并且去掉了页眉页脚的内容1、有时候识别得并不精确,反而会去掉一些不属于页眉页脚的内容
2、如果页眉页脚里版面内容比较近,就没办法去掉。一般有明显标记的页眉页脚,能很好的去掉,比如横线等。所以也跟训练模型的输入有关
解析数学公式,并将公式转换成latex学术论文的公式可以正常识别,但是简单公式识别效果不理想这里应该是因为模型训练使用的学术论文较多,所以识别学术论文的公式效果比较好,识别普通的比如“1+N”这种公式反而效果不好了
保留原文档的结构,包括标题、段落、列表扫描pdf和普通pdf都可以做到1、标题识别出来都是一级标题,感觉没有做区分?
2、段落内部的每一行识别出来也有多余的换行符
3、列表识别出来无法区分有序和无序
提取图像扫描pdf和普通pdf都可以做到1、但是扫描版本的图像切割的时候,有部分会把周边的文字切入进来,不过问题不大,能正常识别出来
提取表格能够正确的识别表格,但是表格提取很慢目前在16G内存cpu的环境中,识别一个很小的表格,比如5行5列的表格,基本上的400秒左右。

基本原理

整个项目分为如下几个模块:

  • API层,提供用户使用的API,目前提供了三个API,包括:PDF内容的提取、结果格式化输出(Markdown、json等)、提取过程中间结果的输出
  • 预处理层,主要用来识别PDF的分类,比如是普通PDF或者扫描版本PDF或者是混合PDF,提取PDF的元数据信息(页面宽度高度等、基础的版面信息),同时做一些乱码检测,去掉无法解析的部分
  • 模型层,首先进行版面布局的识别,识别出基本的元素(文字、图片、表格、格式),构建统一的模型结构。这一层主要使用的PDF-Extract-Kit这个工具包,封装的LayoutMv3、OCR、公式识别、表格识别的模型
  • 管线层(pipeline),是整个提取过程的自动化流程,结合前面处理的步骤,统一对PDF提取复杂过程构建流程,然后输出统一的中间格式
  • 输出层,结合统一输出的中间格式,根据用户的需要输出最终的结果。

1. 原始文档分类

  • 文档类型:论文、财报、文本书籍、图文PDF、PPT
  • 语言分类:英文或者中文

2. 版面检测

1)布局检测

使用LayoutLMv3模型进行区域检测,如图像表格,标题,文本等。LayoutLMv3-SFT指的是我们在LayoutLMv3-base-chinese预训练权重的基础上进一步做了SFT训练后的模型。论文验证集由402张论文页面构成,教材验证集由587张不同来源的教材页面构成。

2)公式检测

公式检测:使用YOLOv8进行公式检测,包含行内公式行间公式

YOLOv8-Trained是在YOLOv8l模型的基础上训练后的权重。论文验证集由255张论文页面构成,多源验证集由789张不同来源的页面构成,包括教材、书籍等。

3. 内容识别方式

1)公式识别

使用UniMERNet进行公式识别;

直接使用的是UniMERNet的权重

2)表格识别

目前支持三种表格识别方式:

  • 使用TableMaster进行表格识别
  • 使用StructEqTable进行表格识别
  • 使用RapidTable进行表格识别

3)OCR识别

使用PaddleOCR进行文本识别;

OCRmyPDF

项目简介

项目地址:ocrmypdf/OCRmyPDF: OCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched (github.com)

说明:OCRmyPDF是基于TesseractOCR实现,用于对扫描版PDF文件进行OCR(光学字符识别)的开源工具。它的核心功能是通过OCR技术将扫描版PDF中的图像转换为可搜索和可复制的文本,从而生成一个数字版PDF。这个工具的工作原理大致如下:

  1. 图像提取:OCRmyPDF 会从PDF中提取每一页的图像。
  2. 光学字符识别:它使用 Tesseract-OCR 或其他OCR引擎对这些图像进行字符识别,将图像中的文字转换为可编辑的文本。
  3. 文本嵌入:识别出的文本被嵌入到原始的PDF文件中,生成一个包含图像和隐藏文本层的PDF文件。这个文本层是搜索和复制的基础。
  4. PDF优化:OCRmyPDF 还可以对PDF文件进行优化,例如压缩文件大小、校正页面方向等。

光学字符扫描(OCR)工具

OCR识别工具,在PDF提取中,主要用于识别PDF中的文字内容,常见的

PaddleOCR

项目地址: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)

官方文档地址:概述 - PaddleOCR 文档 (paddlepaddle.github.io)

说明:是中文开源项目,对中文的支持最好,所以国内的PDF识别开源项目大多基于这个项目进行OCR识别

TesseractOCR

项目地址:tesseract-ocr/tesseract: Tesseract Open Source OCR Engine (main repository) (github.com)

文档地址:tesseract/README.md at main · tesseract-ocr/tesseract (github.com)

说明:由谷歌维护的开源OCR引擎,支持多种语言。它对格式良好的文本非常准确,广泛应用于各种应用中。、

EasyOCR

项目地址:JaidedAI/EasyOCR: Ready-to-use OCR with 80+ supported languages and all popular writing scripts including Latin, Chinese, Arabic, Devanagari, Cyrillic and etc. (github.com)

说明:一个基于Python的OCR工具,支持80多种语言,使用简单的API从图像中提取文本。它很容易集成到现有的Python项目中。

其他工具

LayoutLMv3

说明:LayoutLMv3是微软为文档理解任务开发的模型。它是LayoutLM系列的第三个版本,将语言模型的功能与空间布局信息相结合,使其对于需要理解文本和文档布局的任务特别有效。

项目地址:unilm/layoutlmv3 at master · microsoft/unilm (github.com)

文档地址:unilm/layoutlmv3/README.md at master · microsoft/unilm (github.com)

Ultralytics YOLOv8

说明:是一种用于图像或者视频中对象检测的深度学习模型,它是 YOLO(You Only Look Once)系列模型的最新版本。YOLOv8 继承了 YOLO 系列模型的快速、实时检测的优点,同时在精度和性能方面进行了显著提升。可以检测出图像或者视频中的物体,并返回边界框,同时能将图像中的不同对象分割出来,生成像素级掩码,也能对整个图像分类,识别图像的主要内容或者类别,检测出物体的关键位置点,如人脸的眼睛鼻子等。在PDF提取中,主要用来做公式检测。

项目地址:ultralytics/ultralytics: NEW - YOLOv8 in PyTorch > ONNX > OpenVINO > CoreML > TFLite (github.com)

文档地址:Home - Ultralytics YOLO Docs

StructEqTable

说明:是一种将Table图像转换为LaTeX的模型工具,该模型能够从可视化表格图像中精确地获得相应的LaTeX描述,并执行多个与表格相关的推理任务,包括结构提取和问答,从而拓宽了其应用范围和潜力。

项目地址:UniModal4Reasoning/StructEqTable-Deploy: A High-efficiency Open-source Toolkit for Table-to-Latex Task (github.com)

RapidTable

是专门用来文档类图像的表格结构还原,表格结构模型均属于序列预测方法,结合RapidOCR,将给定图像中的表格转化对应的HTML格式。

RapidAI/RapidTable: 基于序列表格识别算法推理库,集成PP-Structure和modelscope等表格识别算法。

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

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

相关文章

计算机网络 (43)万维网WWW

前言 万维网(World Wide Web,WWW)是Internet上集文本、声音、动画、视频等多种媒体信息于一身的信息服务系统。 一、基本概念与组成 定义:万维网是一个分布式、联机式的信息存储空间,通过超文本链接的方式将分散的信息…

ubuntu18.04开发环境下samba服务器的搭建

嵌入式linux的发展很快,最近准备在一个新项目上采用新一代的linux核心板,发现linux内核的版本已经更新到5.4以上甚至6.0以上;之前常用的linux内核版本是2.6.4,虽然在某些项目上还能用但是明显跟不上时代的步伐了,所以要…

HTML5+Canvas实现的鼠标跟随自定义发光线条源码

源码介绍 HTML5Canvas实现的鼠标跟随自定义发光线条特效源码非常炫酷&#xff0c;在黑色的背景中&#xff0c;鼠标滑过即产生彩色变换的发光线条效果&#xff0c;且线条周围散发出火花飞射四溅的粒子光点特效。 效果预览 源码如下 <!DOCTYPE html PUBLIC "-//W3C//D…

【论文阅读】基于空间相关性与Stacking集成学习的风电功率预测方法

文章目录 摘要0. 引言1. 空间相关性分析2. 风电功率预测模型2.1 Stacking 集成策略2.2 基学习器2.2.1 基于机器学习算法的基学习器2.2.2 基于神经网络的基学习器2.2.3 基于粒子群优化算法的超参数优化 2.3 元学习器2.4 基于空间相关性与Stacking集成学习的风电功率预测方法 3 算…

GMM高斯混合聚类算法(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 GMM高斯混合聚类算法 matlab2023b语言&#xff0c;一键出图&#xff0c;直接运行 1.代码注释清晰&#xff0c;自行解读容易。 2…输出图例如图所示包括&#xff1a;聚类图(聚类结果图)&#xff0c;协方差矩阵类型…

LabVIEW实车四轮轮速信号再现系统

开发了一个基于LabVIEW的实车四轮轮速信号再现系统。该系统解决现有电机驱动传感器成本高、重复性差、真实性差和精度低等问题&#xff0c;提供一种高精度、低成本的轮速信号再现解决方案。 项目背景 ABS轮速传感器在现代汽车安全系统中发挥着至关重要的作用。为保证其准确性和…

计算机网络常见协议

目录 OSPF(Open Shortest Path First) NAT(Network Address Translation) ICMP (Internet Control Message Protocol) HTTPS&#xff08;SSL/TLS加密&#xff09; HTTPS协议 1. 对称加密 2. 非对称加密 3. 证书验证 4. 回顾https协议传输流程 HTTP TCP UDP 1. TCP&a…

算法面试准备 - 手撕系列第七期 - MLP(利用FashionMNIST数据集)

算法面试准备 - 手撕系列第七期 - MLP(利用FashionMNIST数据集) 目录 算法面试准备 - 手撕系列第七期 - MLP(利用FashionMNIST数据集)FashionMINIST 图像分类原理解析1. 全连接的原理图2. 背景介绍3.引入相关库函数4. 数据预处理5. 模型设计6. 初始化网络&#xff0c;损失函数与…

单元测试与unittest框架

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 单元测试的定义 1. 什么是单元测试&#xff1f; 单元测试是指&#xff0c;对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作&am…

【Hugging Face】下载开源大模型步骤

Mac M1 1、国内镜像站 模型基本都可以在国内镜像站 https://hf-mirror.com/ 下载。 部分 Gated Repo 需登录申请许可&#xff0c;需先前往 Hugging Face 官网登录、申请许可&#xff0c;在官网这里获取 Access Token 后回镜像站用命令行下载。 2、注册登陆 Hugging Face 2.1…

STM32的集成开发环境STM32CubeIDE安装

STM32CubeIDE - STM32的集成开发环境 - 意法半导体STMicroelectronics

.Net8 Avalonia跨平台UI框架——<vlc:VideoView>控件播放海康监控、摄像机视频(Windows / Linux)

一、UI效果 二、新建用户控件&#xff1a;VideoViewControl.axaml 需引用&#xff1a;VideoLAN.LibVLC.Windows包 Linux平台需安装&#xff1a;VLC 和 LibVLC &#xff08;sudo apt-get update、sudo apt-get install vlc libvlccore-dev libvlc-dev&#xff09; .axaml 代码 注…

51.WPF应用加图标指南 C#例子 WPF例子

完整步骤&#xff1a; 先使用文心一言生成一个图标如左边使用Windows图片编辑器编辑&#xff0c;去除背景使用正方形&#xff0c;放大图片使图标铺满图片使用格式工程转换为ico格式&#xff0c;分辨率为最大 在资源管理器中右键项目添加ico类型图片到项目里图片属性设置为始终…

C++(二十一)

前言&#xff1a; 本文承接上文&#xff0c;将详细讲解指针概念。 一&#xff0c;通过指针了解变量的数值。 在将变量地址存入指针后&#xff0c;从指针反推也可以知道原变量的值&#xff0c;若想进行反退&#xff0c;就需要使用间接引用运算符&#xff1a;*。 语法&#x…

Redis 性能优化:多维度技术解析与实战策略

文章目录 1 基准性能2 使用 slowlog 优化耗时命令3 big key 优化4 使用 lazy free 特性5 缩短键值对的存储长度6 设置键值的过期时间7 禁用耗时长的查询命令8 使用 Pipeline 批量操作数据9 避免大量数据同时失效10 客户端使用优化11 限制 Redis 内存大小12 使用物理机而非虚拟机…

网络安全面试题汇总(个人经验)

1.谈一下SQL主从备份原理&#xff1f; 答&#xff1a;主将数据变更写入自己的二进制log,从主动去主那里去拉二进制log并写入自己的二进制log,从而自己数据库依据二进制log内容做相应变更。主写从读 2.linux系统中的计划任务crontab配置文件中的五个星星分别代表什么&#xff…

从AI生成内容到虚拟现实:娱乐体验的新边界

引言 在快速发展的科技时代&#xff0c;娱乐行业正经历一场前所未有的变革。传统的娱乐方式正与先进技术融合&#xff0c;创造出全新的沉浸式体验。从AI生成的个性化内容&#xff0c;到虚拟现实带来的身临其境的互动场景&#xff0c;科技不仅改变了我们消费娱乐的方式&#xf…

爬虫基础学习

什么是爬虫: 通过编写程序&#xff0c;模拟浏览器上网&#xff0c;然后让其去互联网上抓取数据的过程。 爬虫的价值: 实际应用就业 爬虫究竟是合法还是违法的? 在法律中是不被禁止具有违法风险善意爬虫 恶意爬虫 爬虫带来的风险可以体现在如下方面: 爬虫干扰了被访问网…

wireshark抓路由器上的包 抓包路由器数据

文字目录 抓包流程概述设置抓包配置选项 设置信道设置无线数据包加密信息设置MAC地址过滤器 抓取联网过程 抓包流程概述 使用Omnipeek软件分析网络数据包的流程大概可以分为以下几个步骤&#xff1a; 扫描路由器信息&#xff0c;确定抓包信道&#xff1b;设置连接路由器的…

第34天:Web开发-PHP应用鉴别修复AI算法流量检测PHP.INI通用过滤内置函数

#知识点 1、安全开发-原生PHP-PHP.INI安全 2、安全开发-原生PHP-全局文件&单函数 3、安全开发-原生PHP-流量检测&AI算法 一、通用-PHP.INI设置 参考&#xff1a; https://www.yisu.com/ask/28100386.html https://blog.csdn.net/u014265398/article/details/109700309 …