当前位置: 首页 > article >正文

【Ragflow】11. 文件解析流程分析/批量解析实现

概述

本文继续对ragflow文档解析部分进行分析,并通过脚本的方式实现对文件的批量上传解析。

文件解析流程

文件解析的请求处理流程大致如下:

1.前端上传文件,通过v1/document/run接口,发起文件解析请求

2.后端api\apps\document_app.pyrun函数接收请求,校验用户权限,处理文档解析运行信息,创建新的任务队列

3.后端api\db\services\task_service.pyqueue_tasks函数进一步根据文档根据文档类型和页数,将文档分割成多个子任务,并通过解析器进行解析。

4.解析器在deepdoc\parser路径下,对于docx、excel、pdf等不同格式的文件都有不同的解析策略。其中,pdf的解析策略最为复杂,因为要设计需要先转成图像,再进行ocr文本识别。

5.解析完成后,会生成文本块,并构建索引,存储到向量数据库。

在解析过程的同时,前端同时还会定时向v1/document/list这个接口发起轮询,以获取解析的进度信息。

文件解析模型

ragflow的文件解析采用了名为deepdoc的模型,该模型的相关资料并不多,是其自研的模型,在hugging face上公布了具体的模型权重:

hf地址:https://huggingface.co/InfiniFlow/deepdoc

从模型体积上看,其采用的模型并不大,但对不同的任务,会采用不同的模型,比如OCR(光学字符识别)、TSR(表格结构识别)、DLA(文档布局分析)等多种解析任务。

文件解析加速实验

由于解析模型都是onnx形式的模型,因此,如果使用gpu进行解析,理论上可以显著加速解析速度。

于是下面做个实验,通过docker-compose-gpu.yml文件启动容器,使其能够访问外部gpu。

启动命令:

docker compose -f docker-compose-gpu.yml up -d

对于一篇学位论文的pdf文件,未使用gpu,通过docker-compose.yml进行解析,花费时间约10分钟。

使用gpu配置启动容器,对相同文件进行解析,发现cpu多核全部拉满,gpu仍然未工作,因此速度基本无差别。

说明仅通过docker-compose-gpu.yml似乎无法成功利用上gpu资源,此点还需进一步论证。

观察docx和pdf的解析器设置,docx只需要解析纯文本信息,而无需进行ocr处理,因此理论解析速度会比pdf文件快很多,下面进行一个实验,比较word文件和pdf文件的解析日志,内容如下:

word格式文件解析日志:

进度:
15:36:34 Task has been received.
15:36:34 Page(1~100000001): Start to parse.
15:36:34 Page(1~100000001): Finish parsing.
15:36:35 Page(1~100000001): Generate 16 chunks
15:36:53 Page(1~100000001): Embedding chunks (18.57s)
15:36:55 Page(1~100000001): Indexing done (1.42s). Task done (20.93s)

pdf格式文件解析日志:

开始于:
Fri, 04 Apr 2025 13:45:56 GMT
持续时间:
599.00 s
进度:
13:45:56 Task has been received.
13:46:29 Page(1~13): OCR started
13:46:36 Page(1~13): OCR finished (7.77s)
13:46:56 Page(1~13): Layout analysis (19.70s)
13:46:56 Page(1~13): Table analysis (0.00s)
13:46:56 Page(1~13): Text merged (0.00s)
13:47:07 Page(1~13): Generate 27 chunks
13:48:39 Page(1~13): Embedding chunks (92.02s)
13:48:43 Page(1~13): Indexing done (3.77s). Task done (166.60s)
....(略去多个子任务解析过程,和上述类似)

word文件的确比pdf文件解析速度快很多,因此,如果想加快解析速度,可以预先通过其他方式,将pdf文件的文本信息摘取出来,转成其它格式。

文档批量解析

经过上述分析后,实际上可以通过两个解析接口+文件上传接口,实现文档的批量解析。

发现已有一个代码仓库实现了该功能:

仓库地址:https://github.com/Samge0/ragflow-upload

下面是具体操作步骤:

1.开启ragflow服务
需保持ragflow服务处于正常运行状态

2.克隆仓库代码

git clone https://github.com/Samge0/ragflow-upload.git

3.安装依赖

pip install -r requirements.txt

4.设置配置项
ragflows/configs.demo.py改成ragflows/configs.py

