自然语言处理从入门到应用——LangChain:索引(Indexes)-[文本分割器(Text Splitters)]

分类目录:《自然语言处理从入门到应用》总目录


当我们需要处理长文本时,有必要将文本分割成块。虽然这听起来很简单,但这里存在很多潜在的复杂性。理想情况下,我们希望将语义相关的文本块保持在一起,但什么是"语义相关"可能取决于文本的类型。本文就展示了几种实现这一目标的方法。

在高层次上,文本分割器的工作原理如下:

  1. 将文本分割成小的、语义有意义的块(通常是句子)。
  2. 开始将这些小块组合成较大的块,直到达到一定的大小(由某个函数衡量)。
  3. 一旦达到该大小,将该块作为自己的文本片段,然后开始创建一个具有一定重叠的新文本块(以保持块之间的上下文)。

这意味着有两个不同的方向可以定制文本分割器:

  • 文本如何被分割
  • 块的大小如何衡量

默认推荐的文本分割器是RecursiveCharacterTextSplitter。该文本分割器接受一个字符列表作为参数。它尝试根据第一个字符进行分块,但如果有任何分块过大,它将继续尝试下一个字符,依此类推。默认情况下,它尝试进行分割的字符是\n\n\n等。除了控制分割的字符之外,我们还可以控制其他一些内容:

  • length_function:如何计算分块的长度。默认只计算字符数,但通常在这里传递一个标记计数器。
  • chunk_size:分块的最大大小(由长度函数测量)。
  • chunk_overlap:分块之间的最大重叠量。保持一些重叠可以保持分块之间的连续性(例如使用滑动窗口)。
  • add_start_index:是否在元数据中包含每个分块在原始文档中的起始位置。
csharp 复制代码
# This is a long document we can split up.
with open('../../state_of_the_union.txt') as f:
    state_of_the_union = f.read()
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(
    # Set a really small chunk size, just to show.
    chunk_size = 100,
    chunk_overlap  = 20,
    length_function = len,
    add_start_index = True,
)
texts = text_splitter.create_documents([state_of_the_union])
print(texts[0])
print(texts[1])

输出:

csharp 复制代码
page_content='Madam Speaker, Madam Vice President, our First Lady and Second Gentleman. Members of Congress and' metadata={'start_index': 0} page_content='of Congress and the Cabinet. Justices of the Supreme Court. My fellow Americans.' metadata={'start_index': 82}

我们还可以使用文本分割器分割下列类型的文件:

  • Character
  • HTML
  • Latex
  • Markdown
  • NLTK
  • Python
  • Recursive Character
  • spaCy
  • tiktoken(OpenAI)

参考文献:

1 LangChain官方网站:https://www.langchain.com/

2 LangChain 🦜️🔗 中文网,跟着LangChain一起学LLM/GPT开发:https://www.langchain.com.cn/

3 LangChain中文网 - LangChain 是一个用于开发由语言模型驱动的应用程序的框架:http://www.cnlangchain.com/

相关推荐
明志数科2 小时前
具身智能数据工程观察:“数据筑基“时代的数据底座建设路径
人工智能·机器人
m0_614523554 小时前
普通视频怎么做多场景一镜到底:路线设计、逐段衔接与整体验收
人工智能·音视频
海宇服务4 小时前
零信任架构实战:基于海宇对外投资历史查询服务构建自动化供应商准入网关
运维·人工智能·架构·自动化
东风破_4 小时前
别急着上 Agentic RAG:先用 LangGraph 把最小 RAG 跑明白
人工智能
LaughingZhu4 小时前
Product Hunt 每日热榜 | 2026-09-12
人工智能·深度学习·神经网络·搜索引擎·百度
天真小巫5 小时前
2026.9.13总结(工作量日益繁重的当下,AI如何提效)
人工智能
Zguigo5 小时前
【CUDA1】GPUvsCPU,CUDA Kernel
人工智能·pytorch·深度学习
thesky1234565 小时前
用 ONNX Runtime 把 PyTorch 模型变成跨平台极速推理引擎:导出、优化、量化完整实
人工智能·深度学习·模型部署
米小虾5 小时前
把 KV Cache 从 3514 字节压到 890 字节:DeepSeek V4.1-Flash 动了什么,又没动什么
人工智能
锋行天下5 小时前
LangGraph 进阶:Command + Send 动态控制流、并行 Map-Reduce 实战与踩坑
人工智能