如何清空网站数据库,有什么网站做头像,有限责任公司破产债务谁负责,自己制作头像的网站 设计 动漫Text Splitters 文本分割器
加载文档后#xff0c;您通常会想要对其进行转换以更好地适合您的应用程序。最简单的例子是#xff0c;您可能希望将长文档分割成更小的块#xff0c;以适合模型的上下文窗口。 LangChain 有许多内置的文档转换器#xff0c;可以轻松地拆分、组…Text Splitters 文本分割器
加载文档后您通常会想要对其进行转换以更好地适合您的应用程序。最简单的例子是您可能希望将长文档分割成更小的块以适合模型的上下文窗口。 LangChain 有许多内置的文档转换器可以轻松地拆分、组合、过滤和以其他方式操作文档。 当您想要处理长文本时有必要将该文本分割成块。这听起来很简单但这里存在很多潜在的复杂性。理想情况下您希望将语义相关的文本片段保留在一起。 “语义相关”的含义可能取决于文本的类型。本笔记本展示了实现此目的的几种方法。 在较高层面上文本分割器的工作原理如下
将文本分成小的、具有语义意义的块通常是句子。开始将这些小块组合成一个更大的块直到达到一定的大小通过某些函数测量。一旦达到该大小请将该块设为自己的文本片段然后开始创建具有一些重叠的新文本块以保持块之间的上下文。
HTMLHeaderTextSplitter
“MarkdownHeaderTextSplitter”、“HTMLHeaderTextSplitter”是一个“结构感知”分块器它在元素级别拆分文本并为每个与任何给定块“相关”的标题添加元数据。它可以逐个元素返回块或者将元素与相同的元数据组合起来目的是 (a) 保持相关文本在语义上或多或少分组以及 (b) 保留文档结构中编码的上下文丰富的信息。它可以与其他文本分割器一起使用作为分块管道的一部分。
from langchain_community.document_loaders import TextLoader# 将网页加载出来
loader TextLoader(./html/Animation-system.html,encodingutf8)
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_onheaders_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_size100,chunk_overlap10,length_functionlen,is_separator_regexFalse,
)from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitterloader TextLoader(./txt/faq-4359.txt,encodingutf8)
doc loader.load()text_splitter CharacterTextSplitter(separator\n\n,chunk_size100,chunk_overlap10,length_functionlen,is_separator_regexFalse,
)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,encodingutf8)
doc loader.load()
# 指定拆分规则
js_splitter RecursiveCharacterTextSplitter.from_language(languageLanguage.JS, chunk_size250, chunk_overlap20
)
# 拆分
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,encodingutf8)
doc loader.load()headers_to_split_on [(#, Header 1),(##, Header 2),(###, Header 3),
]markdown_splitter MarkdownHeaderTextSplitter(headers_to_split_onheaders_to_split_on)
# strip_headers用于确定是否删除Markdown标题中的前导空格和尾随空格。
# markdown_splitter MarkdownHeaderTextSplitter(headers_to_split_onheaders_to_split_on,strip_headersFalse)
md_header_splits markdown_splitter.split_text(doc[0].page_content)