以编程方式使用文档

文本分割器 是通用文本的推荐选择。它由一个字符列表参数化。它按顺序尝试分割,直到块足够小。默认列表是 ["\n\n", "\n", " ", ""]。这具有尽可能保持所有段落(然后是句子,然后是单词)在一起的效果,因为这些通常看起来是语义关联性最强的文本片段。

  1. 文本如何分割:按字符列表。
  2. 如何测量块大小:按字符数。

下面展示示例用法。

npm install @langchain/textsplitters
pnpm install @langchain/textsplitters
yarn add @langchain/textsplitters
bun add @langchain/textsplitters

要直接获取字符串内容,请使用 .splitText.

要创建 LangChain Document 对象(例如,用于下游任务),请使用 .createDocuments.

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
    "",
  ],
});