ChonkieSentenceDocumentSplitter
ChonkieSentenceDocumentSplitter splits documents into chunks that respect sentence boundaries using Chonkie's SentenceChunker.
Unlike pure token splitting, it avoids cutting mid-sentence, producing more coherent chunks.
Overview
ChonkieSentenceDocumentSplitter wraps Chonkie's SentenceChunker to split each input document into chunks whose boundaries align with sentence endings.
The chunker groups sentences together until the chunk size limit is reached.
Each output document includes the original document's metadata plus:
source_id: ID of the original documentpage_number: Page number of the chunk within the original documentsplit_id: Index of the chunk within the documentsplit_idx_start/split_idx_end: Character offsets of the chunk in the original texttoken_count: Number of tokens in the chunk
Installation
Configuration
Usage
On its own
python
from haystack import Document
from haystack_integrations.components.preprocessors.chonkie import (
ChonkieSentenceDocumentSplitter,
)
chunker = ChonkieSentenceDocumentSplitter(
tokenizer="gpt2",
chunk_size=512,
chunk_overlap=0,
)
documents = [
Document(
content="Haystack is an open-source framework. It helps you build LLM applications.",
),
]
result = chunker.run(documents=documents)
print(result["documents"])
In a pipeline
python
from pathlib import Path
from haystack import Pipeline
from haystack.components.converters import TextFileToDocument
from haystack.components.preprocessors import DocumentCleaner
from haystack.components.writers import DocumentWriter
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack_integrations.components.preprocessors.chonkie import (
ChonkieSentenceDocumentSplitter,
)
document_store = InMemoryDocumentStore()
p = Pipeline()
p.add_component("converter", TextFileToDocument())
p.add_component("cleaner", DocumentCleaner())
p.add_component(
"splitter",
ChonkieSentenceDocumentSplitter(tokenizer="gpt2", chunk_size=512),
)
p.add_component("writer", DocumentWriter(document_store=document_store))
p.connect("converter.documents", "cleaner.documents")
p.connect("cleaner.documents", "splitter.documents")
p.connect("splitter.documents", "writer.documents")
files = list(Path("path/to/your/files").glob("*.txt"))
p.run({"converter": {"sources": files}})
