MarkdownTextSplitter는 LangChain의 langchain_text_splitters 모듈에 포함된 클래스입니다. Markdown 문서를 헤더(#, ## 등) 및 구조 기준으로 의미 단위로 분할해주는 텍스트 스플리터입니다.
from langchain_text_splitters import MarkdownTextSplitter
from langchain_text_splitters import MarkdownTextSplitter
text = """
# 제목
## 섹션 1
첫 번째 섹션의 내용입니다.
## 섹션 2
두 번째 섹션의 내용입니다.
"""
splitter = MarkdownTextSplitter(chunk_size=100, chunk_overlap=10)
chunks = splitter.split_text(text)
for chunk in chunks:
print(chunk)
print("---")
chunk_size는 문자 수 기준이며, Markdown 구조를 우선적으로 고려해 분할합니다.
일반 CharacterTextSplitter는 구조를 무시하고 글자 수만으로 자릅니다.
# 헤더 중간에서 잘릴 수 있음 — 의미 단위 보장 X
from langchain_text_splitters import CharacterTextSplitter
splitter = CharacterTextSplitter(chunk_size=100, chunk_overlap=10)
chunks = splitter.split_text(text)
MarkdownTextSplitter는 ##, ### 등 헤더 경계를 우선 분할 기준으로 삼아 의미 있는 단위를 유지합니다.
# Document 객체 리스트로 반환 (metadata 포함)
from langchain_core.documents import Document
docs = splitter.create_documents([text])
# docs[0].page_content — 청크 내용
# docs[0].metadata — 기본적으로 비어 있음, 직접 추가 가능
# metadata 함께 전달
docs = splitter.create_documents(
[text],
metadatas=[{"source": "report.md"}]
)
| 옵션 | 설명 |
|---|---|
chunk_size | 청크 최대 문자 수 |
chunk_overlap | 청크 간 겹치는 문자 수 |
split_text(text) | 문자열 리스트로 반환 |
create_documents(texts) | Document 객체 리스트로 반환 |
| 분할 기준 | Markdown 헤더 → 단락 → 문자 수 순으로 우선 적용 |
한 줄 요약:
MarkdownTextSplitter는 Markdown 헤더와 단락 구조를 기준으로 텍스트를 의미 단위로 분할해, RAG 파이프라인에서 청크 품질을 높여주는 스플리터입니다.