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

RAGFlow源码解析-4、文档处理(deepdoc)(第二周)

一、文档解析器工厂架构详解1.1 deepdoc/parser/init.py解析器工厂完整解析代码完整解析(40行)# Licensed under the Apache License, Version 2.0 (the "License");# you may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.from.docx_parserimportRAGFlowDocxParserasDocxParser# Word文档解析器# 【设计】别名简化:RAGFlowDocxParser → DocxParser# 【职责】解析.docx文件,提取结构化文本和表格from.excel_parserimportRAGFlowExcelParserasExcelParser# Excel表格解析器# 【设计】别名简化:RAGFlowExcelParser → ExcelParser# 【职责】解析.xlsx文件,识别表格结构和数据from.html_parserimportRAGFlowHtmlParserasHtmlParser# HTML网页解析器# 【职责】解析HTML网页,提取文本和超链接from.json_parserimportRAGFlowJsonParserasJsonParser# JSON数据解析器# 【职责】解析JSON数据,提取结构化信息from.markdown_parserimportMarkdownElementExtractor# Markdown元素提取器# 【职责】提取Markdown标题、列表、代码块等元素from.markdown_parserimportRAGFlowMarkdownParserasMarkdownParser# Markdown文档解析器# 【职责】完整解析Markdown文档from.pdf_parserimportPlainParser# PDF纯文本解析器# 【职责】仅提取PDF文本,不OCR,速度快(适合纯文本PDF)from.pdf_parserimportRAGFlowPdfParserasPdfParser# PDF深度解析器# 【职责】OCR+布局分析+表格识别(适合复杂PDF,准确率高)from.ppt_parserimportRAGFlowPptParserasPptParser# PPT演示文稿解析器# 【职责】解析PPT,提取幻灯片文本和图片from.txt_parserimportRAGFlowTxtParserasTxtParser# 纯文本解析器# 【职责】解析.txt文件,最简单的解析器__all__=[# 模块导出控制,对外暴露的解析器"PdfParser",# PDF深度解析器(最复杂)"PlainParser",# PDF纯文本解析器(最简单)"DocxParser",# Word文档解析器"ExcelParser",# Excel表格解析器"PptParser",# PPT演示文稿解析器"HtmlParser",# HTML网页解析器"JsonParser",# JSON数据解析器"MarkdownParser",# Markdown文档解析器"TxtParser",# 纯文本解析器"MarkdownElementExtractor",# Markdown元素提取器(辅助工具)]# 【设计】导出顺序:按复杂度排序,PdfParser最复杂排第一# 【用途】外部模块通过 `from deepdoc.parser import PdfParser` 导入【设计模式分析】:工厂模式:__init__.py作为解析器工厂,统一管理所有解析器类别名模式:as DocxParser简化类名,便于使用(减少RAGFlow前缀)模块导出控制:__all__明确导出内容,避免私有解析器被误用职责分离:每个解析器专注单一文档格式,符合单一职责原则【技术决策】:为什么分开PlainParser和PdfParser?纯文本PDF用PlainParser速度快(直接提取文本)图片/扫描PDF用PdfParser准确率高(OCR识别)用户可根据文档类型选择合适解析器为什么用别名?原始类名RAGFlowPdfParser太长(15字符)别名PdfParser简洁(9字符)便于代码编写和阅读为什么导出MarkdownElementExtractor?提取Markdown元素是独立功能不依赖完整解析器用户可单独调用提取标题、列表等为什么支持9种格式?实际业务文档类型多样多格式支持提升适用性覆盖常见文档类型1.2 解析器工厂架构图.pdf.pdf纯文本.docx.xlsx.pptx.html.json.md.txt文档输入各种格式文件格式判断文件扩展名PdfParserOCR+布局+表格PlainParser文本提取DocxParser结构化提取ExcelParser表格识别PptParser幻灯片提取HtmlParser网页解析JsonParser数据解析MarkdownParser格式解析TxtParser纯文本OCR引擎文本识别布局识别器标题/段落/表格表格识别器结构识别文本块列表统一输出格式文本+位置+结构传递给RAG Pipeline分块和向量化1.3 解析器输出格式详解所有解析器统一输出格式(标准化处理):# 解析器输出格式示例(JSON结构){"document_id":"doc_123abc",# 文档唯一ID"pages":[# 页面列表(PDF多页,其他单页){"page_num":1,# 页码(从1开始)"blocks":[# 文本块列表{"type":"text",# 块类型:text/title/table/figure"text":"这是标题文本",# 文本内容"bbox":[100,200,500,250],# 坐标:[x0,y0,x1,y1]"page":1,# 所在页码"confidence":0.95,# OCR置信度(0-1)"layout_type":"Title",# 布局类型:Title/Text/Table等"font_size":18,# 字体大小(推断)"is_bold":True,# 是否粗体(推断)},{"type":"table",# 表格块"text":"表头1 | 表头2 | 表头3\n数据1 | 数据2 | 数据3","bbox":[100,300,600,500],"page":1,"html":"tabletrth表头1/th.../table",# 表格HTML"rows":5,# 行数"cols":3,# 列数},{"type":"text","text":"这是段落文本...","bbox":[100,520,600,700],"page":1,"layout_type":"Text",},],},{"page_num":2,# 第二页"blocks":[...],},],"total_pages":10,# 总页数"parse_time":12.5,# 解析耗时(秒)"parser_type":"PdfParser",# 使用的解析器类型}【输出格式设计】:统一结构:所有解析器输出相同格式,便于后续处理位置信息:bbox坐标支持文本定位和引用标注类型分类:type和layout_type区分标题、段落、表格等置信度:OCR置信度帮助判断识别准确性表格HTML:表格输出HTML格式,便于展示和引用二、PDF解析器核心源码详解PDF解析器是RAGFlow最复杂的解析器,包含OCR识别、布局分析、表格识别等多个核心模块。2.1 导入和全局变量详解(行17-53)importasyncio# 异步IO支持,并发处理多页importlogging# 日志记录,调试和监控importmath# 数学计算,坐标变换importos# 环境变量和路径操作importrandom# 随机数生成,可能用于采样importre# 正则表达式,文本清洗importsys# 系统操作,模块管理importthreading# 多线程支持,并发控制fromcollectionsimportCounter,defaultdict# 计数和分组工具fromcopyimportdeepcopy# 深拷贝,避免修改原始数据fromioimportBytesIO# 字节流处理,内存操作fromtimeitimportdefault_timerastimer# 性能计时,耗时分析/

