
Document Loader는 텍스트, PDF, CSV, 웹페이지 등 다양한 형식의 문서를 LangChain에서 사용할 수 있는 Document 객체로 변환해줍니다. 본 포스트에서는 다양한 Document Loader 사용법을 정리합니다.
Document Loader를 사용하기 위해 필요한 패키지를 설치합니다.
pip install langchain-community pypdf beautifulsoup4 wikipedia
| 패키지 | 설명 |
|---|---|
langchain-community | TextLoader, DirectoryLoader, CSVLoader 등 Document Loaders |
pypdf | PyPDFLoader (PDF 파일 로드) |
beautifulsoup4 | RecursiveUrlLoader (웹 크롤링) |
wikipedia | WikipediaLoader (위키피디아 문서 로드) |
모든 Loader는 Document 객체를 반환합니다.
# Document 객체 구조
{
"page_content": "문서 내용",
"metadata": {
"source": "파일 경로",
...
}
}
가장 기본적인 텍스트 파일 로더입니다.
from langchain_community.document_loaders import TextLoader
# 텍스트 파일 로드
loader = TextLoader("./docs/sample.txt", encoding="utf-8")
documents = loader.load()
print(f"문서 개수: {len(documents)}")
print(f"내용: {documents[0].page_content[:100]}...")
print(f"메타데이터: {documents[0].metadata}")
| 파라미터 | 설명 |
|---|---|
file_path | 파일 경로 |
encoding | 인코딩 방식 (기본: utf-8) |
폴더 내 여러 파일을 한 번에 로드합니다.
from langchain_community.document_loaders import DirectoryLoader, TextLoader
# 폴더 내 모든 txt 파일 로드
loader = DirectoryLoader(
path="./docs",
glob="**/*.txt",
loader_cls=TextLoader,
loader_kwargs={"encoding": "utf-8"}
)
documents = loader.load()
print(f"로드된 문서 개수: {len(documents)}")
| 파라미터 | 설명 |
|---|---|
path | 폴더 경로 |
glob | 파일 패턴 (예: **/*.txt) |
loader_cls | 사용할 로더 클래스 |
loader_kwargs | 로더에 전달할 추가 인자 |
CSV 파일의 각 행을 Document로 변환합니다.
from langchain_community.document_loaders import CSVLoader
loader = CSVLoader(
file_path="./docs/data.csv",
encoding="utf-8"
)
documents = loader.load()
# 각 행이 하나의 Document가 됨
for doc in documents[:3]:
print(doc.page_content)
print("---")
column1: value1
column2: value2
column3: value3
---
PDF 파일을 페이지 단위로 로드합니다.
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader("./docs/document.pdf")
documents = loader.load()
print(f"총 페이지 수: {len(documents)}")
# 첫 번째 페이지 내용
print(f"1페이지 내용: {documents[0].page_content[:200]}...")
print(f"메타데이터: {documents[0].metadata}")
{
"source": "./docs/document.pdf",
"page": 0
}
웹페이지를 재귀적으로 크롤링하여 로드합니다.
from langchain_community.document_loaders import RecursiveUrlLoader
from bs4 import BeautifulSoup
# HTML에서 텍스트만 추출하는 함수
def bs4_extractor(html: str) -> str:
soup = BeautifulSoup(html, "html.parser")
return soup.get_text()
loader = RecursiveUrlLoader(
url="https://example.com",
max_depth=2,
extractor=bs4_extractor
)
documents = loader.load()
print(f"로드된 페이지 수: {len(documents)}")
| 파라미터 | 설명 |
|---|---|
url | 시작 URL |
max_depth | 최대 크롤링 깊이 |
extractor | HTML에서 텍스트를 추출하는 함수 |
위키피디아 문서를 검색하여 로드합니다.
from langchain_community.document_loaders import WikipediaLoader
loader = WikipediaLoader(
query="인공지능",
lang="ko",
load_max_docs=3
)
documents = loader.load()
for doc in documents:
print(f"제목: {doc.metadata['title']}")
print(f"내용 미리보기: {doc.page_content[:100]}...")
print("---")
| 파라미터 | 설명 |
|---|---|
query | 검색어 |
lang | 언어 코드 (ko, en 등) |
load_max_docs | 최대 문서 개수 |
doc_content_chars_max | 문서당 최대 글자 수 |
| Loader | 용도 | 필요 패키지 |
|---|---|---|
TextLoader | 텍스트 파일 | (기본) |
DirectoryLoader | 폴더 내 파일 | (기본) |
CSVLoader | CSV 파일 | (기본) |
PyPDFLoader | PDF 파일 | pypdf |
RecursiveUrlLoader | 웹 크롤링 | beautifulsoup4 |
WikipediaLoader | 위키피디아 | wikipedia |
from langchain_community.document_loaders import (
TextLoader,
DirectoryLoader,
CSVLoader,
PyPDFLoader,
WikipediaLoader
)
# 1. 텍스트 파일 로드
text_loader = TextLoader("./docs/sample.txt", encoding="utf-8")
text_docs = text_loader.load()
print(f"텍스트 문서: {len(text_docs)}개")
# 2. 폴더 내 모든 txt 파일 로드
dir_loader = DirectoryLoader(
"./docs",
glob="**/*.txt",
loader_cls=TextLoader,
loader_kwargs={"encoding": "utf-8"}
)
dir_docs = dir_loader.load()
print(f"폴더 내 문서: {len(dir_docs)}개")
# 3. 위키피디아 문서 로드
wiki_loader = WikipediaLoader(
query="머신러닝",
lang="ko",
load_max_docs=2
)
wiki_docs = wiki_loader.load()
print(f"위키피디아 문서: {len(wiki_docs)}개")
# 전체 문서 합치기
all_documents = text_docs + dir_docs + wiki_docs
print(f"전체 문서: {len(all_documents)}개")