手写 langchain 的 递归文本分割RecursiveCharacterTextSplitter

docs.langchain.com/oss/python/...

py 复制代码
from langchain_text_splitters import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=0)
texts = text_splitter.split_text(document)
py 复制代码
#from langchain.text_splitter import RecursiveCharacterTextSplitter

class RecursiveCharacterTextSplitter:
    def __init__(self,chunk_size=128,chunk_overlap=30,separators=None):
        self.chunk_size=chunk_size
        self.chunk_overlap=chunk_overlap
        if separators is None:
            self.separators=["\n\n","\n"," ",""]
        else:
            self.separators=separators
    def split_text(self,text):
        def recursive_split(txt,seps):
            if not seps:
                # 1 txt[0:50] txt[50,100] txt[100,150]
                return [
                    txt[i:i+self.chunk_size]
                    for i in range(0,len(txt),self.chunk_size)
                ]
            #取出第一个分隔符
            sep = seps[0]
            #按当前的分隔符进行分割文本
            parts = txt.split(sep)
            #初始化结果列表
            result = []
            for part in parts:
                # 如果不是最后一段,需要补回分隔符
                if part != parts[-1]:
                    part = part+sep
                #如果当前段落长度大于规定的每个块的长度,递归使用下一个分隔符继续分割
                if len(part)>self.chunk_size:
                    result.extend(recursive_split(part,seps[1:]))
                else:
                    result.append(part)
            return result

        # 递归分割文本,并去除空白分块
        splits = [
            s for s in recursive_split(text,self.separators) if s.strip()
        ]
        return splits
        

r_splitter = RecursiveCharacterTextSplitter(
    chunk_size=50,# 每个分块最大50个字符
    #chunk_overlap=2,#相邻分块重叠是10个字符
    separators = [
        "\n\n",#段落分割符
        "\n",# 换行符分割符
        ".",#英文句号分割符
        "。",# 中文句号分割符
        ",",# 英文逗号分割符
        ","# 中文逗号分割符
    ]
)
text = """"""

chunks = r_splitter.split_text(text)
for i ,chunk in enumerate(chunks):
    print(f"Chunk{i+1}: {chunk}")
相关推荐
Darling噜啦啦2 小时前
揭秘 LLM 的随机性黑盒:从 Temperature + Top-K 到 LangChain Chain 工作流实战
langchain·llm
迷途呀5 小时前
Python:函数中的参数类型
开发语言·笔记·python·langchain·nlp
python在学ing9 小时前
LangChain完全指南:从核心组件到RAG与Agent实战
langchain
BraveWang11 小时前
【LangChain 1.x】09、工具进阶|ToolRuntime、Command 与动态工具选择
langchain
早点睡啊Y12 小时前
深入学 LangChain 官方文档(十四)MCP 模型上下文协议首讲
langchain
草莓熊Lotso13 小时前
【LangChain】输出解析器全解:让大模型输出从 “聊天” 变 “机器可读”
服务器·数据库·python·langchain·pip
徐小超13 小时前
从一句 Hello World 到完整 RAG 系统:一个 AI 知识库的架构选型实录
langchain·node.js·ai编程
小白说大模型1 天前
从向量嵌入到复杂 Agent:LLM、LangChain、LangGraph 完整科普
java·开发语言·人工智能·gpt·深度学习·langchain
geo搜搜果数据1 天前
实测AI搜索GEO监测工具:对比DeepSeek与豆包品牌排名差异
人工智能·langchain·embedding·搜搜果
YIAN1 天前
大模型总 "胡说八道"?用 LangChain.js 从零实现 RAG 语义检索系统
javascript·langchain