手写 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}")
相关推荐
冬奇Lab39 分钟前
RAG 系列(二):用 LangChain 搭建你的第一个 RAG Pipeline
人工智能·langchain·llm
dllmayday5 小时前
Milvus在LangChain中使用方法
人工智能·ai·langchain·milvus
倦王6 小时前
langchain 尚硅谷day4-5 Tool工具调用部分(function calling)
langchain
小陈的进阶之路7 小时前
LangChain/LangGraph对比
langchain
Flittly7 小时前
【LangGraph新手村系列】(3)PostgreSQL 持久化检查点:让状态跨越进程与重启
人工智能·python·langchain
JAVA面经实录9178 小时前
企业级java+LangChain4j-RAG系统 限流熔断降级
java·开发语言·分布式·langchain
hjxu20169 小时前
【LangGraph入门 3】精细控制之图的运行时配置和map-reduce
langchain·langgraph
hrhcode10 小时前
【LangGraph】二.State 和 Node 的设计细节
python·ai·langchain·langgraph·ai框架
Trouvaille ~11 小时前
零基础入门 LangChain 与 LangGraph(八):真正让 Agent“活起来”——持久化、记忆、人机交互与时间旅行
langchain·人机交互·agent·python3.11·持久化机制·langgraph·ai应用开发
abigale0312 小时前
LangChain:自定义模型・RAG 检索・Agent 原理笔记
langchain·llm·prompt·agent·rag·lcel