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.py | 11쪽 | 7차시 「5. 실습 ① — 기본 분할 해보기」 아래에 실었습니다 |
07/check_overlap.py | 13쪽 | 7차시 「6. 실습 ② — overlap을 눈으로 확인하기」 아래에 실었습니다 |
07/prepare.py | 20~21쪽 | 7차시 「10. 이번 차시 완성 코드」 아래에 실었습니다 |
실행 흐름
긴 본문 → 빈 줄로 자를 수 있나
빈 줄로 자를 수 있나 → 조각 (예)
빈 줄로 자를 수 있나 → 줄바꿈 (아니오)
줄바꿈 → 문장
문장 → 조각
조각 → 이웃과 overlap실습 순서
실습/src/07에서 실행합니다.
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를 그대로 물려주니 이 값도 그대로 따라옵니다.