RAG技术详解(一):文档分片逻辑
-
文档分片 – 将大文档切分成小块
-
向量化与存储 – 将分片转换为向量并存入向量数据库
-
检索与生成 – 根据用户问题检索相关分片并生成答案
为什么需要文档分片?
三种常见文档的分片方案
1. PDF文档分片
PDF是最常见的文档格式之一。处理PDF需要的核心依赖:
<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>3.0.5</version></dependency><dependency><groupId>technology.tabula</groupId><artifactId>tabula</artifactId><version>1.0.5</version></dependency>
PDF支持的分片方式
-
章节标题分片(默认):按照文档的标题结构进行分片
-
固定长度分片:按照指定的字符数进行分片
-
正则表达式分片:自定义正则表达式作为分隔符
PDF分片的关键点
-
表格处理:PDF中的表格比较难识别,Tabula库可以帮助提取表格数据
-
跨页问题:表格或段落可能跨页,需要特殊处理
-
换行处理:PDF中的换行很多,需要合理合并
2. XLSX/Excel文档分片
Excel表格数据有其特殊性,需要的核心依赖:
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.4</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.4</version></dependency>
XLSX支持的分片方式
-
按行分片(默认):将Excel的每一行作为一个分片
-
按标题分片:按照表格的标题列进行分片
Excel分片的关键点
-
表头处理:确定哪一行是表头很重要
-
合并单元格:合并单元格的数据需要特殊处理
-
多Sheet:Excel可能有多个Sheet,需要分别处理
3. DOCX/Word文档分片
Word文档是最复杂的格式之一,需要的核心依赖:
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.4</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.4</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>5.2.4</version></dependency>
DOCX支持的分片方式
-
章节标题分片(默认):按照Word的标题样式进行分片
-
固定长度分片:按照字符数分片
-
正则表达式分片:自定义分隔符
Word分片的关键点
-
样式识别:Word的标题通常有特定的样式(标题1、标题2等)
-
图片处理:图片需要单独保存并在分片中引用
-
表格处理:Word中的表格也需要转换为合适的文本格式
其他常用工具库
处理文档时还有一些通用的工具库很实用:
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.16.1</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-csv</artifactId><version>1.10.0</version></dependency><dependency><groupId>com.googlecode.juniversalchardet</groupId><artifactId>juniversalchardet</artifactId><version>1.0.3</version></dependency><dependency><groupId>org.commonmark</groupId><artifactId>commonmark</artifactId><version>0.22.0</version></dependency>
分片策略设计模式
我们的代码采用了策略模式,每种文档类型都有自己的分片策略,同时每种策略内部又支持多种分片方式。这样的设计让扩展新的文档类型或分片方式非常方便。
总结
文档分片是RAG的第一步,也是非常关键的一步。好的分片能让后续的检索更精准。这篇文章我们介绍了:
-
RAG的三个阶段
-
PDF、XLSX、DOCX三种文档的分片方式
-
所需的Maven依赖
-
每种文档分片的注意事项
下一篇文章,我们会继续讲解向量化与存储,敬请期待!
扫码关注公众号,获取更多AI技术干货!
夜雨聆风