agentic_huge_data_base / wiki
页面 RAGFlow · 6.2 切分方法·DeepWiki 中文全文译文

6.2 · 切分方法(Chunking Methods)

复杂文档理解与引用检索 · 聚焦本章的模块关系、源码依据与实现要点。

项目RAGFlow 章节6.2 状态全文译文 模块图谱与关系、界面与交互、入库与解析、文档对象与元数据
源码线索
  • deepdoc/parser/excel_parser.py
  • rag/app/book.py
  • rag/app/laws.py
  • rag/app/manual.py
  • rag/app/naive.py
  • rag/app/one.py
  • rag/app/paper.py
  • rag/app/presentation.py
  • rag/app/qa.py
  • rag/app/table.py
模块标签
  • 图谱与关系
  • 界面与交互
  • 入库与解析
  • 文档对象与元数据
  • 系统架构

章节正文

切分方法

片段切分方法

相关源文件

以下文件为本维基页面的生成提供了上下文:

  • deepdoc/parser/excel_parser.py
  • rag/app/book.py
  • rag/app/laws.py
  • rag/app/manual.py
  • rag/app/naive.py
  • rag/app/one.py
  • rag/app/paper.py
  • rag/app/presentation.py
  • rag/app/qa.py
  • rag/app/table.py
  • rag/nlp/__init__.py
  • web/src/components/auto-keywords-form-field.tsx
  • web/src/components/chunk-method-dialog/index.tsx
  • web/src/components/chunk-method-dialog/use-default-parser-values.ts
  • web/src/components/delimiter-form-field.tsx
  • web/src/components/entity-types-form-field.tsx
  • web/src/components/excel-to-html-form-field.tsx
  • web/src/components/llm-setting-items/slider.tsx
  • web/src/components/max-token-number-from-field.tsx
  • web/src/components/originui/number-input.tsx
  • web/src/components/page-rank-form-field.tsx
  • web/src/components/parse-configuration/graph-rag-form-fields.tsx
  • web/src/components/parse-configuration/raptor-form-fields.tsx
  • web/src/components/slider-input-form-field.tsx
  • web/src/constants/form.ts
  • web/src/hooks/parser-config-utils.ts
  • web/src/interfaces/database/document.ts
  • web/src/interfaces/request/document.ts
  • web/src/pages/dataset/dataset-setting/configuration/common-item.tsx
  • web/src/pages/dataset/dataset-setting/configuration/naive.tsx
  • web/src/pages/dataset/dataset-setting/form-schema.ts
  • web/src/pages/dataset/dataset-setting/index.tsx
  • web/src/pages/dataset/dataset-setting/saving-button.tsx
  • web/src/pages/dataset/dataset/use-change-document-parser.ts
  • web/src/pages/datasets/dataset-creating-dialog.tsx
  • web/src/pages/datasets/hooks.ts
  • web/src/stories/number-input.stories.ts

目的与范围

本文档说明了 RAGFlow 中各种片段切分策略的技术实现和使用场景。片段切分是将解析后的文档内容拆分为离散、语义完整的片段,以便进行索引和检索的过程。RAGFlow 提供了多种专门的片段切分模式,每种模式都针对特定的文档结构(如法律条文、学术论文或电子表格行)进行了优化。

关于片段切分之前的文档解析信息,请参阅 6.1 文档解析策略。关于片段切分之后的嵌入向量生成信息,请参阅 6.3 内容增强与嵌入向量

片段切分模式概览

RAGFlow 将片段切分策略实现为 rag/app/ 目录下的专用模块。每个模块都包含一个 chunk() 函数,用于编排解析和拆分逻辑。

