5차시. LangChain 입문
2. Document Loader — 문서 읽기
출처: 원본 PDF 05차시_LangChain입문RAG의마법도구.pdf 2~3쪽 · 쪽 그림 2쪽 3쪽
RAG의 첫 번째 단계인 Ingestion을 LangChain으로 간단히 처리할 수 있습니다.
2-1) Document Loader의 종류
출처: 원본 PDF 3쪽
| Loader | 사용 대상 | 설명 |
|---|---|---|
| TextLoader | .txt 파일 | 가장 간단한 텍스트 파일 로드 |
| PyPDFLoader | PDF 파일 | PDF에서 텍스트 추출 |
| DirectoryLoader | 폴더 전체 | 한 폴더의 모든 파일 한 번에 로드 |
| CSVLoader | CSV 파일 | CSV 파일을 문서로 변환 |
| DocxLoader | Word 파일 | .docx 파일에서 텍스트 추출 |
| WebBaseLoader | 웹페이지 | URL의 웹페이지 내용 로드 |
2-2) TextLoader 사용 예시
출처: 원본 PDF 3쪽
from langchain.document_loaders import TextLoader
loader = TextLoader("data/document.txt")
documents = loader.load()
print(f"로드: {len(documents)}")
print(f"내용: {documents[0].page_content}")
print(f"메타: {documents[0].metadata}")실행 결과 예시 (코드를 읽고 만든 예상 화면입니다. 실제 실행 결과, 특히 모델의 답은 다를 수 있습니다)
로드: 1
내용: [고객 안내문]
1. 환불 규정
상품 수령 후 7일 이내에 환불을 신청하실 수 있습니다.
단순 변심의 경우 왕복 배송비는 고객 부담입니다.
2. 교환 규정
상품 불량의 경우 30일 이내에 교환이 가능합니다.
이 경우 배송비는 당사가 부담합니다.
3. 고객센터
운영 시간은 평일 09:00 ~ 18:00 입니다.
전화 1588-0000 / 이메일 help@example.com
메타: {'source': 'data/document.txt'}📦 Document 객체의 구조
각 document는 두 부분으로 구성됩니다.
1. page_content — 실제 텍스트 내용
2. metadata — 문서 정보 (파일명, 페이지 번호 등)
실습 코드 · 05/textloader.py
실습 코드: 실습/src/05/textloader.py · 위의 원본 PDF 5차시 3쪽 「2-2) TextLoader 사용 예시」과 이어집니다.
# ============================================================
# 5차시 | PPT: 05차시_LangChain입문.pptx
# 역할: 텍스트 파일을 읽어 문서 객체로 만드는 가장 짧은 예제
# 입력: ../../data/notice.txt (고객 안내문)
# 출력: 문서 개수, 본문, 메타데이터
# 흐름:
# notice.txt
# -> TextLoader.load()
# -> Document 리스트 (보통 1개)
# -> print
# ============================================================
# Document: LangChain이 문서 1건을 담는 객체.
# page_content = 본문 문자열
# metadata = 본문 밖의 부가 정보(파일 경로 등)를 담은 딕셔너리
# 텍스트 파일을 Document로 읽어 오는 도구입니다.
from langchain_community.document_loaders import TextLoader
# src/05에서 실행하면 두 단계 위의 data/notice.txt를 가리킵니다.
loader = TextLoader(
"../../data/notice.txt",
encoding="utf-8"
)
# load()는 Document가 들어 있는 리스트를 돌려줍니다.
documents = loader.load()
print(f"문서 길이 => {len(documents)}")
print()
print(f"문서 내용 =>\n {documents[0].page_content}")
print()
# metadata 예: {'source': '../../data/notice.txt'}
print(f"메타 =>\n {documents[0].metadata}")실행 결과 샘플 (교안 기록. API 키가 필요한 코드는 키 없이 맞춘 예시이고, 모델의 답은 실행할 때마다 달라집니다)
===== 실행 결과 샘플 =====
실행: cd 실습/src/05
python textloader.py
문서 길이 => 1
문서 내용 =>
[고객 안내문]
1. 환불 규정
상품 수령 후 7일 이내에 환불을 신청하실 수 있습니다.
단순 변심의 경우 왕복 배송비는 고객 부담입니다.
2. 교환 규정
상품 불량의 경우 30일 이내에 교환이 가능합니다.
이 경우 배송비는 당사가 부담합니다.
3. 고객센터
운영 시간은 평일 09:00 ~ 18:00 입니다.
전화 1588-0000 / 이메일 help@example.com
메타 =>
{'source': '../../data/notice.txt'}코드 해설
텍스트 파일을 읽어 문서 객체로 만드는 가장 짧은 예제입니다. 입력은 ../../data/notice.txt (고객 안내문)이고, 출력은 문서 개수, 본문, 메타데이터입니다.
주석에 적힌 흐름입니다.
notice.txt
-> TextLoader.load()
-> Document 리스트 (보통 1개)
-> print코드 앞에서 고정해 두는 말입니다.
- Document: LangChain이 문서 1건을 담는 객체.
- page_content = 본문 문자열
- metadata = 본문 밖의 부가 정보(파일 경로 등)를 담은 딕셔너리
함수로 나누지 않고 위에서 아래로 실행됩니다.
loader = TextLoader(— src/05에서 실행하면 두 단계 위의 data/notice.txt를 가리킵니다.documents = loader.load()— load()는 Document가 들어 있는 리스트를 돌려줍니다.print(f"메타 =>\n {documents[0].metadata}")— metadata 예: {'source': '../../data/notice.txt'}
파일 맨 아래 실행 결과 샘플 주석은 실행되지 않습니다. 화면 출력은 다음 절에 다시 적어 두었습니다.