ChineseDocumentSplitter
ChineseDocumentSplitter
ChineseDocumentSplitter는 중국어 텍스트 문서를 고급 중국어 처리 기능으로 더 작은 청크로 나누는 컴포넌트예요. HanLP를 활용해 정확한 중국어 단어 분리(word segmentation)와 문장 토큰화를 수행하므로, 언어적인 이해가 필요한 중국어 텍스트 처리에 이상적입니다.
출처: 문서
본문
| 항목 | 내용 |
|---|---|
| 파이프라인에서의 일반적인 위치 | 인덱싱 파이프라인에서 Converters와 DocumentCleaner 이후, Classifiers 이전 |
| 필수 run 변수 | documents — 중국어 텍스트 내용을 담은 문서 리스트 |
| 출력 변수 | documents — 각각 원본 중국어 텍스트의 한 조각을 담은 문서 리스트 |
| API reference | HanLP |
| GitHub link | https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/hanlp |
| Package name | hanlp-haystack |
Overview
ChineseDocumentSplitter는 중국어 텍스트 처리를 위해 특별히 설계된 문서 스플리터예요. 영어는 단어가 공백으로 구분되지만, 중국어는 단어 사이 공백 없이 연속으로 쓰이는 점이 다릅니다.
이 컴포넌트는 HanLP(Han Language Processing)를 활용해 정확한 중국어 단어 분리와 문장 토큰화를 제공하며, 두 가지 세분화(granularity) 수준을 지원해요:
- Coarse granularity: 대부분의 일반적인 용도에 적합한 넓은 단어 분리를 제공하며, 범용 분리를 위해
COARSE_ELECTRA_SMALL_ZH모델을 사용해요. - Fine granularity: 전문적인 응용을 위한 더 세부적인 단어 분리를 제공하며, 상세 분리를 위해
FINE_ELECTRA_SMALL_ZH모델을 사용해요.
스플리터는 다양한 단위로 문서를 나눌 수 있습니다:
word— 중국어 단어(여러 글자 토큰)로 분리sentence— HanLP 문장 토크나이저로 문장 단위 분리passage— 이중 줄바꿈("\n\n")으로 분리page— 폼 피드 문자("\f")로 분리line— 단일 줄바꿈("\n")으로 분리period— 마침표(".")로 분리function— 사용자 정의 분리 함수 사용
추출된 각 청크는 원본 문서의 메타데이터를 유지하면서 추가 필드도 포함합니다:
source_id— 원본 문서의 IDpage_number— 청크가 속한 페이지 번호split_id— 문서 내 분할의 순차 IDsplit_idx_start— 원본 문서에서 청크가 시작하는 인덱스
respect_sentence_boundary=True를 설정하면 컴포넌트가 HanLP의 문장 토크나이저(UD_CTB_EOS_MUL)를 사용해 분할이 항상 완전한 문장 사이에서만 일어나도록 보장합니다. 이로써 텍스트의 의미론적 무결성이 유지됩니다.
Usage
On its own
파이프라인 밖에서도 ChineseDocumentSplitter를 써서 중국어 문서를 직접 처리할 수 있어요:
from haystack import Document
from haystack_integrations.components.preprocessors.hanlp import ChineseDocumentSplitter
# Initialize the splitter with word-based splitting
splitter = ChineseDocumentSplitter(
split_by="word",
split_length=10,
split_overlap=3,
granularity="coarse",
)
# Create a Chinese document
doc = Document(
content="这是第一句话,这是第二句话,这是第三句话。这是第四句话,这是第五句话,这是第六句话!",
)
# Split the document
result = splitter.run(documents=[doc])
print(result["documents"]) # List of split documents
With sentence boundary respect
단어 단위로 분리할 때 문장 경계를 존중하도록 할 수 있어요:
from haystack import Document
from haystack_integrations.components.preprocessors.hanlp import ChineseDocumentSplitter
doc = Document(
content="这是第一句话,这是第二句话,这是第三句话。"
"这是第四句话,这是第五句话,这是第六句话!"
"这是第七句话,这是第八句话,这是第九句话?",
)
splitter = ChineseDocumentSplitter(
split_by="word",
split_length=10,
split_overlap=3,
respect_sentence_boundary=True,
granularity="coarse",
)
result = splitter.run(documents=[doc])
# Each chunk will end with a complete sentence
for doc in result["documents"]:
print(f"Chunk: {doc.content}")
print(f"Ends with sentence: {doc.content.endswith(('。', '!', '?'))}")
With fine granularity
더 세부적인 단어 분리를 원한다면:
from haystack import Document
from haystack_integrations.components.preprocessors.hanlp import ChineseDocumentSplitter
doc = Document(content="人工智能技术正在快速发展,改变着我们的生活方式。")
splitter = ChineseDocumentSplitter(
split_by="word",
split_length=5,
split_overlap=0,
granularity="fine", # More detailed segmentation
)
result = splitter.run(documents=[doc])
print(result["documents"])
With custom splitting function
분리에 사용자 정의 함수를 쓸 수도 있어요:
from haystack import Document
from haystack_integrations.components.preprocessors.hanlp import ChineseDocumentSplitter
def custom_split(text: str) -> list[str]:
"""Custom splitting function that splits by commas"""
return text.split(",")
doc = Document(content="第一段,第二段,第三段,第四段")
splitter = ChineseDocumentSplitter(split_by="function", splitting_function=custom_split)
result = splitter.run(documents=[doc])
print(result["documents"])
In a pipeline
ChineseDocumentSplitter를 Haystack 인덱싱 파이프라인에 통합하는 예시예요:
from haystack import Pipeline, Document
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.converters.txt import TextFileToDocument
from haystack_integrations.components.preprocessors.hanlp import ChineseDocumentSplitter
from haystack.components.preprocessors import DocumentCleaner
from haystack.components.writers import DocumentWriter
# Initialize components
document_store = InMemoryDocumentStore()
p = Pipeline()
p.add_component(instance=TextFileToDocument(), name="text_file_converter")
p.add_component(instance=DocumentCleaner(), name="cleaner")
p.add_component(
instance=ChineseDocumentSplitter(
split_by="word",
split_length=100,
split_overlap=20,
respect_sentence_boundary=True,
granularity="coarse",
),
name="chinese_splitter",
)
p.add_component(instance=DocumentWriter(document_store=document_store), name="writer")
# Connect components
p.connect("text_file_converter.documents", "cleaner.documents")
p.connect("cleaner.documents", "chinese_splitter.documents")
p.connect("chinese_splitter.documents", "writer.documents")
# Run pipeline with Chinese text files
p.run({"text_file_converter": {"sources": ["path/to/your/chinese/files.txt"]}})
이 파이프라인은 중국어 텍스트 파일을 문서로 변환하고, 텍스트를 정리한 뒤, 중국어 단어 분리를 이용해 언어적으로 인식한 청크로 나누고, 그 결과를 추후 검색·처리할 수 있도록 Document Store에 저장해요.
더 알아보기 (Learn more)
- ChineseDocumentSplitter — Haystack 공식 문서