ChonkieSentenceDocumentSplitter

ChonkieSentenceDocumentSplitter

ChonkieSentenceDocumentSplitter는 Chonkie의 SentenceChunker를 이용해 문장 경계를 존중하는 청크로 문서를 나누는 컴포넌트예요. 순수 토큰 분할과 달리 문장 중간을 자르지 않아 더 일관된 청크를 만들어냅니다.

출처: 문서

본문

항목 내용
파이프라인에서의 일반적인 위치 인덱싱 파이프라인에서 Converters와 DocumentCleaner 이후, Embedders 이전
필수 run 변수 documents — 문서 리스트
출력 변수 documents — 문서 리스트
API reference Chonkie
GitHub link https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/chonkie

Overview

ChonkieSentenceDocumentSplitter는 Chonkie의 SentenceChunker를 감싸서, 각 입력 문서를 경계가 문장 끝과 맞아떨어지는 청크로 나눠요. 청커는 청크 크기 제한에 도달할 때까지 문장을 묶어 갑니다.

각 출력 문서는 원본 문서의 메타데이터에 다음 정보를 더해 포함합니다:

  • source_id — 원본 문서의 ID
  • page_number — 원본 문서 내에서 청크가 있는 페이지 번호
  • split_id — 문서 내에서 청크의 인덱스
  • split_idx_start / split_idx_end — 원본 텍스트에서 청크의 문자 오프셋
  • token_count — 청크의 토큰 수

Installation

pip install chonkie-haystack

Configuration

Parameter Default Description
tokenizer "character" 사용할 토크나이저. 일반 옵션: "character", "gpt2", "cl100k_base". 모든 옵션은 Chonkie 문서 참고.
chunk_size 2048 청크당 최대 토큰 수.
chunk_overlap 0 연속된 청크 사이 겹치는 토큰 수.
min_sentences_per_chunk 1 각 청크에 반드시 포함되어야 하는 최소 문장 수.
min_characters_per_sentence 12 문장이 유효한 것으로 간주되는 최소 문자 수.
approximate False 더 빠른 처리를 위해 근사 청킹을 사용할지 여부.
delim None 커스텀 문장 구분자. None이면 Chonkie 기본 구분자 사용.
include_delim "prev" 구분자를 이전("prev") 청크에 붙일지, 다음("next") 청크에 붙일지.
skip_empty_documents True 빈 내용의 문서를 건너뛸지 여부.
page_break_character "\f" 페이지 번호 추적 시 페이지 나눔을 감지하는 문자.

Usage

On its own

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

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}})

더 알아보기 (Learn more)