相关文章:

RAGFlow源码解析-4、文档处理(deepdoc)(第二周)

一、文档解析器工厂架构详解 1.1 deepdoc/parser/init.py解析器工厂完整解析 代码完整解析(40行) # Licensed under the Apache License, Version 2.0 (the "License"); # you may obtain a copy of the License at # # http://www.apache.org/licenses/LIC…...

DBSCAN与GMM串联:从盖亚天文大数据中自动发现恒星关联结构

1. 项目概述:当机器学习遇见星空在盖亚(Gaia)卫星释放出海量高精度天体测量数据之前,天文学家识别一个疏散星团的成员星,往往需要结合自行、视差、颜色-星等图(CMD)等多维信息,在复杂…...

自动售货机(设计源文件+万字报告+讲解)(支持资料、图片参考_降重降ai)_文章底部可以扫码

摘 要 自动售货机的应用,不仅可以充分节省人力资源,而且还促进商业贸易发展,给人们的生活带来诸多便利。可编程控制器作为控制系统的大脑,按照工艺说明分析,对各种外部输入信号按照系统的工艺分析结果及程序设计流程&…...

JMeter深度实战:从HTTP接口测试到性能根因分析

1. 这不是“点点按钮就能出报告”的玩具,而是接口质量的显微镜很多人第一次打开JMeter,以为它就是个带图形界面的curl增强版——填个URL、点下“启动”,等几秒看个响应码,再导出个Excel就完事了。我刚接手电商中台接口测试时也这么…...

从Voronoi图到Lloyd算法:分布式传感器网络收敛性证明与工程实践

1. 从几何直觉到数学证明:理解传感器网络的收敛性在分布式传感器网络、无人机编队或者移动机器人集群的部署中,一个核心问题是如何让这些自主节点在没有中央控制器的情况下,高效、均匀地覆盖一个目标区域,并最终收敛到我们关心的关…...

初创公司如何通过Taotoken的Token Plan套餐有效控制AI实验成本

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初创公司如何通过Taotoken的Token Plan套餐有效控制AI实验成本 对于初创公司而言,在产品原型开发和AI功能探索阶段&…...

Playwright MCP配置决策树:企业级浏览器自动化选型指南

