本文介绍了 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 | 学术论文 | 摘要 + 基于章节的处理 | |
| presentation | 幻灯片/演示文稿 | PDF、PPTX | 基于页面的处理,带图像提取 |
naive.chunk() 方法提供通用文档分块功能,支持基于令牌的分割和分隔符识别。它支持最广泛的文件类型,并作为大多数文档的默认方法。
主要功能
chunk_token_num(默认:128)"\n!?。;!?" 等模式进行分隔符分割处理流程
naive_merge() 进行基于令牌的合并来源:rag/app/naive.py349-540 rag/nlp/__init__.py512-548
qa.chunk() 方法专门用于从文档中提取问答对,非常适用于 FAQ 文档、考试材料和教学内容。
问题检测模式
第1问、Question 1、(1)处理策略
来源:rag/app/qa.py313-463 rag/nlp/__init__.py74-148
manual.chunk() 方法提供布局感知处理,适用于需要精确结构保留的文档,尤其适用于技术手册和结构化文档。
特性
bullets_category() 和 title_frequency() 保持布局层级来源: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() 方法处理结构化数据文件,将每一行转换为可搜索的分块,并进行适当的字段映射和类型检测。
数据类型检测
配置
来源:rag/app/table.py130-244 rag/app/table.py97-127
paper.chunk() 方法针对学术论文进行了优化,提取标题、作者、摘要和章节等关键组成部分,同时保留学术结构。
论文结构提取
特殊功能
来源:rag/app/paper.py140-208 rag/app/paper.py27-137
presentation.chunk() 方法处理基于幻灯片的内容,将每张幻灯片视为一个独立的分块,同时保留视觉信息。
特性
来源: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 结构 |
令牌计数和限制
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_kwd 和 title_tks 创建文档元数据支持视觉的分块方法与 LLM 服务集成
LLMBundle 和 LLMType.IMAGE2TEXT 进行图表增强