IBM开源新模型,可完美、快速转换PDF文档格式,附源码详细部署教程使用教程

IBM开源新模型,可完美、快速转换PDF文档格式,附源码详细部署教程使用教程。

在这里插入图片描述

docling 是一个由 DS4SD(Data Science for Social Development)团队开发的开源项目,旨在帮助文档化软件项目。该项目提供了一个基于 Flask 的 Web 应用程序,用于托管文档,并支持 Markdown 格式。

将 PDF 文档转换为机器可处理的格式一直是一个极具挑战性的难题,这主要是因为 PDF 在格式、标准化和结构特征等方面存在着极为显著的差异。

例如,不同的 PDF 文档可能使用了各种各样的排版方式、字体样式和图像嵌入方式,有些可能还使用了特殊的字体编码或加密技术,进一步增加了数据处理的难度。

为了解决这些难题,IBM的研究人员基于PDF解析器、大模型、OCR等多种技术开发了Docling模型,可将PDF文档保留全部格式的情况下快速转换成JSON、 Markdown格式。

开源地址:https://github.com/DS4SD/docling

Docling模型使用了模块化设计方法,将整个PDF文档处理流程拆解为一系列连续的操作步骤,每个步骤都由专门的模块来执行。这不仅提升了执行效率和准确率,还极大增强了模型的扩展性和灵活性。

在Docling架构中,PDF后端扮演着重要角色。主要负责将PDF文档解析为机器可读的格式,包括提取文本内容及其在页面上的几何坐标,以及渲染每个页面的位图图像。为后续所有操作奠定基础。

在这里插入图片描述

为了应对PDF文档格式的多样性和复杂性,Docling提供了多种PDF后端选项。其中,基于qpdf库开发的自定义PDF解析器,是默认的PDF后端。为了满足不同场景的需求,还提供了基于pypdfium的PDF后端作为备选方案。

在PDF后端完成初步解析后,Docling的两个布局分析模型和表格结构识别模型,对数据做进一步处理。布局分析模型基于RT-DETR架构,通过在DocLayNet数据集上进行再训练,能够准确地预测页面图像上各种元素的边界框和类别。使Docling能够理解文档的详细布局,包括阅读顺序、图形位置以及表格结构的恢复。

在这里插入图片描述

表格结构识别模型TableFormer则主要用于识别表格结构,能够预测给定表格的逻辑行和列结构,并确定哪些表格单元属于列标题、行标题或表格主体。帮助Docling在处理表格时,能够应对各种复杂情况,如无边框线、空单元格、跨行或跨列的单元格等。

为了进一步提升Docling的处理能力,尤其是在处理扫描的PDF或页面上嵌入的位图图像时,Docling还提供了可选的OCR支持。通过集成EasyOCR这一流行的第三方OCR库,Docling能够识别和转写图像中的文字,从而扩展在文档处理方面的应用范围。

在这里插入图片描述

为了评估 Docling的转换效率,研究人员使用arXiv 的3篇论文和两本 IBM书总共225 页搭建了一个测试数据集。

在测试过程中,使用了两种可用的 PDF 后端,并分别设置了不同的线程预算,一次将线程预算固定为 4,另一次固定为 16,在苹果M3 Max笔记本和英特尔Xeon E5 – 2690平台上执行。

在这里插入图片描述

结果显示,Docling可以完美、快速将 PDF 文档转换为 JSON、 Markdown 格式,并且能够理解页面布局、阅读顺序,定位图表并恢复表格结构,还能提取文档的元数据,例如,标题、作者、参考文献和语言等。

在使用4线程时,处理时间为103秒,每秒处理页面数为 2.18 页,峰值内存使用为 6.20GB;使用 16 线程时,处理时间为177秒,每秒处理页面数为1.27页。


docling是一个用于将PDF文档转换为JSON或Markdown格式的Python库,它依赖于PyTorch库,并且支持OCR(光学字符识别)功能。以下是部署和使用docling的详细步骤:

