字符文本切分器CharacterTextSplitter和递归RecursiveCharacterTextSplitter)
文章目录1 文档切分器Text Splitters1.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 character2.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