文章目录
- 1 文档切分器Text Splitters
- 1.1 为什么分割/切分/分块
- 1.2 Chunking拆分的策略
- 1.3 TextSplitter源码分析
- 1.3.1 split_text(text)
- 1.3.2 create_documents(texts, metadatas=None)
- 1.3.3 split_documents(documents)
- 2 具体实现
- 2.1 CharacterTextSplitter:Split by character
- 2.1.1 举例1:字符串文本的分割
- 2.1.2 举例2:指定分割符
- 2.1.3 举例3:指定分割符
- 2.2 RecursiveCharacterTextSplitter:最常用
- 2.2.1 举例1:使用split_text(传字符串)
- 2.2.2 举例2:使用create_documents(传字符串列表)
- 2.2.3 逐步分割过程
- 2.2.4 举例3:使用create_documents(加载本地字符串列表)
- 2.2.5 举例4:使用split_documents(传文档列表)
- 2.2.6 举例5:自定义分隔符
- 2.3 RecursiveCharacterTextSplitter底层原理
- 2.3.1 先拆分
- 2.3.2 后合并
- 2.3.3 直观理解
字符文本切分器。CharacterTextSplitter和递归字符文本切分器RecursiveCharacterTextSplitter。
split_text(字符串),create_documents(字符串列表),split_documents(文档列表)。
1 文档切分器Text Splitters
可视化展示文本如何分割的工具
1.1 为什么分割/切分/分块
获取Document对象后,需要将其切分成一个个小块(Chunk)。之所以要进行切分是出于以下考虑:
(1)长文档问题:大模型存在最大输入的Token限制 ,如果一个 Document非常大 ,在输入大模型时会被截断 ,导致信息缺失。
(2)检索精度:Document可能包含非常多无关的信息 ,这些无效信息会干扰大模型的生成,而小块检索更精准。
(3)成本控制:减少不必要的token消耗 。
无论是在存储还是检索过程中,都以这些块(chunk)为基本单位,这样能有效地避免内容噪声干扰和超出最大 Token 的问题。
1.2 Chunking拆分的策略
方法1:根据句子切分:这种方法按照自然句子边界进行切分,以保持语义完整性。
方法2:按照固定字符数来切分:这种策略根据特定的字符数量来划分文本,但可能会在不适当的位置切断句子。
方法3