模式模块主要使用场景关键特性
通用naive.py通用文档基于 Token 的拆分、基于分隔符、支持大多数格式 rag/app/naive.py:763-1028
手动manual.py结构化文档通过章节层级保留层次结构 rag/app/manual.py:137-236
问答qa.py问答对使用正则表达式项目符号检测和布局提取问答对 rag/app/qa.py:109-250
表格table.py结构化数据基于行的 Excel/CSV 片段切分,支持图片和大语言模型(LLM)生成的图片描述 rag/app/table.py:39-128
书籍book.py长文本内容章节的层次化合并、目录移除、基于视觉的图表解析 rag/app/book.py:63-162
法律laws.py法律文档基于树的片段切分,保留条文和层次化规则 rag/app/laws.py:56-85
论文paper.py学术论文元数据提取(包括标题、作者、摘要),以及基于 Token 的片段切分 rag/app/paper.py:149-260
演示文稿presentation.py幻灯片/演示文稿每个 PDF 页面作为一个片段,包含布局和表格分析以获取全页文本 rag/app/presentation.py:35-115
整篇one.py整篇文档单个片段,保留原始顺序,适用于小型文档 rag/app/one.py:59-167
知识图谱(未完全展示)知识图谱提取用于实体和关系提取(在 UI 配置中引用)

来源: rag/app/naive.py:763-1028rag/app/manual.py:137-236rag/app/qa.py:109-250rag/app/table.py:39-128rag/app/book.py:63-162rag/app/laws.py:56-85rag/app/paper.py:149-260rag/app/presentation.py:35-115rag/app/one.py:59-167

片段切分架构

片段切分过程由后台任务执行器编排,该执行器根据数据集中配置的 parser_id 选择应用程序模块。

片段切分逻辑流程
RAGFlow · 片段切分逻辑流程 · 图 1
RAGFlow · 片段切分逻辑流程 · 图 1

来源: rag/app/naive.py:86-184rag/app/manual.py:137-173rag/nlp/__init__.py:31-31common/token_utils.py:21-21

通用片段切分

通用片段切分提供了一种广泛适用的方法,适用于 PDF、DOCX、TXT、Markdown 和 HTML 等通用文档类型。