部署步骤

  1. 安装依赖
    首先,你需要安装Python和pip。然后,你可以使用pip安装docling

    pip install docling 
    
  2. 安装PyTorch
    docling依赖于PyTorch库,你可以根据你的系统环境选择合适的PyTorch版本进行安装。例如,对于Linux系统,你可以使用以下命令:

    pip install torch torchvision torchaudio 
    
  3. 配置环境变量
    为了限制CPU线程的使用,你可以设置OMP_NUM_THREADS环境变量。例如,如果你想限制使用4个CPU线程,你可以使用以下命令:

    export OMP_NUM_THREADS=4 
    

使用步骤

  1. 转换单个文档
    你可以使用doclingconvert_single函数来转换单个PDF文档。例如,如果你想转换一个名为document.pdf的PDF文档,你可以使用以下代码:

    from docling.document_converter import DocumentConverter source = "document.pdf"  # PDF路径或URL 
    converter = DocumentConverter()
    result = converter.convert_single(source)print(result.render_as_markdown())  # 输出Markdown格式 
    print(result.render_as_doctags())  # 输出Doc Tags格式 
    
  2. 批量转换文档
    你可以使用doclingconvert函数来批量转换PDF文档。例如,如果你想转换一个包含多个PDF文档的目录,你可以使用以下代码:

    from docling.document_converter import DocumentConverter 
    from docling.datamodel.conversion_input import DocumentConversionInput 
    from docling.datamodel.limits import DocumentLimits source_dir = "path/to/source/directory"  # PDF文档目录路径 
    output_dir = "path/to/output/directory"  # 输出目录路径 converter = DocumentConverter(artifacts_path=output_dir)
    conv_input = DocumentConversionInput.from_paths(paths=[source_dir], limits=DocumentLimits(max_num_pages=100, max_file_size=20971520))
    results = converter.convert(conv_input)for result in results:print(result.render_as_markdown())  # 输出Markdown格式 print(result.render_as_doctags())  # 输出Doc Tags格式 
    
  3. 使用命令行工具
    你也可以使用docling的命令行工具来转换PDF文档。例如,如果你想转换一个名为document.pdf的PDF文档,你可以使用以下命令:

    docling document.pdf 
    

部署和使用 docling 的步骤:

1. 克隆仓库

首先,您需要克隆 docling 的 GitHub 仓库到本地机器:

git clone https://github.com/DS4SD/docling.git
cd docling
2. 创建虚拟环境

为了隔离项目的依赖关系,建议在一个虚拟环境中安装所需的包。如果您还没有安装 virtualenv,可以先安装它:

pip install virtualenv

然后,在项目目录下创建一个新的虚拟环境:

virtualenv venv
source venv/bin/activate  # 对于 macOS 和 Linux
# 或者
venv\Scripts\activate    # 对于 Windows
3. 安装依赖

在激活的虚拟环境中安装项目所需的依赖:

pip install -r requirements.txt
4. 初始化数据库

docling 使用 SQLite 数据库存储数据,您需要初始化数据库:

flask db init
flask db migrate
flask db upgrade
5. 启动应用

现在可以启动 Flask 应用了:

flask run

默认情况下,Flask 将在 http://127.0.0.1:5000/ 地址监听请求。

6. 访问应用

打开浏览器,访问 http://127.0.0.1:5000/,您应该能看到 docling 的初始页面。

使用说明:

  • 创建文档:登录后,您可以创建新的文档条目,并使用 Markdown 格式编写内容。
  • 编辑文档:您可以编辑已有的文档,或者删除不再需要的文档。
  • 查看文档:通过前端界面查看发布的文档。

注意事项:

  • 确保您的系统上已经安装了 Python 和相关依赖。
  • 如果您遇到任何 SSL 证书问题,请参考前面提到的解决方案。
  • 确保在启动 Flask 应用前,已经成功初始化了数据库。
  • 如果您计划在生产环境中部署此应用,建议配置更完善的 Web 服务器(如 Gunicorn)以及使用 HTTPS。