1. 这不是又一篇“选型对比”,而是我在三个真实项目里踩出来的配置决策树你点开这篇,大概率正被一个问题卡住:团队刚决定用 Playwright 做浏览器自动化,但没人能说清——到底该用它自带的 test runner?还是套一层 MCP&…...

m4s-converter深度解析:3步高效解决B站m4s文件转MP4的完整技术方案

m4s-converter深度解析:3步高效解决B站m4s文件转MP4的完整技术方案 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一…...

从0到1:如何打造一块高精度的工业级隔离数据采集卡?

http://www.z-linear.com 在工业自动化与智能制造的浪潮中,数据采集卡(DAQ)就像是系统的“感官神经”,负责将现实世界的温度、压力、电压、电流等物理量转化为数字世界的数据。然而,在复杂的工业现场,强电…...

2026财务分析师新人如何快速提升能力:从“账房先生”到“战略参谋”的跃迁之路

2026年的财务领域,规则已经彻底改写。传统的“记账、算账、报账”正在被RPA和AI快速替代,企业真正渴求的,不再是只会做账的“会计”,而是能够深入业务、洞察数据、驱动决策的财务分析师。这不仅是职业进阶的必然要求,更…...

PyTorch 模型迁移实战:从 GPU 到 NPU

前言 把在 GPU 上训练好的 PyTorch 模型迁到昇腾 NPU,大部分时候不难,但细节很多。这篇文章讲一个完整的迁移流程,从环境准备到性能验证。环境准备 安装驱动和工具包 # 检查 NPU 设备 lspci | grep d802# 安装驱动(已安装则跳过&a…...

Maven POM(项目对象模型)

Maven POM(项目对象模型) 引言 Maven 是一个强大的构建自动化工具,用于简化项目构建、依赖管理和项目信息维护。在 Maven 中,每个项目都有一个名为 pom.xml 的配置文件,该文件被称为项目对象模型(Project Object Model,简称 POM)。本文将详细介绍 Maven POM 的结构和…...

ARM SME指令集:SQCVT与SQRSHR深度解析与应用

1. ARM SME指令集概述在当今处理器架构设计中,向量化计算已成为提升性能的关键技术。作为ARMv9架构的重要扩展,可扩展矩阵扩展(Scalable Matrix Extension,SME)指令集引入了多项创新特性,其中FEAT_SME2扩展…...

工厂适合做跨境独立站吗?5个判断标准

工厂适合做跨境独立站吗?5个判断标准对很多制造企业来说,跨境电商独立站确实是一条值得认真考虑的出海路径。但它并不适合所有工厂一上来就重投入。要不要做独立站,关键不在于“别人都在做”,而在于产品是否适合、预算是否可控、团…...

gmapping算法源码实现分析(一)

gmapping算法源码实现分析(一) —— slam-gmapping功能包主干流程分析 1. slam_gmapping.cpp 初始化流程: SlamGmapping() 构造函数├─> init() - 创建 GridSlamProcessor 实例,读取参数└─> startLiveSlam() - 设置订阅和回调├─&g…...

2026年降AI工具会不会被知网检测到深度解读:使用降AI工具算学术不端吗免费完整分析

2026年降AI工具会不会被知网检测到深度解读:使用降AI工具算学术不端吗免费完整分析 关于降AI工具被知网检测到解读,我整理了几个核心问题,逐一分析。 实战方案先给出来:应对AIGC检测最有效的是专业工具深层文本重构,…...

2026年降AI后语义失真攻略:过度改写论点跑偏4.8元修复语义同时达标完整方案

2026年降AI后语义失真攻略:过度改写论点跑偏4.8元修复语义同时达标完整方案 从AI率71%到5.9%,我用了一个晚上。降AI后语义失真修复完整经历。 核心工具:嘎嘎降AI(www.aigcleaner.com),4.8元,达…...

伽马暴宇宙学分析中流量阈值选择的敏感性研究

1. 研究背景与核心问题在伽马射线暴(GRB)的宇宙学研究领域,一个长期困扰我们的核心问题是:我们看到的GRB样本,究竟在多大程度上反映了它们在宇宙中的真实分布?这听起来像是个哲学问题,但在实际操…...

别再只用SSH了!给CentOS 7.9服务器装上图形桌面,用VNC远程操作真香

