菜单

分块方法

相关源文件

本文介绍了 RAGFlow 中可用的文档分块策略。分块方法决定了文档如何被解析并分割成有意义的段落,以便进行索引和检索。不同的方法针对特定的文档类型和使用场景进行了优化。

有关更广泛的文档处理管道信息,请参阅文档处理管道。有关知识库管理操作,请参阅知识库管理

概述

RAGFlow 提供了针对不同文档类型和内容结构而定制的专用分块方法。每种方法都实现了一个 chunk() 函数,该函数接收一个文档文件,并返回一个包含元数据和分词的已处理分块列表。

分块系统支持多种文件格式,包括 PDF、DOCX、Excel、TXT、HTML、Markdown 和演示文稿格式。每种分块方法都应用了领域特定的解析逻辑,以在优化检索性能的同时保留语义意义。

可用分块方法

分块方法架构

来源:rag/app/naive.py349-540 rag/app/qa.py313-463 rag/app/manual.py175-276 rag/app/laws.py143-208 rag/app/table.py130-244 rag/app/one.py69-131 rag/app/book.py65-149 rag/app/paper.py140-208 rag/app/presentation.py97-143

按文档类型选择方法

方法主要用例文件类型主要功能
naive通用文档PDF、DOCX、Excel、TXT、HTML、MD、JSON基于令牌的分块,带分隔符
qa问答文档PDF、DOCX、Excel、TXT、CSV、MD提取问答对
manual手动处理PDF、DOCX结合层级的布局感知分块
laws法律文档PDF、DOCX、TXT、HTML基于层级章节的分块
table结构化数据Excel、CSV、TXT基于行的处理,带字段映射
one整个文档PDF、DOCX、Excel、TXT、HTML每个文档一个分块
book长篇内容PDF、DOCX、TXT、HTML基于章节的分块
paper学术论文PDF摘要 + 基于章节的处理
presentation幻灯片/演示文稿PDF、PPTX基于页面的处理,带图像提取

核心分块方法

朴素分块

naive.chunk() 方法提供通用文档分块功能,支持基于令牌的分割和分隔符识别。它支持最广泛的文件类型,并作为大多数文档的默认方法。

主要功能

  • 基于令牌的分块,可配置 chunk_token_num(默认:128)
  • 使用 "\n!?。;!?" 等模式进行分隔符分割
  • DOCX 和 PDF 文件的图像提取和处理
  • 视觉模型集成用于图表增强
  • 支持多种布局识别器

处理流程

  1. 基于文件类型的文档解析
  2. 带位置跟踪的文本提取
  3. 表格和图表提取
  4. 使用 naive_merge() 进行基于令牌的合并
  5. 最终分词和分块创建

来源:rag/app/naive.py349-540 rag/nlp/__init__.py512-548

问答文档分块

qa.chunk() 方法专门用于从文档中提取问答对,非常适用于 FAQ 文档、考试材料和教学内容。

问题检测模式

  • 编号问题:第1问Question 1(1)
  • 使用标题样式的 DOCX 文件中的层级结构
  • 带有问题标识符的项目符号模式

处理策略

  • PDF:使用正则表达式模式识别问题项目符号并提取问答对
  • DOCX:利用文档结构和标题级别
  • Excel/CSV:将列视为问答对
  • Markdown:使用标题级别来组织问题

来源:rag/app/qa.py313-463 rag/nlp/__init__.py74-148

手动文档处理

manual.chunk() 方法提供布局感知处理,适用于需要精确结构保留的文档,尤其适用于技术手册和结构化文档。

特性

  • 使用 bullets_category()title_frequency() 保持布局层级
  • 分节合并,可配置深度
  • 位置跟踪,实现精确文档映射
  • 支持 DeepDOC 和纯文本布局识别

来源:rag/app/manual.py175-276 rag/nlp/__init__.py392-509

laws.chunk() 方法处理具有层级章节结构的法律文档,保留法律、法规和法律文本的逻辑组织。

