benbrandt/text-splitter

Split text into semantic chunks, up to a desired chunk size. Supports calculating length by characters and tokens, and is callable from Rust and Python.

解决的问题

大型语言模型(LLMs)具有有限的上下文窗口。该项目提供工具,将长文档拆分为更小、可管理的块,使其适合这些限制,同时通过避免任意切割来尽可能保留语义意义。

工作原理

该库使用分层方法进行拆分。它定义了一组“语义层级”(例如,段落、句子、单词、字符),并尝试在仍能容纳在指定块大小内的最高层级上拆分文本。

支持三种专用拆分器:

  • TextSplitter:使用 Unicode 边界进行单词和句子拆分,以及换行符序列。
  • MarkdownSplitter:使用 CommonMark 规范识别标题、块级元素和内联元素。
  • CodeSplitter:使用 tree-sitter 解析器根据语法树的深度进行拆分。

块大小可以通过字符数或使用 Hugging Face 或 Tiktoken 的分词器来测量。

适用人群

需要将文本数据预处理为块以用于嵌入或推理的 LLM 应用开发者(如 RAG 系统),特别是使用 Rust 或 Python 的开发者。

主要亮点

  • 多格式支持:为纯文本、Markdown 和源代码提供专用拆分器。
  • 灵活的尺寸:支持字符数、令牌数(通过 Hugging Face 和 Tiktoken)、或容量范围。
  • 语义感知:优先在自然边界(如句子或语法树节点)处拆分,而非单词中间。
  • 高性能:使用 Rust 编写,效率高。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目