LangChain——HTML文本分割 多种文本分割
Text Splitters 文本分割器
加载文档后,您通常会想要对其进行转换以更好地适合您的应用程序。最简单的例子是,您可能希望将长文档分割成更小的块,以适合模型的上下文窗口。 LangChain 有许多内置的文档转换器,可以轻松地拆分、组合、过滤和以其他方式操作文档。
当您想要处理长文本时,有必要将该文本分割成块。这听起来很简单,但这里存在很多潜在的复杂性。理想情况下,您希望将语义相关的文本片段保留在一起。 “语义相关”的含义可能取决于文本的类型。本笔记本展示了实现此目的的几种方法。
在较高层面上,文本分割器的工作原理如下:
- 将文本分成小的、具有语义意义的块(通常是句子)。
- 开始将这些小块组合成一个更大的块,直到达到一定的大小(通过某些函数测量)。
- 一旦达到该大小,请将该块设为自己的文本片段,然后开始创建具有一些重叠的新文本块(以保持块之间的上下文)。
HTMLHeaderTextSplitter
“MarkdownHeaderTextSplitter”、“HTMLHeaderTextSplitter”是一个“结构感知”分块器,它在元素级别拆分文本,并为每个与任何给定块“相关”的标题添加元数据。它可以逐个元素返回块,或者将元素与相同的元数据组合起来,目的是 (a) 保持相关文本在语义上(或多或少)分组,以及 (b) 保留文档结构中编码的上下文丰富的信息。它可以与其他文本分割器一起使用,作为分块管道的一部分。
from langchain_community.document_loaders import TextLoader# 将网页加载出来
loader = TextLoader("./html/Animation-system.html",encoding="utf8")
doc = loader.load()# 标题标签
headers_to_split_on = [("h1", "Header 1"),("h2", "Header 2"),("h3", "Header 3"),
]# pip install -qU langchain-text-splitters
# 按照标题标签分割
from langchain_text_splitters import HTMLHeaderTextSplitter
html_splitter = HTMLHeaderTextSplitter(headers_to_split_on=headers_to_split_on)
html_header_splits = html_splitter.split_text(doc[0].page_content)
按照字符分割
from langchain_text_splitters import CharacterTextSplitter# 分割的规则
text_splitter = CharacterTextSplitter(separator="\n\n",chunk_size=100,chunk_overlap=10,length_function=len,is_separator_regex=False,
)
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitterloader = TextLoader("./txt/faq-4359.txt",encoding="utf8")
doc = loader.load()text_splitter = CharacterTextSplitter(separator="\n\n",chunk_size=100,chunk_overlap=10,length_function=len,is_separator_regex=False,
)texts = text_splitter.create_documents([doc[0].page_content])
print(texts)#[Document(page_content='一、什么是0分期利息\n\n您好,“0分期利息”是指买家使用花呗、招行掌上生活、工行信用卡、银联信用卡等其他分期购物时无需支付分期利息的功能,分期利息由华为商城承担。'), Document(page_content='注:自2023年起,商城将相关宣传将“免息”调整为“0分期利息”,主要基于中国银保监会、中国人民银行《关于进一步促进信用卡业务规范健康发展的通知》(银保监规〔2022〕13号),要求“银行业金融机构应当在分期业务合同(协议)首页和业务办理页面以明显方式展示分期业务可能产生的所有息费项目、年化利率水平和息费计算方式。向客户展示分期业务收取的资金使用成本时,应当统一采用利息形式,并明确相应的计息规则,不得采用手续费等形式,法律法规另有规定的除外。”'), Document(page_content='二、可以参与0分期利息活动的商品\n\n商城目前仅支持部分单品参与0分期利息,若多商品(含不支持0分期利息)合并支付则不支持0分期利息,以支付页面为准,后续会逐渐开放更多商品,敬请关注。'), Document(page_content='三、确认订...
Split code拆分代码
CodeTextSplitter 允许您使用支持的多种语言拆分代码。导入枚举 Language 并指定语言。
from langchain_text_splitters import (Language,RecursiveCharacterTextSplitter,
)
#可以拆分的语言
#['cpp', 'go', 'java', 'kotlin', 'js', 'ts', 'php', 'proto', 'python', 'rst', 'ruby', 'rust', 'scala', 'swift',...]# 以JS 为例
RecursiveCharacterTextSplitter.get_separators_for_language(Language.JS)
#JS以函数作为分类
#['\nfunction ', '\nconst ', '\nlet ', '\nvar ', '\nclass ', '\nif ', '\nfor ', '\nwhile ', '\nswitch ', '\ncase ', '\ndefault ', '\n\n', '\n', ' ', '']
举例
#加载js文档
loader = TextLoader("./js/main.js",encoding="utf8")
doc = loader.load()
# 指定拆分规则
js_splitter = RecursiveCharacterTextSplitter.from_language(language=Language.JS, chunk_size=250, chunk_overlap=20
)
# 拆分
js_docs = js_splitter.create_documents([doc[0].page_content])
Markdown 文本分割器
许多聊天或问答应用程序都涉及在嵌入和矢量存储之前对输入文档进行分块。
如前所述,分块通常旨在将具有共同上下文的文本放在一起。考虑到这一点,我们可能希望特别尊重文档本身的结构。例如,Markdown 文件是按标题组织的。在特定标头组中创建块是一个直观的想法。为了解决这个挑战,我们可以使用 MarkdownHeaderTextSplitter 。这将按一组指定的标头拆分 Markdown 文件。
from langchain_text_splitters import MarkdownHeaderTextSplitter
# 加载md文档
loader = TextLoader("./txt/stable_diffusion.md",encoding="utf8")
doc = loader.load()headers_to_split_on = [("#", "Header 1"),("##", "Header 2"),("###", "Header 3"),
]markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers_to_split_on)
# strip_headers用于确定是否删除Markdown标题中的前导空格和尾随空格。
# markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers_to_split_on,strip_headers=False)
md_header_splits = markdown_splitter.split_text(doc[0].page_content)相关文章:
LangChain——HTML文本分割 多种文本分割
Text Splitters 文本分割器 加载文档后,您通常会想要对其进行转换以更好地适合您的应用程序。最简单的例子是,您可能希望将长文档分割成更小的块,以适合模型的上下文窗口。 LangChain 有许多内置的文档转换器,可以轻松地拆分、组…...
梯度爆炸与消失
梯度爆炸和梯度消失 一、概念解析 (一)梯度爆炸 定义 在深度神经网络训练的反向传播过程中,梯度爆炸是指梯度的值过大的现象。这会使模型的参数更新出现异常。 产生原因 深层网络与链式法则:深度神经网络按链式法则计算某层权重…...
关于扩散方程的解
1-D 扩散方程的形式 Cauchy齐次方程 这个解无积分无级数,很简单的形式 美其名曰:基本解。 把基本解和初值做卷积,就得到cauchy方程的解。...
如何监控Elasticsearch集群状态?
大家好,我是锋哥。今天分享关于【如何监控Elasticsearch集群状态?】面试题。希望对大家有帮助; 如何监控Elasticsearch集群状态? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 监控 Elasticsearch 集群的状态对于确保…...
关于音频 DSP 的接口种类以及其应用场景介绍
在音频系统中,DSP(数字信号处理器)扮演着重要角色,通常会通过不同的接口与音频系统中的其他组件(如功放、扬声器、音频源等)进行连接。以汽车应用场景为例,以下是一些常见的接口类型分类及其介绍…...
arkTS:持久化储存UI状态的基本用法(PersistentStorage)
arkUI:持久化储存UI状态的基本用法(PersistentStorage) 1 主要内容说明2 例子2.1 持久化储存UI状态的基本用法(PersistentStorage)2.1.1 源码1的相关说明2.1.1.1 数据存储2.1.1.2 数据读取2.1.1.3 动态更新2.1.1.4 显示…...
css—动画
一、背景 本文章是用于解释上一篇文章中的问题,如果会动画的小伙伴就不用再次来看了,本文主要讲解一下动画的设定规则,以及如何在元素中添加动画,本文会大篇幅的讲解一下,动画属性。注意,这是css3的内容&am…...
YOLO系列论文综述(从YOLOv1到YOLOv11)【第12篇:YOLOv9——可编程梯度信息(PGI)+广义高效层聚合网络(GELAN)】
YOLOv9 1 摘要2 改进点3 网络架构 YOLO系列博文: 【第1篇:概述物体检测算法发展史、YOLO应用领域、评价指标和NMS】【第2篇:YOLO系列论文、代码和主要优缺点汇总】【第3篇:YOLOv1——YOLO的开山之作】【第4篇:YOLOv2—…...
【ETCD】etcd简单入门之基础操作基于etcdctl进行操作
这里将使用etcdctl命令行工具来进行演示, 1、使用put命令向etcd写入kv对 使用etcdctl put命令来设置键值对。put命令接受两个参数:键和值 使用方法: NAME:put - Puts the given key into the storeUSAGE:etcdctl put [options] <key&g…...
第六届国际科技创新(IAECST 2024)暨第四届物流系统与交通运输(LSTT 2024)
重要信息 会议官网:www.lstt.org 大会时间:2024年12月6-8日 大会地点:中国-广州 简介 第六届国际科技创新暨第四届物流系统与交通运输国际(LSTT 2024)将于2024年12月6-8日在广州举办,这是一个集中探讨…...
20241127 给typecho文章编辑附件 添加视频 图片预览
Typecho在写文章时,如果一次性上传太多张图片可能分不清哪张,因为附件没有略缩图,无法实时阅览图片,给文章插入图片时很不方便。 编辑admin/file-upload.php 大约十八行的位置 一个while 循环里面,这是在进行html元素更新操作,在合…...
vue3使用monaco编辑器(VSCode网页版)
vue3使用monaco编辑器(VSCode网页版) 文章说明参考文章核心代码效果展示实践说明源码下载 文章说明 一直在找网页版的编辑器,网页版的VSCode功能很强大,这个monaco就是VSCode样式的编辑器,功能很强大,可以直…...
Spark优化--开发调优、资源调优、数据倾斜调优和shuffle调优等
针对Spark优化,我们可以从多个角度进行,包括开发调优、资源调优、数据倾斜调优和shuffle调优等。以下是一些具体的优化方法: 1. 开发调优 避免创建重复的RDD:对于同一份数据,只应该创建一个RDD,避免创建多…...
Day1 生信新手笔记
生信新手笔记 生信学习第一天笔记打卡。 转录组学中: 上游分析-基于linux,包括质控、过滤、比对、定量; 下游分析-基于R语言,包括差异分析、富集分析、可视化。 1. 级别标题 一个井号加空格 就是一级标题,两个井号加…...
Python的秘密基地--[章节2]Python核心数据结构
第2章:Python核心数据结构 Python中的数据结构提供了强大的工具来存储和操作数据。理解这些数据结构是Python编程的基础。 2.1 列表(List) 2.1.1 什么是列表 列表是一种有序的可变序列,用于存储一组数据。它支持多种类型的数据…...
【Electron学习笔记(三)】Electron的主进程和渲染进程
Electron的主进程和渲染进程 Electron的主进程和渲染进程前言正文1、主进程2、渲染进程3、Preload 脚本3.1 在项目目录下创建 preload.js 文件3.2 在 main.js 文件下创建路径变量并将 preload.js 定义为桥梁3.3 在 preload.js 文件下使用 electron 提供的contextBridge 模块3.4…...
[免费]SpringBoot+Vue景区订票(购票)系统【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue大景区订票(购票)系统,分享下哈。 项目视频演示 【免费】SpringBootVue景区订票(购票)系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 现代经济快节奏发展以及不断完善升级的信息…...
idea_工程与模块管理
module相关操作 项目结构新建module移除模块删除模块导入模块 项目结构 层级关系 project(工程) - module(模块) - package(包) - class(类) 在 IntelliJ IDEA 中Project是最顶级的结构单元 ,然后就是Module。目前,主流的大型项目结构基本都是多Module…...
A02、Java 设计模式优化
1、单例模式 1.1、什么是单例模式 它的核心在于,单例模式可以保证一个类仅创建一个实例,并提供一个访问它的全局访问点。该模式有三个基本要点:一是这个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向…...
jdk8没有Buffer.put()
在Java中,Buffer是一个抽象类,它定义了缓冲区的通用行为。不过,Buffer本身并没有直接提供put()方法。put()方法是在Buffer的子类中定义的,比如ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer和DoubleB…...
Spatial Audio(空间音频)与多声道环绕声:从5.1到7.1的沉浸式体验升级
1. 从立体声到环绕声:音频技术的进化之路 记得我第一次在朋友家体验5.1声道家庭影院时,那种子弹从耳边呼啸而过的感觉让我彻底震撼了。这完全颠覆了我对"好音质"的认知——原来声音可以如此立体、如此真实。要理解现代的空间音频技术…...
STM32Fx标准外设固件库下载与安装全攻略
1. STM32Fx标准外设固件库是什么? 对于刚接触STM32开发的工程师来说,标准外设固件库就像是一本"使用说明书"。它封装了芯片底层寄存器的操作,让我们可以用更简单的方式控制硬件。举个例子,如果没有固件库,你…...
SpeedyStepper Forked:嵌入式步进电机硬实时控制库解析
1. SpeedyStepper Forked:面向嵌入式实时控制的高性能步进电机驱动库深度解析1.1 库定位与工程价值SpeedyStepper Forked 是一个专为嵌入式平台(尤其是基于Arduino生态的MCU)设计的轻量级、高精度步进电机运动控制库。其核心目标并非提供图形…...
技术萨满祭典:给数据中心献祭机械硬盘
一、仪式的缘起:当测试工程师遇见数据之灵在数字文明的殿堂中,数据中心是承载万物之灵的圣地。而软件测试从业者,正是穿梭于代码与硬件之间的现代萨满。当机械硬盘(HDD)在SSD洪流中逐渐退居幕后,这场为老旧…...
Windows上搭建PostgreSQL监控神器:Grafana+Prometheus+Postgres_Exporter保姆级干货教程
❓想要实时掌握 PostgreSQL 数据库的运行状态? 👀想知道复制延迟、锁等待这些核心指标? 🆒这里是Moshow的「CSDN https://zhengkai.blog.csdn.net/」 🚀这篇文章带你从零开始,在 Windows 上搭建一套企业…...
从Flask裸奔到MCP标准落地:7步迁移指南+自动转换脚本(已验证支撑日均50万次Agent调用)
第一章:Python MCP 服务器开发模板概览与核心价值Python MCP(Model-Controller-Protocol)服务器开发模板是一套面向协议驱动微服务架构的轻量级开发框架,专为快速构建符合 MCP 规范的 AI 工具集成后端而设计。它抽象了协议适配、会…...
Python制作简易PDF查看工具——PDFViewerV1.0
PDFViewer PDF浏览工具,是使用Python语言(使用PyQt5开发界面,PDF解析使用PyMuPDF开源模块)开发的PDF查看工具,已经实现基本翻页浏览、OCR文字识别(基于开源主流文字识别模型实现)、内容查找高亮…...
Newtonsoft.Json-for-Unity:Unity开发者的终极JSON解决方案指南
Newtonsoft.Json-for-Unity:Unity开发者的终极JSON解决方案指南 【免费下载链接】Newtonsoft.Json-for-Unity Newtonsoft.Json (Json.NET) 10.0.3, 11.0.2, 12.0.3, & 13.0.1 for Unity IL2CPP builds, available via Unity Package Manager 项目地址: https:…...
西门子S7-1200 PLC如何通过EtherCat转Profinet网关实现高效IO控制?5步搞定配置
西门子S7-1200 PLC与EtherCat设备的高效集成:5步实现Profinet网关配置 在工业自动化领域,不同协议设备之间的无缝通信一直是工程师面临的挑战。当您需要将EtherCat设备接入西门子S7-1200 PLC的Profinet网络时,协议转换网关成为关键桥梁。本文…...
OpenClaw快速安装部署:让AI住进你的电脑
一、前言 上篇说完OpenClaw是什么,有小伙伴留言说:“听起来挺猛,但安装肯定很复杂吧?”确实,之前我也有这个顾虑。毕竟涉及到Gateway、Agent、多渠道配置,听起来就头大。 但实际搞下来——就两条命令。 今天…...
