semantic-text-splitter 핵심 기능 — TextSplitter와 계층 경계

semantic-text-splitter 핵심 기능

이 라이브러리가 단순한 글자 수 분할과 다른 점은 **정의된 의미 계층(semantic levels)**을 위로 올라가며 자르는 방식이에요. 각 스플리터마다 경계의 우선순위가 정해져 있고, 그 계층을 차례로 적용해 가장 넓게 유지되는 조각을 골라요.

출처: https://docs.rs/text-splitter

분할 방법

  1. 텍스트를 점점 강한 의미 수준으로 나눠요.
  2. 각 수준의 첫 항목을 검사해, 다음 청크에 들어갈 수 있는 가장 높은 수준을 선택해요.
  3. 이 수준 이상의 이웃 섹션을 최대한 병합해 청크 길이를 채워요. 이때 더 높은 의미 경계는 반드시 포함해서 청크가 경계를 가로지르지 않게 해요.

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 스펙)

더 알아보기