处理特性

  • 使用 hierarchical_merge() 进行层级章节合并
  • 移除内容表格以专注于主要内容
  • 基于冒号的标题检测,适用于法律格式
  • 支持带编号的条款结构

来源:rag/app/laws.py143-208 rag/nlp/__init__.py422-509

专业处理方法

表格处理

table.chunk() 方法处理结构化数据文件,将每一行转换为可搜索的分块,并进行适当的字段映射和类型检测。

数据类型检测

  • 自动推断列类型(整型、浮点型、文本、日期时间、布尔型)
  • 字段映射,带中文拼音转换
  • 标题处理,支持同义词
  • 基于行的分块生成

配置

  • CSV/TXT 文件可定制分隔符
  • 知识库配置中的字段映射存储
  • 多语言标题支持

来源:rag/app/table.py130-244 rag/app/table.py97-127

学术论文处理

paper.chunk() 方法针对学术论文进行了优化,提取标题、作者、摘要和章节等关键组成部分,同时保留学术结构。

论文结构提取

  • 从首页检测标题和作者
  • 摘要识别和单独处理
  • 分章节分块与层级合并
  • 参考文献处理

特殊功能

  • 学术格式的双栏布局检测
  • 摘要用特殊关键词标记为重要内容
  • 引用和参考文献保留

来源:rag/app/paper.py140-208 rag/app/paper.py27-137

演示文稿处理

presentation.chunk() 方法处理基于幻灯片的内容,将每张幻灯片视为一个独立的分块,同时保留视觉信息。

特性

  • 基于页面的分块(每张幻灯片一个分块)
  • 图像提取与保留
  • 支持 PDF 和 PPTX 格式
  • 生成缩略图以进行视觉搜索

来源:rag/app/presentation.py97-143

文本处理管道

分块处理流程

来源:rag/app/naive.py349-540 rag/nlp/__init__.py251-320

合并策略

系统根据文档结构和内容类型使用不同的合并策略

策略功能用例描述
基于令牌naive_merge()通用文档根据令牌计数限制合并文本
层级hierarchical_merge()结构化文档保留文档层级和章节边界
图像感知naive_merge_with_images()视觉文档处理文本-图像关联
DOCX 特有naive_merge_docx()Word 文档处理带嵌入图像的 DOCX 结构

令牌计数和限制

  • 默认分块大小:128个令牌
  • 可通过 chunk_token_num 参数配置
  • 使用 num_tokens_from_string() 进行精确令牌计数
  • 基于分隔符的分裂,可配置模式

来源:rag/nlp/__init__.py512-593 rag/nlp/__init__.py422-509 rag/nlp/__init__.py628-662

配置与自定义

解析器配置

每个分块方法都通过 parser_config 参数接收配置参数

布局识别选项

  • "DeepDOC":使用深度学习模型进行完整布局分析
  • "Plain Text":简单文本提取,不进行布局分析
  • 用于基于视觉处理的自定义模型名称

语言支持

所有分块方法都支持特定语言的处理

  • lang="Chinese"(默认):中文文本处理
  • lang="English":英文文本处理,使用不同分词方式
  • 混合语言文档的自动语言检测

语言特定功能

  • 中文与英文使用不同的分隔符模式
  • 适合语言的分词策略
  • 多语言中的问题模式识别

来源:rag/app/naive.py357-362 rag/nlp/__init__.py227-248

集成点

知识库集成

分块方法通过以下方式与知识库系统集成

  • 使用 docnm_kwdtitle_tks 创建文档元数据
  • 位置跟踪用于文档映射
  • 基于表格内容的字段映射存储
  • 图像和视觉内容的保留

LLM 集成

支持视觉的分块方法与 LLM 服务集成

  • 使用 LLMBundleLLMType.IMAGE2TEXT 进行图表增强
  • 视觉内容描述和分析
  • 多模态内容处理

来源:rag/app/naive.py373-389 api/db/services/llm_service.py