Skip to main content
文本分割器是通用文本的推荐选择。它由一个字符列表参数化。它会按顺序尝试在这些字符上进行分割,直到块足够小。默认列表是 ["\n\n", "\n", " ", ""]。这会尽可能地将所有段落(然后是句子,然后是单词)保持在一起,因为这些部分在语义上通常是最强相关的。
  1. 文本如何分割:按字符列表。
  2. 块大小如何测量:按字符数。
下面我们展示使用示例。
npm install @langchain/textsplitters
要直接获取字符串内容,请使用 .splitText 要创建 LangChain Document 对象(例如,用于下游任务),请使用 .createDocuments
import { RecursiveCharacterTextSplitter } from "@langchain/textsplitters";

const splitter = new RecursiveCharacterTextSplitter({ chunkSize: 100, chunkOverlap: 0 })
const texts = splitter.createDocuments([{ pageContent: "..." }])
[
  { pageContent: "...", metadata: {} },
]
让我们逐步了解上面为 RecursiveCharacterTextSplitter 设置的参数:
  • chunkSize: 块的最大大小,大小由 lengthFunction 确定。
  • chunkOverlap: 块之间的目标重叠。重叠块有助于减轻上下文在块之间分割时的信息丢失。

分割没有单词边界的语言的文本

一些书写系统没有单词边界,例如中文、日语和泰语。使用默认分隔符列表 ["\n\n", "\n", " ", ""] 分割文本可能会导致单词在块之间被分割。要保持单词在一起,可以覆盖分隔符列表以包含额外的标点符号:
  • 添加 ASCII 句点 “.”、Unicode 全角 句点 “”(用于中文文本)和表意文字句点”(用于日语和中文)
  • 添加零宽空格,用于泰语、缅甸语、高棉语和日语。
  • 添加 ASCII 逗号 “,”、Unicode 全角逗号 “” 和 Unicode 表意文字逗号 “
const splitter = new RecursiveCharacterTextSplitter({
  separators: [
    "\n\n",
    "\n",
    " ",
    ".",
    ",",
    "\u200b",  // Zero-width space
    "\uff0c",  // Fullwidth comma
    "\u3001",  // Ideographic comma
    "\uff0e",  // Fullwidth full stop
    "\u3002",  // Ideographic stop
    "",
  ],
});