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.

何を解決するか

大規模言語モデル(LLM)には文脈窓の制限があります。このプロジェクトは、任意の切断を避けつつ、可能な限り意味的整合性を保ちながら、長文ドキュメントを小さな管理可能なチャンクに分割するためのツールを提供します。

動作方法

このライブラリは階層的なアプローチを使用して分割を行います。複数の「意味的レベル」(例:段落、文、単語、文字)を定義し、指定されたチャンクサイズに収まる最高のレベルでテキストを分割しようとします。

3つの専用スプリッターをサポートしています:

  • TextSplitter: 単語と文にはUnicode境界を使用し、改行シーケンスも対象とします。
  • MarkdownSplitter: CommonMark仕様を使用して見出し、ブロック要素、インライン要素を認識します。
  • CodeSplitter: tree-sitterパーサーを使用して、構文木の深さに基づいて分割します。

チャンクサイズは文字数またはHugging FaceやTiktokenのトークナイザーを使用してトークン数で測定できます。

対象ユーザー

RAGシステムなど、LLMアプリケーションを開発する開発者で、埋め込みや推論用にテキストデータをチャンクに前処理する必要がある人、特にRustまたはPythonを使用している人。

特徴

  • マルチフォーマット対応: プレーンテキスト、Markdown、ソースコード用の専用スプリッター。
  • 柔軟なサイズ指定: 文字数、トークン数(Hugging FaceおよびTiktoken経由)、または範囲指定に対応。
  • 意味的認識: 単語の途中ではなく、文や構文木のノードなどの自然な境界で分割を優先。
  • 高パフォーマンス: 効率性を重視したRustで実装。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト