Text::Splitter
Text::Splitter intelligently splits text into chunks for LLM/RAG applications.
It supports two splitting modes:
- Characters: Splits based on character count (default)
- Words: Splits based on word count (more semantic)
Both modes respect sentence boundaries and support configurable overlap to preserve context between chunks.
Example
# Character-based splitting
splitter = Text::Splitter.new(
chunk_size: 1000,
chunk_overlap: 200
)
chunks = splitter.split_text("Your long document...")
# => ["First chunk...", "Second chunk with overlap..."]
# Word-based splitting
word_splitter = Text::Splitter.new(
chunk_size: 280,
chunk_overlap: 50,
mode: :words
)
Constructors
Instance methods
Yields each chunk lazily without allocating all chunks upfront
This is more memory efficient for large texts
splitter = Text::Splitter.new(chunk_size: 100, chunk_overlap: 20)
splitter.each_chunk(text) do |chunk|
puts chunk
end