7차시. 텍스트 분할 이해
4. separators — 아무 데나 자르면 안 된다
출처: 원본 PDF 07차시_텍스트분할이해.pdf 9~10쪽 · 쪽 그림 9쪽 10쪽
세 번째 개념입니다. 이것이 RecursiveCharacterTextSplitter가 똑똑한 이유입니다.
4-1) 단순 분할 vs 재귀적 분할
📏 두 가지 자르는 방식
❌ 단순 분할 (CharacterTextSplitter)
"500자마다 무조건 자른다"
→ 단어 중간이든 문장 중간이든 상관 안 함
→ "환불규정은다음과같습니다상품수령" 에서 뚝
✅ 재귀적 분할 (RecursiveCharacterTextSplitter)
"500자 근처에서 자를 만한 곳을 찾아 자른다"
우선순위대로 시도합니다:
1순위 — 문단 구분 (\n\n) 에서 자를 수 있나?
2순위 — 줄바꿈 (\n) 에서는?
3순위 — 마침표 뒤에서는?
4순위 — 최소한 띄어쓰기에서라도
5순위 — 정 안 되면 그냥 자름
→ 의미 단위가 최대한 보존됩니다
4-2) 우선순위가 작동하는 모습
아래는 chunk_size를 100으로 두었을 때, 어디서 잘리는지 보여주는 예입니다.
원문:
────────────────────────────────
1. 환불 규정
상품 수령 후 7일 이내에 환불이 가능합니다.
단순 변심은 배송비를 고객이 부담합니다.
2. 교환 규정
불량품은 30일 이내 교환이 가능합니다.
────────────────────────────────
RecursiveCharacterTextSplitter 결과:
[조각 1]
1. 환불 규정
상품 수령 후 7일 이내에 환불이 가능합니다.
단순 변심은 배송비를 고객이 부담합니다.
[조각 2]
2. 교환 규정
불량품은 30일 이내 교환이 가능합니다.👉 빈 줄(문단 구분)에서 깔끔하게 잘렸습니다.
"1. 환불 규정"과 그 설명이 한 조각에 함께 있습니다.💡 왜 이게 중요한가
조각 1만 검색돼도
"환불 규정"이라는 제목과 내용이 함께 있습니다.
만약 아무 데나 잘렸다면
제목만 있는 조각, 내용만 있는 조각이 따로 생겨서
검색해도 무슨 얘기인지 알 수 없었을 겁니다.