(LangChain实战18):LangChain文本分割器的介绍与使用
LangChain文本分割器详解一、基础准备fromlangchain_community.document_loadersimportTextLoaderfromlangchain_text_splittersimportCharacterTextSplitter,RecursiveCharacterTextSplitter# 加载文档file_path./file/常见问题.txttext_loadTextLoader(file_pathfile_path,encodingutf-8)docstext_load.load()# 假设常见问题.txt内容如下 欢迎使用我们的产品 常见问题汇总 问如何注册账号 答点击首页右上角的注册按钮填写手机号和验证码即可完成注册。 问忘记密码怎么办 答在登录页面点击忘记密码通过手机验证码重置密码。 问如何联系客服 答可以通过在线客服、客服电话400-123-4567或发送邮件到supportexample.com联系我们。 技术支持电话400-123-4567 服务时间周一至周日 9:00-21:00 二、CharacterTextSplitter的两种分割方式方式1禁用分隔符的字符级分割fordocindocs:splitterCharacterTextSplitter(chunk_size50,chunk_overlap5,separator# 空字符串禁用分隔符)contentssplitter.split_text(doc.page_content)fore,contentinenumerate(contents):print(f{e1}、{content})# 输出示例# 1、欢迎使用我们的产品## 常见问题汇总## 问如何注册# 2、册账号# 答点击首页右上角的注册按钮填写# 3、写手机号和验证码即可完成注册。## 问忘记密码# 4、码怎么办# 答在登录页面点击忘记密码通过# 5、过手机验证码重置密码。## 问如何联系# 6、系客服# 答可以通过在线客服、客服电话400-# 7、-123-4567或发送邮件到supportexa# 8、ample.com联系我们。## 技术支持电# 9、电话400-123-4567# 服务时间周一至周日 9:00-21:00特点简单粗暴按字符数硬切可能切断完整句子如注册被切成册和账号方式2指定分隔符的段落级分割fordocindocs:splitterCharacterTextSplitter(chunk_size150,# 调小以便看到分割效果chunk_overlap20,separator\n\n# 按段落分割)contentssplitter.split_text(doc.page_content)fore,contentinenumerate(contents):print(f块{e1}(长度:{len(content)}字符):)print(content)print(-*40)# 输出示例# 块 1 (长度: 47 字符):# 欢迎使用我们的产品## 常见问题汇总# ----------------------------------------# 块 2 (长度: 122 字符):# 问如何注册账号# 答点击首页右上角的注册按钮填写手机号和验证码即可完成注册。# ----------------------------------------# 块 3 (长度: 96 字符):# 问忘记密码怎么办# 答在登录页面点击忘记密码通过手机验证码重置密码。# ----------------------------------------# 块 4 (长度: 148 字符):# 问如何联系客服# 答可以通过在线客服、客服电话400-123-4567或发送邮件到supportexample.com联系我们。## 技术支持电话400-123-4567# 服务时间周一至周日 9:00-21:00# ----------------------------------------特点先按段落切保持语义完整超过阈值才进一步切分三、RecursiveCharacterTextSplitter递归分割fordocindocs:splitterRecursiveCharacterTextSplitter(chunk_size100,# 调小以便看到递归效果chunk_overlap20,separators[\n\n,\n,。,,, ,],keep_separatorTrue,length_functionlen,)contentssplitter.split_text(doc.page_content)fore,contentinenumerate(contents):print(f块{e1}(长度:{len(content)}字符):)print(content)print(-*40)# 输出示例# 块 1 (长度: 47 字符):# 欢迎使用我们的产品## 常见问题汇总# ----------------------------------------# 块 2 (长度: 98 字符):# 问如何注册账号# 答点击首页右上角的注册按钮填写手机号和验证码即可完成注册。# ----------------------------------------# 块 3 (长度: 96 字符):# 问忘记密码怎么办# 答在登录页面点击忘记密码通过手机验证码重置密码。# ----------------------------------------# 块 4 (长度: 97 字符):# 问如何联系客服# 答可以通过在线客服、客服电话400-123-4567或发送邮件到supportexample.com联系我们。# ----------------------------------------# 块 5 (长度: 49 字符):# 技术支持电话400-123-4567# 服务时间周一至周日 9:00-21:00# ----------------------------------------特点智能递归优先按段落切段落超长再按句子切保持语义完整性四、其他分割方式补充1. TokenTextSplitter按token数分割fromlangchain_text_splittersimportTokenTextSplitter textLangChain is a framework for developing applications powered by language models.splitterTokenTextSplitter(chunk_size5,chunk_overlap1)chunkssplitter.split_text(text)fori,chunkinenumerate(chunks):print(fChunk{i1}:{chunk})# 输出示例# Chunk 1: LangChain is a framework for# Chunk 2: for developing applications powered by# Chunk 3: by language models.2. MarkdownHeaderTextSplitter保留层级fromlangchain_text_splittersimportMarkdownHeaderTextSplitter markdown_text # 第一章引言 这是引言内容... ## 1.1 背景 背景介绍... ## 1.2 目标 目标说明... # 第二章方法 方法介绍... headers_to_split_on[(#,Header 1),(##,Header 2),]splitterMarkdownHeaderTextSplitter(headers_to_split_on)chunkssplitter.split_text(markdown_text)forchunkinchunks:print(f元数据:{chunk.metadata})print(f内容:{chunk.page_content[:30]}...)print(-*30)# 输出示例# 元数据: {Header 1: 第一章引言}# 内容: 这是引言内容......# ------------------------------# 元数据: {Header 1: 第一章引言, Header 2: 1.1 背景}# 内容: 背景介绍......# ------------------------------# 元数据: {Header 1: 第一章引言, Header 2: 1.2 目标}# 内容: 目标说明......# ------------------------------# 元数据: {Header 1: 第二章方法}# 内容: 方法介绍......# ------------------------------3. PythonCodeTextSplitter代码分割fromlangchain_text_splittersimportPythonCodeTextSplitter python_code def hello_world(): print(Hello, World!) class Calculator: def add(self, a, b): return a b def subtract(self, a, b): return a - b # 主程序 if __name__ __main__: calc Calculator() result calc.add(5, 3) print(f5 3 {result}) splitterPythonCodeTextSplitter(chunk_size50,chunk_overlap10)chunkssplitter.split_text(python_code)fori,chunkinenumerate(chunks):print(f代码块{i1}:)print(chunk)print(-*30)# 输出示例# 代码块 1:# def hello_world():# print(Hello, World!)# ------------------------------# 代码块 2:# class Calculator:# def add(self, a, b):# return a b# ------------------------------# 代码块 3:# def subtract(self, a, b):# return a - b# ------------------------------# 代码块 4:# # 主程序# if __name__ __main__:# calc Calculator()# result calc.add(5, 3)# ------------------------------# 代码块 5:# print(f5 3 {result})# ------------------------------五、优缺点对比分割方式优点缺点适用场景CharacterTextSplitter简单易用控制精确语义完整性差测试、简单文本RecursiveCharacterTextSplitter语义保留好智能灵活性能略低通用场景最常用TokenTextSplitter匹配LLM token限制可能切词LLM精确控制MarkdownHeaderTextSplitter保留文档结构仅限markdown技术文档CodeTextSplitter符合代码结构仅限代码代码处理六、推荐使用RecursiveCharacterTextSplitter是最常用、最通用的选择智能平衡语义和长度限制适合大多数文本处理场景。从输出示例可以看出它能较好地保持句子和段落的完整性。

