semantic-text-splitter 핵심 기능 — TextSplitter와 계층 경계
semantic-text-splitter 핵심 기능
이 라이브러리가 단순한 글자 수 분할과 다른 점은 **정의된 의미 계층(semantic levels)**을 위로 올라가며 자르는 방식이에요. 각 스플리터마다 경계의 우선순위가 정해져 있고, 그 계층을 차례로 적용해 가장 넓게 유지되는 조각을 골라요.
분할 방법
- 텍스트를 점점 강한 의미 수준으로 나눠요.
- 각 수준의 첫 항목을 검사해, 다음 청크에 들어갈 수 있는 가장 높은 수준을 선택해요.
- 이 수준 이상의 이웃 섹션을 최대한 병합해 청크 길이를 채워요. 이때 더 높은 의미 경계는 반드시 포함해서 청크가 경계를 가로지르지 않게 해요.
TextSplitter의 의미 계층
- Characters
- Unicode Grapheme Cluster Boundaries
- Unicode Word Boundaries
- Unicode Sentence Boundaries
- 연속 개행 시퀀스 길이 오름차순(개행은
\r\n,\n,\r). 개행 2개짜리 시퀀스가 1개짜리보다 높은 계층이에요.
문자 이하로는 쪼개지 않아요. 그렇게 하면 문자의 일부 바이트가 잘려 유효한 유니코드 문자열이 아니게 될 수 있기 때문이에요.
MarkdownSplitter 계층
markdown 피처를 켜면 CommonMark 스펙으로 마크다운을 파싱해요. 문자·grapheme·단어·문장 경계 아래에 소프트 라인브레이크, 인라인 요소, 블록 요소, 수평선, 그리고 **제목 단계(헤딩 레벨)**까지 계층으로 나눠요.
CodeSplitter 계층
code 피처를 켜면 tree-sitter 문법으로 코드를 파싱해요. 문자·grapheme·단어·문장 아래에 구문 트리의 깊이를 계층으로 사용해요. 함수가 함수 안의 문장보다 높은 계층이 되는 식이에요.
피처 플래그
| Feature | Description |
|---|---|
code |
CodeSplitter 구조체 활성화 (tree-sitter 파서 사용) |
markdown |
MarkdownSplitter 구조체 활성화 (CommonMark 스펙) |