有过使用LLM搭建RAG或其它类知识系统的朋友一定会对文档数据的复杂多样性有着深刻的理解。各行各业的磁盘中都沉睡了数年到数十年的各类文档信息,包括:Doc、Docx、PPT、PDF、XLS、PNG、JPEG等各类格式。利用LLM激活这些数据价值的首要工作就是能够正确的抽取这些文件中的信息。目前,市场上已经有了不少开箱即用的Rag类工具,这些工具能够很好的抽取绝大多数文件中的内容,对于很多用户来说,已经足够了。但对于存量数据跨越多年的企业,由于数据的复杂性、抽取需求的多样性,这类开箱即用工具预置的文件数据处理流程就变的很难满足需要了。

由于文件处理是一个非常大的话题,我们无法用一篇文章探讨完此类需求。因此,本文我们只尝试简单探讨一下针对复杂PDF处理的场景,特别是在无代码模式下,如何快速处理PDF,提升数据处理的效率。

复杂PDF处理技术选型

复杂PDF处理是一个业界难题,有很多团队都在尝试解决此类问题,并且也都有了一定的成绩。各类方案个有所长,如何选定就变得有些困难。最近一篇《Ilya Rice:我是如何赢得企业 RAG 挑战赛的》的文章大火,里面给出了一个不错的方案–Docling。

Docling 是一个开源的文档解析和转换工具,能高效地将多种格式的文档(包括 PDF、DOCX、PPTX、图片和 HTML)解析,导出为 Markdown 或 JSON 格式。能够对PDF进行OCR、布局分析、表格分析、代码识别等深度理解。互联网上有很多相关资料可以参考,本文就不做赘述了。

于是,HuggingFists整合了Docling技术,帮助使用者应对复杂PDF的解析场景。选用Docling还有一个重要的原因,就是其部分转换功能可以在纯CPU的环境中运行完成。

复杂PDF处理流程

在这里插入图片描述

如图所示,在HuggingFists中使用Docling进行复杂PDF处理非常简单,只要一个包含三个算子的流程就可以批量完成复杂PDF文本的转换工作了。由于LLM模型对Markdown格式支持的更完善一些,故而Docling算子将Markdown格式作为了缺省的目标格式。虽然LLM对Json格式的支持也非常完善,但由于它无法保留版式信息,无法直观评价转换效果,故而这里也没有作为首选项。

这是一个将PDF文件批量转换为Markdown文件并存储到文件系统的流程。文件输入算子用于批量选中要处理的PDF文件;Docling算子负责将PDF文件转换为Markdown格式;批量文件输出算子用于将转换后的文件存储到指定的目录。

经过转换后的Markdown文件由于采用了纯文本描述格式,就非常方便进行后续处理了。如在进行RAG系统开发时,为了最大程度的保持文本含义的内聚性,可以对文件按章节切分;如希望单独抽取文件中的表格、图片等信息,也可以在此基础上进一步抽取。我们将在随后的文章中介绍如何完成以上类型的工作。

Docling环境的准备

目前最新版的HuggingFists并不支持Docling,如果希望使用该功能,需要去HuggingFists的算子商城(资源库/算子库/商城)中安装该算子,并在HuggingFists环境中按照如下步骤安装Docling。

  1. 进入HuggingFists的安装目录,sengee.community.linux

  2. 在命令行中执行nerdctl exec -it oyez /bin/sh进入oyez容器。执行su root命令,输入密码12345678,切换到root用户下

  3. 在oyez系统中运行pip install docling安装docling。如果你的机器能够翻墙,那么打开翻墙通道,安装完成。这里强调能够翻墙是因为docling运行时会根据算子的功能配置去下载对应的模型。而这些模型需要翻墙才能下载。需要注意的是,此时在每次使用Docling算子时,需要对算子中的Python代码部分进行相应的调整。如下图:

    在这里插入图片描述

    点击图中Docling算子右上角的配置弹出按钮。在弹出框中找到"Python脚本片段属性"。注释掉代码中红色框标注的2行代码,点击确定即可。这两行代码是为无法下载Docling模型包而预置的模型路径。具体安装方式见步骤4。

  4. 退出oyez系统。进入sengee.community.linux/moo目录下。下载“https://pan.baidu.com/s/1uoa3UqBfHBX3sCf10bUtog?pwd=1234”的包到当前目录,解压Docling.zip包。该包中包含Docling运行所需的部分模型。对于无法翻墙的用户,运行时无法下载到对应模型。故而无法正常运行Docling。HuggingFists提供的这个压缩包中涵盖了ocr识别,布局识别以及表格识别等多个模型。可以帮助网络条件不足的朋友使用Docling算子。需要注意的是,当前提供的模型中,未包括代码识别和公式识别的模型,如需此类功能需下载对应的模型放在指定的路径下。