通过以上步骤,您就可以成功部署和使用 docling 应用来管理您的文档了。如果有任何具体的技术问题或疑问,欢迎随时提问!

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

在 OpenEuler 中配置 KVM 虚拟化环境指南

本指南旨在为读者提供一个详细的步骤说明,帮助大家在 OpenEuler 系统中配置 KVM 虚拟化环境。无论您是初学者还是有一定经验的用户,这份指南都将涵盖从环境准备、安装到虚拟机管理的各个方面,确保您能够顺利地搭建并管理自己的虚拟化平台。 …

写一个算法统计在输入字符串中各个不同字符出现的频度并将结果存入文件(字符串中的合法字符为A-Z这26个字母和0-9这十个数字)

题目分析,一共需要最多需要36个位置的数组,我们把前十个数组位置给0-9个数字字符存放空间,10-36的数组空间给到A-Z的存放 int main() {printf("请输入一串字符串内容,并且以#结束输入\n");char arr[36], ch;//26个大写字符10个数字…

重磅!2025年国自然项目指南,发布时间确定!

9月25日,基金委官网发布《《2025年度国家自然科学基金项目指南》征订通知》,据通知,《2025年度国家自然科学基金项目指南》预计于2025年1月中旬正式出版,届时将以电子和纸质两种形式同步刊出,纸质版48元\套&#xff0c…

高校实训产品:教育AI人工智能实训与科研解决方案

保持前沿、提升就业、低成本的教育AI实训全场景方案 产品概述 AIGC实训云图站解决方案为高校提供了灵活、高效的人工智能实训平台。通过弹性裸金属调度技术和GPU虚拟化,实现高性能与低成本的兼顾,为学生和教师提供不受时间和空间限制的实操机会。平台涵…

SpringBoot使用validation进行自参数校验

一:介绍 在 SpringBoot 项目开发中,很多与数据库交互的参数需要校验数据正确性。很多小伙伴会把参数判断写进代码里,但是这种写法往往会有低可读性以及多处使用的时候,需要变更验证规则时,不易于维护等缺点。今天给大家…

五秒Al绘画出图,全球最快的Stable Diffusion教程又来了!秋葉SD零基础入门到精通教程

大家好,我是强哥 今年刷爆全网的Stable Diffution 最近出了无需安装的版本,还支持中文使用! 但是很多小伙伴说不会用 所以给大家找来了中文教程 非常好上手哦! AI绘画Stable Diffusion视频教程 帮助你更好的上手SD智能绘画 …

基于Java+SQL Server2008开发的(CS界面)个人财物管理系统

一、需求分析 个人财务管理系统是智能化简单化个人管理的重要的组成部分。并且随着计算机技术的飞速发展,计算机在管理方面应用的旁及,利用计算机来实现个人财务管理势在必行。本文首先介绍了个人财务管理系统的开发目的,其次对个人财务管理…

回归预测|基于蜣螂优化长短期记忆网络的数据回归预测Matlab程序DBO-LSTM 多特征输入单输出 含基础LSTM

基于蜣螂优化长短期记忆网络的数据回归预测Matlab程序DBO-LSTM 多特征输入单输出 含基础LSTM 文章目录 一、基本原理DBO-LSTM 多特征输入单输出回归预测的原理和流程2.1 蜣螂优化(DBO)2.2 长短期记忆网络(LSTM)3.1 数据准备3.2 模…

代码随想录算法训练营第45天 动态规划part12 |题目: 115.不同的子序列 583. 两个字符串的删除操作 72. 编辑距离 编辑距离总结篇

代码随想录算法训练营第45天 动态规划part12 |题目: 115.不同的子序列 583. 两个字符串的删除操作 72. 编辑距离 编辑距离总结篇 文章来源:代码随想录 题目名称:115.不同的子序列 给定一个字符串 s 和一个字符串 t ,计算在 s 的子…

源码-基于springBoot精准扶贫管理系统

注册 功能概述 提供帮扶干部自助注册功能,注册登记个人基本信息、所在单位等,管理组织审核和帮扶配对后,注册账号即可登录使用。 使用角色:帮扶人员 贫困户档案管理 功能概述 要是建立和查看贫困户档案,包括家庭信息、…

Python(五)-函数

目录 函数的定义与调用 特点 语法格式 函数的参数 函数的返回值 函数嵌套调用 变量的作用域 局部变量 全局变量 函数的多种参数 位置参数 关键字参数 默认参数 可变参数 函数的定义与调用 python函数需要使用def关键字来定义,需要先定义,后调用 特点: 先定义…

遍历递归数结构,修改里的disabled值

返回参数中新增字段 disabled,后端给的值为1和2, disabled1时,代表该节点需要置灰,不可选中 现在需要将disabled的值,改为布尔类型; 后端给的数结构是对象类型,tree接收数组类型; 先将对象类型的数据,遍历递归,修改里面的disabled值,最后再加[ ],改为…

vue项目中的node、node-sass、sass-loader之间的版本关系

这个报错,想必大部分人都会遇到,版本不适配的问题,记录下解决方案。 版本适配问题 node 与node-sass node-sass与sass-loader sass-loader 4.1.1,node-sass 4.3.0sass-loader 7.0.3,node-sass 4.7.2sass-loader 7.3.…

负载均衡--相关面试题(六)

在负载均衡的面试中,可能会遇到一系列涉及概念、原理、实践应用以及技术细节的问题。以下是一些常见的负载均衡面试题及其详细解答: 一、什么是负载均衡? 回答:负载均衡是一种将网络请求或数据传输工作分配给多个服务器或网络资源…

RK 方案VOP 显示接口的链接关系以及DTS如何配置

这图显示各vp 支持情况 如下图VP0 支持DSI0 DSI1 EDP LVDS HDMI 显示接口,如果我们一方案需要点MIPI 屏 和HDMI out, 如果VP0 链接MIPI DSI0 那么VP0 就不能再选择了,只能VP1 链接HDMI out 了。因为VP2不至此HDMI,所有就只有选择VP1 链接HDMI…

磁盘分区与固件启动

扇区是磁盘读写的基本单位,是磁头从磁盘中读取数据的最小单位,一般是512B(现代磁盘还有4 KB),多个相邻的扇区组合在一起形成一个簇。其中磁盘的第一个扇区特别重要,它存储了磁盘分区表。 早期磁盘的第一个…

尚硅谷----智尚代驾项目----Day7(续)------预估乘客订单数据之Drools

Hello uu 们!感谢你们的收看,话不多说,今天开始我们的Drools之旅 Drools介绍 drools是一款由JBoss组织提供的基于Java语言开发的开源规则引擎,可以将复杂且多变的业务规则从硬编码中解放出来,以规则脚本的形式存放在文…

Dapper 如何确保数据的安全性和防止 SQL 注入攻击?

一、什么是SQL注入攻击 SQL注入攻击是一种常见的网络攻击手段,它利用了应用程序中安全措施不足的问题,允许攻击者插入或“注入”一个或多个SQL语句到原本的查询中。这种攻击可以用于获取、篡改或删除数据库中的数据,甚至可以执行一些数据库管…

springboot+大数据基于数据挖掘的招聘信息可视化大屏系统【内含源码+文档+部署教程】

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

项目实战:构建高效可扩展的Flask Web框架:集成Flask-SQLAlchemy、Marshmallow与日志管理

前言 在Web开发中,构建一个既高效又可扩展的框架是项目成功的基石。Flask作为一个轻量级的Web应用框架,凭借其易用性和灵活性,特别适合快速开发和原型设计。结合Flask-SQLAlchemy(为Flask提供SQLAlchemy ORM支持的扩展&#xff0…