相关新闻

基于Java springboot个人健康管理系统疾病评估挂号预约(源码+文档+运行视频+讲解视频)

基于Java springboot个人健康管理系统疾病评估挂号预约(源码+文档+运行视频+讲解视频)

文章目录 系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架springboot前端框架vue持久层框架MyBaitsPlus系统测试 四、代码参考 源码获取 目的 基于Java Spring Boot框架开发的个人健康管理系统,集疾病评估、挂号预约等功能于一体&a…

2026/7/6 21:38:15 阅读更多 →
电流环扰动观测器与 PI 参数自动生成:提升控制系统性能的关键技术

电流环扰动观测器与 PI 参数自动生成:提升控制系统性能的关键技术

电流环扰动观测器、PI参数自动生成 观测器对扰动进行补偿,能有效提高电流环抗扰动能力,并且能对反电势扰动起到很好的作用,效果如图所示… “钳位式“抗积分wind-up设计; 文档详细介绍了使用规范地使用控制理论设计PI控制器的方法…

2026/5/17 11:09:18 阅读更多 →
国央企如何提升技术攻关与成果转化效率?

国央企如何提升技术攻关与成果转化效率?

现状概述:成效与短板 在创新驱动发展的时代浪潮中,国央企作为国家科技创新的主阵地,肩负着攻克关键核心技术、实现高水平科技自立自强的重大使命。近年来,国央企在研发投入上持续加大,取得了一批具有国际领先水平的重大…