结语

Docling内置了很多功能配置项,但是Docling算子只封装了其中的一部分。如果希望调整和配置更多的配置项,可以试着去修改算子的Python脚本片段。这里的脚本片段为实际运行Docling时所需的脚本片段。好了,现在可以使用HuggingFists去自动化处理复杂PDF文档了。

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

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

相关文章

Vue 3 框架实现理念、架构与设计哲学深度解析

第一部分:Vue 3 的起源:架构演进与设计哲学 Vue 3 的诞生并非一次简单的版本迭代,而是一场深刻的架构革命。它的出现是前端技术演进、应用规模扩张以及对更高性能和可维护性追求的必然结果。要全面理解 Vue 3 的各项实现理念,必须…

SQL Server使用存储过程导出数据到Excel实现方式

在SQL Server数据库管理中,存储过程作为预编译的T-SQL语句集合,能显著提升数据操作效率与安全性。将数据导出到Excel的需求广泛存在于报表生成、数据迁移等场景。本文详细解析四种通过存储过程实现数据导出的技术方案,涵盖代码实现、适用场景及优化策略,为不同业务需求提供…

OpenGL 2. 着色器

#include <glad/glad.h> #include <GLFW/glfw3.h> #include <iostream> #include <stdexcept>// 函数声明 void framebuffer_size_callback(GLFWwindow* window, int width, int height); void processInput(GLFWwindow* window); void checkShaderCom…

【c++】容器扩容导致的类实例资源被错误释放

BUG记录 表现为新实例被存入前&#xff0c;容器内部的旧实例的析构被意外调用 因为 std::vector 在容量不足时&#xff0c;会自动扩容&#xff0c;把旧元素「搬」到新内存&#xff0c;然后析构旧内存上的那些对象。然后由于LKMotorController 类里没有正确处理移动语义&#xf…

TypeScript 集成

下面&#xff0c;我们来系统的梳理关于 Vue TypeScript 深度集成 的基本知识点&#xff1a;一、TypeScript 与 Vue 集成概述 1.1 为什么需要 TypeScript 类型安全&#xff1a;编译时类型检查&#xff0c;减少运行时错误代码智能&#xff1a;强大的IDE智能提示和自动补全可维护…

npm proxy

背景 前端项目下载依赖时经常会出现timeout的情况&#xff0c;此时有三种解决方案。 切换镜像源。 适用于对依赖版本要求不严格的情况。延长超时时间。设置npm proxy。一些生产环境对依赖版本有着严格要求&#xff0c;并且指定了依赖的下载地址&#xff08;如下图&#xff09;&…

TVS管工作原理是什么?主要的应用场景都有哪些?

什么是TVS管&#xff1f; TVS&#xff08;Transient Voltage Suppressors&#xff09;&#xff0c;即瞬态电压抑制器&#xff0c;也被称为雪崩击穿二极管&#xff0c;是一种二极管形式的高效能保护器件&#xff0c;常用来防止端口瞬间的电压冲击造成后级电路的损坏。 TVS 有单…

分布式微服务系统架构第156集:JavaPlus技术文档平台日更-Java线程池使用指南

title: java线程池使用 author: 哪吒 date: 2023-06-15点击勘误issues&#xff0c;哪吒感谢大家的阅读Java线程池使用指南1. 线程池基础使用1.1 创建线程池的方式方式一&#xff1a;使用Executors工具类&#xff08;不推荐&#xff09;// 1. 固定大小线程池 ExecutorService fi…

【最新版】点大全能版v2.6.7.1 含汇付斗拱插件+uniapp前端

一.介绍V2全能版本、独立版本全开源&#xff0c;含链动21&#xff0c;汇付斗拱​、排队免单、推三返1 &#xff0c;扶持金&#xff0c;平级奖&#xff0c;团队业绩奖&#xff0c;酒店管理&#xff0c;约车&#xff0c;餐饮等众多营销功能&#xff0c;商城系统版本号为2.6.7.1&a…

Go语言高级面试必考:切片(slice)你真的掌握了吗?