配置文件主要修改以下几点:

  • API_URL:ragflow的api地址,默认值:http://localhost:80/v1,如果是本机部署,无需修改

  • AUTHORIZATION:ragflow的api鉴权token,可以从F12网站开发者工具,查看请求的标头获取

  • DIFY_DOC_KB_ID:ragflow的知识库id,直接在知识库页面,查看url尾缀dataset?id的具体值获取

  • KB_NAME:ragflow的知识库名称,设置为需要上传的知识库名称

  • DOC_DIR:本地上传文件夹路径,待上传文件的存储位置,设置为需要上传的实际文件夹路径

5.启动脚本

运行命令

python -m ragflows.main

这个脚本的优势在于,它并不是多个文件批量解析,而是单个文件解析完之后,再执行下一个文件进行解析。这样可以有效避免多线程解析时,线程阻塞导致的文件解析过程中断。

拓展方向

1.进一步支持GPU解析

本文尝试了一下使用docker运行gpu环境,但发现文件解析时,并不能有效利用gpu设备。后续可对此进行进一步研究,以更好地利用gpu资源实现解析过程加速。

2.图像识别存储

目前文档解析仍然是针对文本信息,并未涉及图像信息的提取和关联,此点有待进一步研究。

相关文章:

【Ragflow】11. 文件解析流程分析/批量解析实现

概述 本文继续对ragflow文档解析部分进行分析,并通过脚本的方式实现对文件的批量上传解析。 文件解析流程 文件解析的请求处理流程大致如下: 1.前端上传文件,通过v1/document/run接口,发起文件解析请求 2.后端api\apps\docum…...

第三期:深入理解 Spring Web MVC [特殊字符](数据传参+ 特殊字符处理 + 编码问题解析)

✨前言:传参和状态管理,看似简单其实门道不少 在 Web 开发中,前端和后端最核心的交流方式就是“传参”,而“传参”除了涉及如何写代码获取参数,还藏着很多开发者容易忽略的细节: 为什么 URL 带了中文&…...

嵌入式学习笔记——ARM-中断与异常

文章目录 中断与异常的区别中断与 DMA 的区别中断能否睡眠?下半部能否睡眠?1. 中断处理程序不能睡眠2. 下半部(SoftIRQ、Tasklet、Workqueue) 中断处理注意点1. 快进快出2. 避免阻塞3. 正确返回值4. 如何处理大量任务5. 避免竞态问…...

Everything 安装教程与使用教程(附安装包)

文章目录 前言一、Everything 介绍二、Everything 安装教程1.Everything 安装包下载2.选择安装文件3.选择安装语言4.接受许可协议5.选择安装位置6.配置安装选项7.完成安装 三、Everything 使用教程1.启动软件2.简单关键词搜索3.按类型搜索 前言 在日常使用电脑时,随…...

嵌入式开发中栈溢出的处理方法

嵌入式开发中栈溢出的处理方法 目录 引言栈溢出的原理栈溢出的危害栈溢出检测方法 哨兵变量法栈着色法硬件监测机制编译器栈保护 裸机系统中的栈溢出处理操作系统中的栈溢出处理预防栈溢出的最佳实践结论 引言 在嵌入式系统开发中,栈溢出是一个常见且危险的问题…...

SQL语句(三)—— DQL

目录 基本语法 一、基础查询 1、查询多个字段 2、字段设置别名 3、去除重复记录 4、示例代码 二、条件查询 1、语法 2、条件列表常用的运算符 3、示例代码 三、分组查询 (一)聚合函数 1、介绍 2、常见的聚合函数 3、语法 4、示例代码 &…...

#python项目生成exe相关了解

在 Windows 上将 Python 项目 生成 EXE 可执行文件,主要使用 pyinstaller。以下是完整步骤: 📌 1. 安装 PyInstaller pip install pyinstaller如果已安装,可执行以下命令检查版本: pyinstaller --version&#x1f4c…...

Opencv计算机视觉编程攻略-第九节 描述和匹配兴趣点

一般而言,如果一个物体在一幅图像中被检测到关键点,那么同一个物体在其他图像中也会检测到同一个关键点。图像匹配是关键点的常用功能之一,它的作用包括关联同一场景的两幅图像、检测图像中事物的发生地点等等。 1.局部模板匹配 凭单个像素就…...

