手写 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}")
相关推荐
Csvn18 小时前
🌟 LangChain 30 天保姆级教程 · Day 13|OutputParser 进阶!让 AI 输出自动转为结构化对象,并支持自动重试!
python·langchain
InKomorebi1 天前
LangChain Tools:BaseTool/Callable/Runnable 核心类型 | 三种工具定义方式 | 串行与并行调用 | 错误处理与重试降级
langchain
怕浪猫1 天前
第10章 RAG(检索增强生成)系统构建(LangChain实战)
langchain·aigc·ai编程
阿捞21 天前
python-langchain框架(3-20-智能问答ZeroShot_ReAct Agent 从零搭建)
python·react.js·langchain
qyhua1 天前
开源推荐 | ModelX RAG:基于 LangChain + Ollama 的企业级知识库系统
python·langchain·开源
斯外戈的小白1 天前
【Agent】LangChain 1.0架构
架构·langchain
tkevinjd2 天前
基于LangChain的简易智能旅游助手Agent
langchain·agent
liu****2 天前
LangChain-AI应用开发框架(七)
人工智能·python·langchain·大模型应用·本地部署大模型
秦jh_2 天前
【LangChain】大模型介绍
langchain
InKomorebi2 天前
LangChain Agent 中间件完全指南:六种钩子函数从入门到生产(附完整教学代码)
langchain