目录 1. 切片是个啥?从数组到切片的灵魂进化 数组与切片的爱恨情仇 切片的内存结构:三巨头共舞 切片的初始化方式:灵活到飞起 切片的“引用”特性:福也是祸 源码初探:切片的诞生 2. 切片三剑客:len、cap 和底层数组的三角恋 len 和 cap 的微妙关系 切片共享的秘密…

monorepo + Turborepo --- 开发应用程序

目录 配置开发任务 在 dev 之前运行设置任务 运行特定应用程序 使用终端 UI 与任务交互 监听模式 watch 将 turbo watch 与持久任务一起使用 依赖感知的持久任务 没有依赖感知的持久任务 缓存 任务输出 局限性 在 Monorepo 中开发应用程序可以解锁强大的工作流程&…

C#字符串相关库函数运用梳理总结 + 正则表达式详解

C# 字符串常用库函数总结 &#x1f539; 1. 字符串比较 方法说明示例string.Equals()比较两个字符串是否相等&#xff08;可忽略大小写&#xff09;string.Equals("abc", "ABC", StringComparison.OrdinalIgnoreCase) / !判断两个字符串是否相等/不等&quo…

投机采样(Speculative Decoding)

投机采样&#xff08;Speculative Decoding&#xff09; 是一种加速大型语言模型&#xff08;LLM&#xff09;推理的技术&#xff0c;其核心思想是通过预生成候选token序列并异步校验&#xff0c;从而减少主模型的计算量&#xff0c;同时保持生成结果的准确性。 核心思想是通过…

如何将华为手机中的照片传输到电脑

华为手机在众多手机品牌中以其出色的品质脱颖而出&#xff0c;尤其是其摄像头功能。有时&#xff0c;你可能在华为手机上积累了太多有意义的照片&#xff0c;想要将这些照片上传到电脑以释放手机存储空间。然而&#xff0c;出于用户信息安全的考虑&#xff0c;一些便捷的方法可…

whitt算法之特征向量的尺度

whitt中特征值不相等判别条件另一个条件的意思&#xff0c; 实际上这两个条件都没用&#xff0c;不用看&#xff0c;特征值排序&#xff0c;如果现在顺序对λ1/λ1‘ w λ2/λ2 -w 此时取相位就是0&#xff0c;最小了 如果相反就是面的是0我的代码用最优相位内积去交换位置公…

【Note】《深入理解Linux内核》 第十九章:深入理解 Linux 进程通信机制

《深入理解Linux内核》 第十九章&#xff1a;深入理解 Linux 进程通信机制&#xff08;Process Communication&#xff09;关键词&#xff1a;IPC、信号、管道、FIFO、消息队列、信号量、共享内存、套接字、内核对象、同步机制一、进程通信概述 1.1 为什么需要进程通信 在 Linu…

【Mac 从 0 到 1 保姆级配置教程 19】- 英语学习篇-我的英语工作流分享(AI 辅助学习)

文章目录前言听力沉浸式翻译阅读Easydict配置自定义字典&#xff08;重点&#xff09;欧陆词典沙拉查词沉浸式翻译写作Eearthworm英文提问口语最后学习资料系列教程前言 本文介绍一下我日常如何学习和使用英语的工作流&#xff0c;包括一些常用好用的工具&#xff0c;好的工具…

从库函数到API接口,深挖不同语言背后的“封装”与“调用”思想

个人主页-爱因斯晨 优秀文章推荐 文章目录个人主页-爱因斯晨优秀文章推荐引言一、三种调用机制概述C语言的库函数Python 的导包机制Java 的 API 接口调用综上&#xff1a;二、它们的相同点&#xff1a;封装与调用三、不同之处**对比核心维度****细节串讲**1. **C 语言&#xf…

基于NCNN框架在Android平台实现YOLOv8目标检测模型的高效部署与实践

随着移动设备计算能力的提升&#xff0c;越来越多的深度学习模型被部署到移动端&#xff0c;以实现实时、低延迟的应用场景。YOLO系列的在目标检测任务中表现出色&#xff0c;具有精度高、速度快的优势。本文将详细介绍如何基于NCNN框架 &#xff0c;在Android平台 上高效部署Y…

华为动态路由配置

问题描述&#xff1a;针对四个路由器在不同的网段场景中&#xff0c;对四个路由器进行动态路由配置。下面以如下场景为例&#xff0c;介绍详细配置过程。配置过程&#xff1a; 1、每个路由器的接口配置IP地址 路由器AR1中每个接口配置IP地址。 sys # 进入系统视图 interface g…