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 CharacterTextSplitter

loader = 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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/923625.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图像分割——区域增长

一 区域增长 图像灰度阈值分割技术都没有考虑到图像像素空间的连通性。区域增长法则正好相反,顾及像素的连接性. 方法:1)选择一个或一组种子; 2)选择特征及相似性判决准则; 3)从该种子开始向外生长&#x…

音视频相关的一些基本概念

音视频相关的一些基本概念 文章目录 音视频相关的一些基本概念RTTH264profile & levelI帧 vs IDRMP4 封装格式AAC封装格式TS封装格式Reference RTT TCP中的RTT指的是“往返时延”(Round-Trip Time),即从发送方发送数据开始,到…

春秋云境 CVE 复现

CVE-2022-4230 靶标介绍 WP Statistics WordPress 插件13.2.9之前的版本不会转义参数,这可能允许经过身份验证的用户执行 SQL 注入攻击。默认情况下,具有管理选项功能 (admin) 的用户可以使用受影响的功能,但是该插件有一个设置允许低权限用…

Linux—进程概念学习-03

目录 Linux—进程学习—31.进程优先级1.1Linux中的进程优先级1.2修改进程优先级—top 2.进程的其他概念3.进程切换4.环境变量4.0环境变量的理解4.1环境变量的基本概念4.2添加环境变量—export4.3Linux中环境变量的由来4.4常见环境变量4.5和环境变量相关的命令4.6通过系统调用获…

go语言逆向-基础basic

文章目录 go 编译命令 ldflags -w -s的作用和问题使用 file 命令查看文件类型 go 语言逆向参考go ID版本GOROOT和GOPATHGOROOTGOPATHGOROOT和GOPATH的关系示例 go build和 go modpclntab (Program Counter Line Table 程序计数器行数映射表)Moduledata程…

RAG架构类型

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

PostgreSQL详细安装教程

#安装PostgreSQL的yum仓库 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm#安装PostgreSQL 15版本 sudo yum install -y postgresql15-server#初始化数据库(若要自定义数据库存储目录…

uniapp介入极光推送教程 超级详细

直接按照下面教程操作 一步一步来 很快就能 完成 下面的文章非常详细 ,我就不班门弄斧了 直接上原文链接 https://blog.csdn.net/weixin_52830464/article/details/143823231

公司金融期末考试题目

公司金融期末考试题 选择题 1.现金折扣和信用条件(教材P253) 题目类似: 下列不属于信用条件的是()。 现金折扣 数量折扣信用期限 折扣期限 给定的信用条件为"1/10,n/40",则其含义…

图论入门编程

卡码网刷题链接:98. 所有可达路径 一、题目简述 二、编程demo 方法①邻接矩阵 from collections import defaultdict #简历邻接矩阵 def build_graph(): n, m map(int,input().split()) graph [[0 for _ in range(n1)] for _ in range(n1)]for _ in range(m): …

visionpro实践项目(一)进阶

在visionpro实践项目(一)中,我们是使用标签工具,将测得的零件宽度信息显示在图片上,在这篇文章中,我们换一种方法,使用脚本工具来显示宽度信息。这就涉及到写代码了。 将Job中的标签工具删掉&am…

KPAC(ICCV 2021)代码单图片推理

文章目录 KPAC(ICCV 2021)代码单图片推理创建虚拟环境安装依赖包数据集路径设置运行测试单图片推理 KPAC(ICCV 2021)代码单图片推理 论文链接:Single Image Defocus Deblurring Using Kernel-Sharing Parallel Atrous Convolutions 该论文研究的问题是散焦去模糊&…

Flink cdc同步增量数据timestamp字段相差八小时(分析|解决)不是粘贴复制的!

问题 我使用flink cdc同步mysql到mysql遇到了timestamp字段缺少八小时的问题。很少无语,flink ,cdc,debezium时区都设置了,没有任何效果! 分析 问题出现在mysql binlog身上!!! 因为默认mysql会使用UTC来…

算法新篇章:AI如何在数学领域超越人类

人工智能咨询培训老师叶梓 转载标明出处 尽管大模型在很多领域表现出色,比如理解自然语言和生成文本,但它们在解决一些复杂的推理任务时,比如数学问题、编程挑战或者医疗诊断,还是显得有些力不从心。最近,一个来自中国…

MTK主板_安卓主板方案_MTK联发科主板定制开发

联发科(MTK)主板以其强大的性能和多样化的功能而受到广泛关注。该平台包括多个型号,例如MT6761、MT8766、MT6762、MT6765、MT8768和MT8788等,均配置了四核或八核64位处理器,主频可高达2.0GHz。采用先进的12nm工艺,搭载Android 11.…

windows安全中心,永久卸载工具分享

使用方法 2024Goby红队版工具分享,附2024年漏洞POC下载 下载链接: https://pan.quark.cn/s/4fc2712a2afc一路回车,选项Y即可 耐心等待几秒种,自动重启 此时打开windows安全中心,已经完全不能使用了,响应…

css—轮播图实现

一、背景 最近和朋友在一起讨论的时候,我们提出了这样的一个提问,难道轮播图的效果只能通过js来实现吗?经过我们的一系列的争论,发现了这是可以通过纯css来实现这一效果的,CSS轮播图也是一种常见的网页展示方式&#x…

使用Python和Pybind11调用C++程序(CMake编译)

目录 一、前言二、安装 pybind11三、编写C示例代码四、结合Pybind11和CMake编译C工程五、Python调用动态库六、参考 一、前言 跨语言调用能对不同计算机语言进行互补,本博客主要介绍如何实现Python调用C语言编写的函数。 实验环境: Linux gnuPython3.10…

设计模式之 责任链模式

责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,旨在将多个处理对象通过链式结构连接起来,形成一条处理请求的链条。每个处理对象都有机会处理请求,或者将请求传递给链中的下一个对象。这样&#x…

EXTI配置流程 含中断延时消抖点亮小灯

如图可知,配置流程分成以下一个部分 ①使能GPIO时钟 __HAL_RCC_GPIOA_CLK_ENABLE();// 打开时钟 ②初始化利用 HAL_GPIO_Init 一步到位,可以初始化外设GPIO的一切 4个参数 (引脚 Pull 这里选择的模式是从下面这几个里面选 速度&#x…