实现细节
  • rag/app/naive.py 中的 chunk() 函数使用布局识别器(例如 DeepDOC 或纯文本)执行解析。
  • 文本使用可配置的分隔符和 Token 限制进行拆分,由以下参数控制:
    • chunk_token_num(默认 512 个 Token)
    • delimiter(默认 "\n!?。;!?"
    • layout_recognize(默认 "DeepDOC"
  • 解析使用多种后端:DeepDOC、MinerU OCR 或根据配置回退到纯文本方法。
  • 解析后,naive_merge() 以 Token 感知的方式合并文本段落,直到达到片段大小限制。
数据流和关键函数
RAGFlow · 数据流和关键函数 · 图 2
RAGFlow · 数据流和关键函数 · 图 2
  • naive_merge() 遵循自然分隔符和 Token 长度,基于语义边界生成片段。
  • 位置信息编码为标签:@@page\tleft\tright\ttop\tbottom## 附加到片段文本中 rag/app/naive.py:820-825

来源: rag/app/naive.py:763-1028rag/nlp/__init__.py:1145-1300common/token_utils.py:21-21

手动片段切分

手动片段切分保留文档的层次化结构,适用于具有定义段落或问题的文档。

实现细节
  • 基于 rag/app/manual.py,解析器通过 PdfParser 或 DOCX 中的段落结构提取布局块。
  • 使用 docx_question_level() 识别标题或问题层级,并使用栈结构维护层次关系。
  • 使用布局坐标垂直合并文本,保留章节标题和子章节。
  • 表格和图片使用媒体上下文进行包装。
关键类和方法
  • Pdf 类扩展了 PdfParser,实现了 OCR、布局分析、表格提取和垂直文本合并 rag/app/manual.py:33-67
  • Docx 类解析问题层级并组装层次化的问答段落 rag/app/manual.py:70-134

来源: rag/app/manual.py:33-134rag/nlp/__init__.py:169-233

问答片段切分

此模式针对结构化为显式问答对的文档,例如测验或常见问题解答(FAQ)。

实现细节
  • 使用 rag/nlp/__init__.pyQUESTION_PATTERN 下定义的正则表达式模式来检测问题项目符号和编号 rag/nlp/__init__.py:75-87
  • rag/app/qa.py 解析 PDF 和 Excel 表格:
    • 将 PDF 解析为段落,检测问题项目符号并关联答案。
    • 解析 Excel 表格,提取列作为(问题,答案)对。
  • 在适用时将图片和表格合并到问答片段中。
关键处理步骤
  1. OCR 和布局分析提取文本块。
  2. 使用 has_qbullet() 方法检测问题项目符号及其索引。
  3. 使用位置和项目符号模式逻辑将问题与答案配对。
  4. 在合并文本之前,按页面和顶部位置对关联的表格进行排序。

来源: rag/nlp/__init__.py:75-87rag/app/qa.py:109-250

表格片段切分

表格片段切分专注于 Excel 或 CSV 等结构化表格数据,为每行生成片段,同时集成与单元格关联的图片。

实现细节
  • Excel 文件使用 rag/app/table.py 中的 Excel 类进行解析,该类扩展了 ExcelParser
  • 嵌入在 Excel 工作表中的图片使用基于大语言模型(LLM)的视觉图表解析器进行提取和描述 rag/app/table.py:58-67
  • 数据行转换为 pandas DataFrame,然后每行序列化为文本片段。
  • 带有描述的单元格图片被注入到相应的 DataFrame 单元格中。
数据流
RAGFlow · 数据流 · 图 3
RAGFlow · 数据流 · 图 3

来源: rag/app/table.py:39-128deepdoc/parser/excel_parser.py:110-153

演示文稿片段切分

专为幻灯片(PPT/PDF)设计,此模式将每个幻灯片或 PDF 页面视为一个独立的片段,捕获完整的视觉上下文。

实现细节
  • rag/app/presentation.py 提供了 Pdf 解析器,运行 OCR、布局和表格分析。
  • 每个页面的文本和表格/图表内容按页码分组。
  • 文本和表格按垂直 top 和水平 x0 位置排序,以保持页面上的阅读顺序。
  • 返回一个片段列表,其中每个片段是幻灯片/页面的拼接文本内容及其缩略图。
关键步骤
  1. 提取每个页面上的图片和文本块。
  2. 提取表格和图表并合并到页面分组中。
  3. 按位置对页面上的所有项目进行排序。
  4. 聚合并返回完整的页面文本以及页面图片。

来源: rag/app/presentation.py:35-115

法律文档片段切分

法律文档需要保留层次化的条文和章节,非常适合法律法规。

实现细节
  • 使用 docx_question_level() 识别段落层级(例如,章、条)。
  • 使用 rag/nlp 中的 Node 构建文档的树形表示,以捕获深度和子节点 rag/app/laws.py:56-85
  • 将层次化树展平为语义片段,保留问答风格。
  • 支持 DOCX 和 PDF 输入,具有专门的布局合并功能。
处理流程
RAGFlow · 处理流程 · 图 4
RAGFlow · 处理流程 · 图 4

来源: rag/app/laws.py:56-85rag/nlp/__init__.py:24-25

论文片段切分

针对学术论文进行了优化,此模式提取元数据并保留语义结构。

实现细节
  • 通过扫描预定义关键词和布局线索,分别提取标题、作者和摘要。
  • 使用 Token 限制合并文本,并拼接表格和图表。
  • 必要时通过排序框来处理双栏布局。
  • 使用 DeepDOC 或其他布局解析器进行提取。
  • 返回包含元数据和段落的复合字典。

来源: rag/app/paper.py:149-260

整篇片段切分

整篇模式将整个文档视为一个片段,保持原始顺序。

实现细节
  • 支持 DOCX、PDF、Excel、TXT、Markdown 和 HTML。
  • 对于 DOCX,合并文本和表格表示,附加大语言模型(LLM)增强的图片描述。
  • 对于 PDF,使用布局识别并合并内容,保持顺序。
  • 对于 Excel,将工作表转换为 HTML 段落作为片段。
  • 对于其他文本文件,按行拆分并作为一个片段返回。
  • 最小化拆分,主要保留原始序列,之后进行 Token 化。

来源: rag/app/one.py:59-167

知识图谱片段切分(概念性)

虽然实现细节未完全展示,但此模式在 UI 配置中被引用,旨在将文档处理为实体和关系,以支持知识图谱提取。

通用处理工具

视觉图表解析
  • 大语言模型(LLM)增强的视觉图表解析器函数(例如 vision_figure_parser_pdf_wrappervision_figure_parser_figure_xlsx_wrapper)提供自动图片描述增强。
  • 集成在表格和通用片段切分管线中。
Token 化和 Token 计数
  • rag_tokenizer 提供所有片段切分方法使用的 Token 化函数。
  • 通过 num_tokens_from_string() 计算 Token 数量,用于 Token 预算控制。
上下文附加
  • attach_media_context() 在配置的 Token 限制内,在图片和表格周围添加附近的文本上下文,以丰富片段内容。
图表:将自然语言空间桥接到代码实体空间以进行片段切分
RAGFlow · 图表:将自然语言空间桥接到代码实体空间以进行片段切分 · 图 5
RAGFlow · 图表:将自然语言空间桥接到代码实体空间以进行片段切分 · 图 5
图表:任务执行器中的片段切分管线和集成
RAGFlow · 图表:任务执行器中的片段切分管线和集成 · 图 6
RAGFlow · 图表:任务执行器中的片段切分管线和集成 · 图 6

汇总表:片段切分模式与特性

模式支持的文件类型描述Token 处理特殊功能
通用PDF、DOCX、TXT、HTML、Markdown通用片段切分基于 Token 的拆分位置标签、基于分隔符
手动PDF、DOCX保留标题的结构化片段切分层次化堆叠基于布局的垂直合并
问答PDF、Excel问答对提取与项目符号关联项目符号正则表达式检测
表格Excel、CSV表格数据的基于行片段切分每行 Token带 LLM 描述的图片
书籍DOCX、PDF、TXT、HTML带层次化合并的长文档层次化合并目录移除、视觉图表解析
法律DOCX、PDF保留条文的法律文档树结构片段问题层级和节点树
论文PDF学术论文元数据和段落基于 Token 的片段切分元数据提取
演示文稿PPT、PDF基于幻灯片的片段切分,页面粒度每页一个片段页面图片作为缩略图
整篇DOCX、PDF、Excel、TXT整个文档作为一个片段单个片段保留阅读顺序
知识图谱(多种)用于知识图谱的实体和关系提取未完全展示实体类型过滤器(UI)

参考文献

  • rag/app/naive.py:763-1028 — 通用片段切分实现
  • rag/app/manual.py:137-236 — 保留布局层次的手动片段切分
  • rag/app/qa.py:109-250 — 问答片段切分逻辑
  • rag/app/table.py:39-128 — 带 Excel 和图片支持的表格片段切分
  • rag/app/book.py:63-162 — 带目录移除和层次结构的书籍片段切分
  • rag/app/laws.py:56-85 — 使用树结构的法律文档片段切分
  • rag/app/paper.py:149-260 — 带元数据的学术论文片段切分
  • rag/app/presentation.py:35-115 — 演示文稿幻灯片片段切分
  • rag/app/one.py:59-167 — 整个文档的单个片段
  • rag/nlp/__init__.py — Token 化器、项目符号模式、Token 计数
  • common/token_utils.py — Token 计数工具
  • deepdoc/parser/excel_parser.py:110-153 — Excel 图片提取和工作簿工具
  • web/src/components/chunk-method-dialog/index.tsx — 解析器参数的 UI 配置

本文档全面概述了 RAGFlow 中实现的片段切分方法,将面向用户的自然语言策略桥接到精确的后端代码路径和功能。