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 寫成,效能佳。

相關

  • 專案
  • 專案
  • 專案
  • 專案
  • 專案