解锁CentOS 7.9图形化运维:VNC远程桌面实战指南在Linux服务器管理的日常工作中,纯命令行操作虽然高效,但遇到复杂的文件管理、图形化工具调试或团队协作时,图形界面往往能事半功倍。本文将带您从零开始,为CentOS 7.9服…...

Windows 11热键冲突别抓狂!用OpenArk一键揪出‘元凶’并释放你的Ctrl+C

Windows 11热键冲突终极排查指南:用OpenArk精准定位并解决问题每次按下CtrlC却毫无反应,或者发现AltTab突然失效时,那种挫败感简直让人抓狂。作为每天要与数十个软件打交道的设计师,我深刻理解热键冲突对工作效率的致命影响。本文…...

基于变分自编码器的类星体光谱无监督分析:QUEST工具原理与实践

1. 项目概述与核心价值如果你也和我一样,长期和斯隆数字巡天(SDSS)这类大型巡天项目产生的海量光谱数据打交道,那你一定理解那种感受:面对动辄数十万条光谱,传统的基于模板匹配或人工特征提取的分析方法&am…...

用Linux内核模块复现AMDGPU的dma-fence:一个可运行的Ring Buffer同步模型Demo

从零构建Linux内核模块:AMDGPU风格dma-fence环形缓冲区同步模型实战在Linux内核开发领域,GPU驱动开发一直被认为是技术门槛较高的方向之一。AMDGPU作为现代显卡的开源驱动,其内部实现涉及复杂的同步机制,其中dma-fence作为核心同步…...

CentOS7 搭建 Kubernetes 集群

CentOS7 搭建 Kubernetes 集群完整指南 基于提供的文档,本文提供kubeadm快速搭建(推荐新手)和二进制手动搭建(生产可控)两种方案,所有步骤均适配CentOS7系统。 一、通用前置准备(两种方式都需执…...

ARMv9 SME指令集:FDOT浮点点积操作深度解析

1. SME指令集与浮点点积操作概述在当代处理器架构设计中,向量化计算能力已成为衡量芯片性能的关键指标。作为ARMv9架构的重要扩展,SME(Scalable Matrix Extension)指令集专门针对矩阵运算进行了深度优化,其中多向量浮点…...

3D激光SLAM入门:点云曲率计算与LOAM边缘/平面特征提取(附代码)

专栏系列:3D激光SLAM从零到精通 | 难度:中级 | 预计阅读:25分钟 前置知识:Python编程,numpy基础,3D点云的基本概念 摘要 本文深入讲解3D激光SLAM中最基础也是最关键的一环——点云特征提取。我们将从LOAM论…...

AlphaEvolve:LLM与进化算法融合的自动代码优化系统

1. 项目概述:AlphaEvolve系统架构与核心思想AlphaEvolve代表了当前算法自动优化领域最前沿的技术突破。这个由Google DeepMind团队开发的系统,创造性地将大语言模型(LLM)的代码生成能力与进化算法的迭代优化机制相结合,形成了一个自主进化的编…...

图自编码器在金融风控中的拓扑模式检测实践

1. 项目概述:当图机器学习遇上金融风控在金融科技领域摸爬滚打了十几年,我见过太多风控系统从“规则为王”到“数据驱动”的变迁。早期的反洗钱(AML)和反欺诈系统,本质上是一套复杂的“如果-那么”规则库:如…...

为什么你的ChatGPT公众号打开率不足8%?腾讯内部流出的3类高唤醒标题公式(限时公开)

更多请点击: https://intelliparadigm.com 第一章:ChatGPT公众号打开率低迷的底层归因诊断 公众号打开率持续低于行业均值(5.2% vs 行业中位数12.7%),表面是内容吸引力不足,实则暴露了用户触达链路中多个结…...

ChatGPT绘画提示词生成效率革命(92%设计师不知道的5层语义嵌套法)

更多请点击: https://kaifayun.com 第一章:ChatGPT绘画提示词生成效率革命(92%设计师不知道的5层语义嵌套法) 传统提示词工程常陷于“关键词堆砌”误区,而真正高阶的生成控制源于语义结构的纵深组织。5层语义嵌套法将…...

Windows屏幕录制全栈实现:Graphics Capture+FFmpeg零拷贝编码

1. 这不是“调个API就完事”的录制功能,而是要亲手把屏幕变成可编程的视频流管道很多人看到“FFmpeg屏幕录制”第一反应是:网上一搜,几十个C#封装库,NuGet install一下,几行代码start()就完事。我去年也这么想——直到…...