JSON-lib考古现场:在2025年打开赛博古董店的奇妙冒险

各位在代码海洋里捡贝壳的探险家们!今天我们要打开一个尘封的Java古董箱——JSON-lib!这货可是2003年的老宝贝,比在座很多程序员的工龄还大!准备好穿越回Web 1.0时代,感受XML统治时期的余晖了吗? &#x1f…...

Android: Handler 的用法详解

Android 中 Handler 的用法详解 Handler 是 Android 中用于线程间通信的重要机制,主要用于在不同线程之间发送和处理消息。以下是 Handler 的全面用法指南: 一、Handler 的基本原理 Handler 基于消息队列(MessageQueue)和循环器(Looper)工作&#xff0c…...

汇编学习之《push , pop指令》

学习本章前线了解ESP, EBP 指令 汇编学习之《指针寄存器&大小端学习》-CSDN博客 栈的特点: 好比一个垂直容器,可以陆续放入物体,但是先放的物体通常会被后面放的物体压着,只有等上面后放的物品拿出来后,才能…...

Python循环控制语句

1. 循环类型概述 Python提供两种主要的循环结构&#xff1a; while循环 - 在条件为真时重复执行for循环 - 遍历序列中的元素 2. while循环 基本语法 while 条件表达式:循环体代码示例 count 0 while count < 5:print(f"这是第{count1}次循环")count 13. f…...

微信小程序(下)

目录 在事件处理函数中为 data 中的数据赋值 事件传参 bindinput 的语法格式 实现文本框和 data 之间的数据同步 条件渲染 结合 使用 wx:if hidden wx:if与 hidden 的对比 wx:for 手动指定索引和当前项的变量名 wx:key 的使用 WXSS 和 CSS 的关系 什么是 rpx 尺寸…...

【零基础入门unity游戏开发——2D篇】2D 游戏场景地形编辑器——TileMap的使用介绍

考虑到每个人基础可能不一样&#xff0c;且并不是所有人都有同时做2D、3D开发的需求&#xff0c;所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要讲解C#的基础语法&#xff0c;包括变量、数据类型、运算符、…...

vector的介绍与代码演示

由于以后我们写OJ题时会经常使用到vector&#xff0c;所以我们必不可缺的是熟悉它的各个接口。来为我们未来作铺垫。 首先&#xff0c;我们了解一下&#xff1a; https://cplusplus.com/reference/vector/ vector的概念&#xff1a; 1. vector是表示可变大小数组的序列容器…...

ubuntu 22.04 解决LXC 报错CGroupV1 host system

解决CGroupV1 host system 报错 echo "cgroupv1 environment" sed -i s/^GRUB_CMDLINE_LINUX.*/GRUB_CMDLINE_LINUX_DEFAULT"quiet splash systemd.unified_cgroup_hierarchy0" / /etc/default/grub update-grub reboot 下载oracle 7 Linux 容器测试 l…...

JavaEE初阶复习(JVM篇)

JVM Java虚拟机 jdk java开发工具包 jre java运行时环境 jvm java虚拟机(解释执行 java 字节码) java作为一个半解释,半编译的语言,可以做到跨平台. java 通过javac把.java文件>.class文件(字节码文件) 字节码文件, 包含的就是java字节码, jvm把字节码进行翻译转化为…...

MINIQMT学习课程Day9

获取qmt账号的持仓情况后&#xff0c;我们进入下一步&#xff0c;如何获得当前账号的委托状况 还是之前的步骤&#xff0c;打开qmt&#xff0c;选择独立交易&#xff0c; 之后使用pycharm&#xff0c;编写py文件 导入包&#xff1a; from xtquant import xtdata from xtqua…...

动态规划似包非包系列一>组合总和IIV

目录 题目分析&#xff1a;状态表示&#xff1a;状态转移方程&#xff1a;初始化填表顺序返回值&#xff1a;代码呈现&#xff1a; 题目分析&#xff1a; 状态表示&#xff1a; 状态转移方程&#xff1a; 初始化填表顺序返回值&#xff1a; 代码呈现&#xff1a; class Soluti…...

Java 二叉树非递归遍历核心实现

