RAG2026-5일7차시 · 텍스트 분할 이해15 / 19← 이전목차다음 →MetaContents

7차시. 텍스트 분할 이해

실습 1 — 텍스트 분할 이해 실습 따라 하기

관련 수업 자료: 7차시 「5. 실습 ① — 기본 분할 해보기」(11~12쪽), 7차시 「6. 실습 ② — overlap을 눈으로 확인하기」(13쪽), 7차시 「10. 이번 차시 완성 코드」(20~21쪽) · 실습 코드 07/split_basic.py, 07/check_overlap.py, 07/prepare.py

이 실습은 교안 해설(07_텍스트분할이해.md)의 실습 순서를 옮긴 것입니다. OpenAI 임베딩이나 채팅 모델을 부르는 파일은 .env 에 API 키가 있어야 돌아갑니다. 키가 없으면 실행 결과 샘플로 출력 모양을 확인합니다.

수업 자료와 이어지는 곳

실습 코드원본 PDF이어지는 내용
07/split_basic.py11쪽7차시 「5. 실습 ① — 기본 분할 해보기」 아래에 실었습니다
07/check_overlap.py13쪽7차시 「6. 실습 ② — overlap을 눈으로 확인하기」 아래에 실었습니다
07/prepare.py20~21쪽7차시 「10. 이번 차시 완성 코드」 아래에 실었습니다

실행 흐름

출력
긴 본문 → 빈 줄로 자를 수 있나
빈 줄로 자를 수 있나 → 조각  (예)
빈 줄로 자를 수 있나 → 줄바꿈  (아니오)
줄바꿈 → 문장
문장 → 조각
조각 → 이웃과 overlap

실습 순서

실습/src/07에서 실행합니다.

Bash
python split_basic.py
python check_overlap.py
python prepare.py

과제로는 같은 문서에 size 200, 300, 500을 넣어 조각 수와 평균 길이를 적습니다. 수업 코드의 기본값은 파일에 적힌 값을 유지합니다.

스스로 확인

  • 조각 하나만 보고 답이 되는지 스스로 묻는가?
  • overlap이 0이면 어떤 문장이 사라지는가?
  • 평균 길이가 chunk_size보다 짧은 이유를 아는가?

코드 설명

  • sys.path.insert(0, INGEST_DIR) 는 파이썬이 import할 파일을 찾는 목록 맨 앞에 06 폴더를 넣습니다. 이 줄이 없으면 from ingest import load_documents 에서 ModuleNotFoundError가 납니다.
  • splitter.split_documents(docs) 는 Document 목록을 받아 더 작은 Document 목록을 돌려줍니다. 조각마다 원래 쪽의 metadata가 그대로 복사되므로 출처가 사라지지 않습니다.
  • separators=["\n\n", "\n", ". ", " ", ""] 는 앞에서부터 시도하는 자를 곳입니다. 맨 끝의 "" 가 있어야 구분자가 하나도 없는 긴 글도 chunk_size 안으로 자릅니다.
  • check_overlap.py는 쪽을 따로 자르지 않고 full_text 로 합친 뒤 Document(page_content = full_text) 하나로 만듭니다. 쪽마다 자르면 쪽 경계에서 조각이 끊겨 겹침을 보기 어렵기 때문입니다.
  • prepare.py를 실행하면 "3쪽 로딩 완료"가 두 번 찍힙니다. 함수 밖의 docs = load_documents(...) 한 번, 함수 안에서 한 번 더 읽기 때문입니다. 함수 이름 prepare_chuncks 의 철자도 수업 자료의 prepare_chunks 와 다르니 부를 때 조심하십시오.
  • metadata의 'filename': <function basename ...> 은 6차시 ingest.py에서 os.path.basename 을 괄호 없이 넣은 흔적입니다. 분할기가 metadata를 그대로 물려주니 이 값도 그대로 따라옵니다.
← 이전 절7차시 · 체크리스트와 과제다음 절 →7차시 · 퀴즈 1 — 이웃 조각의 겹침 확인하기