2026/5/17 11:09:18 阅读更多 →

最新新闻

CryptoJS前端加密实战指南:从AES到SHA-256的完整应用

CryptoJS前端加密实战指南:从AES到SHA-256的完整应用

1. 项目概述:为什么你需要一个JavaScript加密库?如果你正在开发一个Web应用,无论是处理用户密码、保护API通信,还是在前端对敏感数据进行预处理,加密都是一个绕不开的话题。你可能遇到过这样的场景:用户注册…

2026/7/6 21:38:30 阅读更多 →
为什么会有这个问题?

为什么会有这个问题?

Flow Matching 输入分布的推导2.1 均值E[xt]t⋅E[x0](1−t)⋅E[ϵ]t⋅E[x0]若 VAE 有足够强的 KL 约束,使聚合后验满足 E[x0]≈0,则 E[xt]≈0。若 KL 约束较弱,E[x0] 则由数据分布决定,不一定接近零。2.2 方差由 x0 与 ϵ 的独立性…

2026/7/6 21:38:30 阅读更多 →
ML模型服务容器化:从Dockerfile到生产就绪的四层设计

ML模型服务容器化:从Dockerfile到生产就绪的四层设计

1. 项目概述:为什么一个老ML工程师坚持手写Dockerfile,而不是点几下鼠标就完事?我带过三届校招新人,也帮五个业务线做过模型服务化落地。每次聊到容器化,总有人问:“老师,现在不是有各种低代码平…

2026/7/6 21:38:30 阅读更多 →
Ubuntu 22.04 配置 NFS 服务端:3 步实现开发板免拷贝文件共享

Ubuntu 22.04 配置 NFS 服务端:3 步实现开发板免拷贝文件共享

Ubuntu 22.04 高效开发板文件共享:NFS服务端配置全指南在嵌入式开发和Linux系统管理中,频繁地在开发主机与开发板之间传输文件是一项常见但耗时的任务。传统方法如SCP、SFTP或U盘拷贝不仅效率低下,还会打断开发流程。本文将详细介绍如何在Ubu…

2026/7/6 21:36:29 阅读更多 →
learn-opengl入门

learn-opengl入门

opengl是一个大状态机 环境配置 1.下载GLFW源代码 2.创建librarel文件包含include目录和第三方库libs 3.include直接从GLFW的源代码中拿,libs里需要编译生成的库glfw3.lib。 4.通过CMake编译源代码拿到glfw3.lib。 5.将我们的librarel加入编辑器的包含文件和库目录里&#xff0…

2026/7/6 21:34:28 阅读更多 →
初入编程世界感觉眼花缭乱?

初入编程世界感觉眼花缭乱?

眼花缭乱有没有?抽象理解第一个C语言程序1. C语言是什么概括:多用于底层开发的,面向过程的编程语言2. 上来就写程序?我开始也觉得不合理,哪有上来就敲代码嘛...QAQ其实不然,一个最简单的“Hello world”程序…

2026/7/6 21:34:28 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