非递归遍历的核心是用栈模拟递归的调用过程&#xff0c;通过手动维护栈来替代系统栈&#xff0c;实现前序、中序和后序遍历。以下是三种遍历的代码实现与关键逻辑分析&#xff1a; 一、二叉树遍历 1.1、前序遍历&#xff08;根 → 左 → 右&#xff09; 核心逻辑&#xff1a;…...

JavaScript性能优化实践:从微观加速到系统级策略

JavaScript性能优化实践:从微观加速到系统级策略 引言:性能优化的"时空折叠"思维 在JavaScript的世界里,性能优化如同在时间与空间的维度中折叠代码。本文将通过"时空折叠"的隐喻,从代码执行效率(时间维度)和内存占用(空间维度)两大核心,结合现代…...

《P1029 [NOIP 2001 普及组] 最大公约数和最小公倍数问题》

题目描述 输入两个正整数 x0​,y0​&#xff0c;求出满足下列条件的 P,Q 的个数&#xff1a; P,Q 是正整数。 要求 P,Q 以 x0​ 为最大公约数&#xff0c;以 y0​ 为最小公倍数。 试求&#xff1a;满足条件的所有可能的 P,Q 的个数。 输入格式 一行两个正整数 x0​,y0​。…...

【力扣hot100题】(052)课程表

什么人一学期要上2000节课啊jpg 看了非常久都没思路&#xff0c;主要是数据结构还没复习到图论&#xff0c;根本没思路怎么储存一个图…… 唯一记得的就是两种存储方法&#xff0c;一种是二维数组法&#xff0c;记录每一条边的有无&#xff0c;一种是只记录有的边&#xff0c…...

SpringBoot配置文件多环境开发

目录 一、设置临时属性的几种方法 1.启动jar包时&#xff0c;设置临时属性 ​2.idea配置临时属性 3.启动类中创建数组指定临时属性 二、多环境开发 1.包含模式 2.分组模式 三、配置文件的优先级 1.bootstrap 文件优先&#xff1a; 2.特定配置文件优先 3.文件夹位置优…...

RSA和ECC在密钥长度相同的情况下哪个更安全?

​现在常见的SSL证书&#xff0c;如&#xff1a;iTrustSSL都支持RSA和ECC的加密算法&#xff0c;正常情况下RAS和ECC算法该如何选择呢&#xff1f;实际上在密钥长度相同的情况下&#xff0c;ECC&#xff08;椭圆曲线密码学&#xff09;通常比RSA&#xff08;Rivest-Shamir-Adle…...

Dive into Deep Learning - 2.4. Calculus (微积分)

Dive into Deep Learning - 2.4. Calculus {微积分} 1. Derivatives and Differentiation (导数和微分)1.1. Visualization Utilities 2. Chain Rule (链式法则)3. DiscussionReferences 2.4. Calculus https://d2l.ai/chapter_preliminaries/calculus.html For a long time, …...

【备考高项】附录:合同法全文(428条全)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 第一章 一般规定第二章 合同的订立第三章 合同的效力第四章 合同的履行第五章 合同的变更和转让第六章 合同的权利义务终止第七章 违约责任第八章 其他规定第九章 买卖合同第十章 供用电、水、气、热力合同第十…...

Ubuntu安装Podman教程

1、先修改apt源为阿里源加速 备份原文件&#xff1a; sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup 修改源配置&#xff1a; vim sources.list删除里面全部内容后&#xff0c;粘贴阿里源&#xff1a; deb http://mirrors.aliyun.com/ubuntu/ focal main re…...

9.进程信号

信号量 信号量是什么&#xff1f; ​ 本质是一个计数器&#xff0c;通常用来表示公共资源中&#xff0c;资源数量多少的问题。 ​ 公共资源&#xff1a;可以被多个进程同时访问的资源。 访问没有保护的公共资源会导致数据不一致问题 什么是数据不一致问题 ​ 由于公共资源…...

python爬虫:小程序逆向(需要的工具前期准备)

前置知识点 1. wxapkg文件 如何查看小程序包文件 打开wechat的设置&#xff1a; .wxapkg概述 .wxapkg是小程序的包文件格式&#xff0c;且其具有独特的结构和加密方式。它不仅包含了小程序的源代码&#xff0c;还包括了图像和其他资源文件&#xff0c;这些内容在普通的文件…...