6차시. 문서 로딩 실습
실습 1 — 문서 로딩 실습 실습 따라 하기
관련 수업 자료: 6차시 「4. 실습 ① — 텍스트 파일 읽기」(8~9쪽), 6차시 「5. 실습 ② — PDF 읽기」(10~11쪽), 6차시 「10. 이번 차시 실습 정리」(19쪽) · 실습 코드 06/load_text.py, 06/load_pdf.py, 06/validate.py, 06/ingest.py
이 실습은 교안 해설(06_문서로딩실습.md)의 실습 순서를 옮긴 것입니다. OpenAI 임베딩이나 채팅 모델을 부르는 파일은 .env 에 API 키가 있어야 돌아갑니다. 키가 없으면 실행 결과 샘플로 출력 모양을 확인합니다.
수업 자료와 이어지는 곳
| 실습 코드 | 원본 PDF | 이어지는 내용 |
|---|---|---|
06/load_text.py | 8쪽 | 6차시 「4. 실습 ① — 텍스트 파일 읽기」 › 4-2) 코드 작성 아래에 실었습니다 |
06/load_pdf.py | 10쪽 | 6차시 「5. 실습 ② — PDF 읽기」 › 5-1) 코드 작성 아래에 실었습니다 |
06/validate.py | 10쪽 | 6차시 「5. 실습 ② — PDF 읽기」 › 5-1) 코드 작성 아래에 실었습니다 |
06/ingest.py | 19쪽 | 6차시 「10. 이번 차시 실습 정리」 아래에 실었습니다 |
실행 흐름
TXT 또는 PDF → Loader
Loader → Document 목록
Document 목록 → 잡음 제거
잡음 제거 → metadata 보강
metadata 보강 → 빈 페이지 확인실습 순서
실습/src/06에서 순서대로 실행합니다.
python load_text.py
python load_pdf.py
python validate.py
python ingest.pyload_text.py는 이름과 달리 PDF를 읽도록 원본이 작성되어 있습니다. 파일 위 주석에 그 점을 적었습니다. 실행 위치는 이 폴더입니다.
스스로 확인
- TXT 1개와 PDF 여러 페이지의 Document 개수가 왜 다른가?
- metadata가 없으면 출처를 왜 말할 수 없는가?
- 빈 page_content는 로더를 바꿔서 해결되는 문제인가?
코드 설명
loader.load()는 Document 리스트를 돌려줍니다. 결과가 하나뿐이어도 리스트이므로 본문은documents[0].page_content처럼 번호를 붙여 꺼냅니다.PyPDFLoader("../../data/notice.pdf")의 경로는 실행 위치 기준입니다.실습/src/06이 아닌 곳에서 실행하면 FileNotFoundError가 납니다. 여기서 많이들 헷갈리십니다.metadata의page는 0부터 셉니다. notice.pdf의 첫 쪽이'page': 0, 'page_label': '1'로 찍히는 까닭입니다.if len(text) < 10:은 validate.py가 스캔 PDF를 골라내는 기준입니다. notice.pdf는 본문이 길어서 이 조건에 걸리지 않고, 그래서 아무것도 출력되지 않습니다.- ingest.py의
re.sub(r"\n{3,}", "\n\n", text)는 결과를text에 다시 넣지 않아 본문이 바뀌지 않습니다. 수업 자료 10절처럼text = re.sub(...)로 받아야 합니다. - ingest.py의
os.path.basename은 괄호가 없어 파일 이름 대신 함수 자체가 metadata에 들어갑니다.os.path.basename(path)로 호출해야notice.pdf가 들어갑니다.