semantic chunking
02/18/2026
1. CSV를 읽어서 page_number 기준으로 텍스트를 먼저 병합하고, 페이지 태그를 삽입해 하나의 텍스트 스트림으로 만든다.
2. 그 전체 스트림을 1200~1500 토큰 기준으로 잘라서(overlap 100~150) LLM 처리용 chunk를 만든다.
3. LLM에는 이 token chunk 단위로만 태우고, page 정보는 메타데이터로 유지해 결과를 나중에 재조립한다.
지금 CSV까지 평탄화했다면, 다시 “의미 흐름 단위”로 1차 복원한 뒤 rule-based로 먼저 나누는 게 맞다.
짧게 정리하면 이렇게 간다:
page 기준으로 다시 합친다.
page_number별로 text를 이어붙여 하나의 연속 텍스트로 만든다. (페이지 태그는 유지)
rule-based로 1차 문단 분리한다.
줄바꿈(특히 빈 줄), 번호 패턴(1., ①, -), 헤더/제목 패턴(IV., 제1장 등) 기준으로 분리한다.
이 단계에서는 LLM을 쓰지 않는다.
애매한 경계만 LLM에 묻는다.
인접 블록 쌍에 대해 “같은 문단인가?”만 판단하게 해서 semantic 보정한다.
그 다음에야, 완성된 semantic chunk를 토큰 1200~1500 기준으로 안전 분할해서 LLM 작업(요약/추출 등)을 한다.
핵심은:
CSV는 구조가 깨진 상태(평탄화)
먼저 의미 흐름을 복원
rule로 대부분 처리
LLM은 보정용
토큰 분할은 마지막 단계
이 순서가 semantic chunking 목적에 가장 안정적이다.