Bootstrap

使用递归字符文本切分器进行文本分块

在文本处理和自然语言处理任务中,将文本分割成更小的块对于分析和处理非常重要。我们今天讲解如何使用递归字符文本切分器(RecursiveCharacterTextSplitter)来完成这一任务。这个工具允许我们通过一系列字符递归地拆分文本,直到每个块的大小满足我们的要求。

技术背景介绍

文本分割是许多自然语言处理应用中的常见需求,如文本分类、情感分析和信息检索。在这些任务中,我们需要将文本分割成较小的段落、句子或单词来进行更精细的分析。这里介绍的文本切分器通过递归地使用一系列字符(如\n\n, \n, " "等)尝试分割文本,可以帮助保持段落、句子和单词尽可能完整。

核心原理解析

RecursiveCharacterTextSplitter 是一个参数化的文本切分器,利用一组字符递归地分割文本。默认的字符列表是 ["\n\n", "\n", " ", ""],它首先尝试在段落边界分割,然后是句子,再到单词。这种方式被设计为保持语义上最相关的文本片段在一起。块的大小通过字符数来测量。

代码实现演示(重点)

下面是一个实际使用RecursiveCharacterTextSplitter的示例,它将演示如何加载文本、配置切分器及获取分割后的文本块。

# 安装切分器库
%pip install -qU langchain-text-splitters

from langchain_text_splitters import RecursiveCharacterTextSplitter

# 加载示例文档
with open("state_of_the_union.txt") as f:
    state_of_the_union = f.read()

# 实例化文本切分器
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=100,             # 设置块大小
    chunk_overlap=20,           # 块间重叠部分
    length_function=len,        # 块长度计算方法
    is_separator_regex=False,   # 分隔符是否为正则表达式
)

# 获取分割后的文本
texts = text_splitter.create_documents([state_of_the_union])

# 打印前两个分割块
print(texts[0])
print(texts[1])

# 直接获取分割的字符串
split_text = text_splitter.split_text(state_of_the_union)[:2]
print(split_text)

应用场景分析

  1. 多语言文本处理:对于不使用空格分词的语言(如中文、日语、泰语),可以自定义分隔符列表以避免句子被不当分割。
  2. 文档摘要生成:通过保持段落或句子完整性,有助于生成更有意义的文档摘要。
  3. 数据预处理:在机器学习任务中,文本切分可帮助创建更合适的输入特征。

实践建议

  • 调整分隔符:根据不同语言或文本的需求,配置合适的分隔符列表,以减少不必要的切分。
  • 合理设置块大小和重叠:根据具体任务需求,设置合适的块大小和重叠部分,以便在信息提取时保持重要上下文。

如果遇到问题欢迎在评论区交流。

—END—

;