RecursiveCharacterTextSplitter 청킹도구
langchain은 RecursiveCharacterTextSplitter 로 청킹한다. Recursive 재귀적이라는 이름을 단락 - 문장 - 단어 순으로 자연스러운 경계를 우선해 자른다. 문장중간에서 뚝 끊기는 일이 적은 똑똑한 자르기.
from langchain_text_splitters import RecursiveCharacterTextSplitter
text = """
LangChain은 LLM 애플리케이션 개발을 위한 프레임워크입니다.
RecursiveCharacterTextSplitter는 긴 문서를
의미가 유지되도록 여러 개의 Chunk로 나누어 줍니다.
이 Chunk들은 Embedding을 생성하여
Vector DB에 저장한 뒤 RAG에서 검색에 사용됩니다.
"""
splitter = RecursiveCharacterTextSplitter(
chunk_size=80, # 한 Chunk의 최대 길이
chunk_overlap=20, # 이전 Chunk와 겹치는 길이
length_function=len,
is_separator_regex=False
)
chunks = splitter.split_text(text)
for i, chunk in enumerate(chunks):
print(f"Chunk {i+1}")
print(chunk)
print("-" * 30)
from langchain_text_splitters import RecursiveCharacterTextSplitter
# documents : Document 객체 리스트
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
split_docs = splitter.split_documents(documents)
print(len(split_docs))
print(split_docs[0].page_content)
langchain 공식문서에서 일반적인 텍스트에 권장되는 방식이 있다.
문단 - 줄바꿈 - 공백 - 문자 순으로 분할해 의미를 최대한 유지하도록 설계.
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200,
separators=["\n\n", "\n", " ", ""]
)
chunks = text_splitter.split_documents(documents)