Document Loaders로 다양한 문서 불러오기

gclee·2026년 1월 21일

LangChain-RAG

목록 보기
7/13

Document Loader는 텍스트, PDF, CSV, 웹페이지 등 다양한 형식의 문서를 LangChain에서 사용할 수 있는 Document 객체로 변환해줍니다. 본 포스트에서는 다양한 Document Loader 사용법을 정리합니다.


준비 사항

  • Python 3.9 이상
  • 테스트용 문서 파일

라이브러리 설치

Document Loader를 사용하기 위해 필요한 패키지를 설치합니다.

pip install langchain-community pypdf beautifulsoup4 wikipedia
패키지설명
langchain-communityTextLoader, DirectoryLoader, CSVLoader 등 Document Loaders
pypdfPyPDFLoader (PDF 파일 로드)
beautifulsoup4RecursiveUrlLoader (웹 크롤링)
wikipediaWikipediaLoader (위키피디아 문서 로드)

Document 객체 구조

모든 Loader는 Document 객체를 반환합니다.

# Document 객체 구조
{
    "page_content": "문서 내용",
    "metadata": {
        "source": "파일 경로",
        ...
    }
}

TextLoader

가장 기본적인 텍스트 파일 로더입니다.

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)

DirectoryLoader

폴더 내 여러 파일을 한 번에 로드합니다.

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로더에 전달할 추가 인자

CSVLoader

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
---

PyPDFLoader

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
}

RecursiveUrlLoader

웹페이지를 재귀적으로 크롤링하여 로드합니다.

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최대 크롤링 깊이
extractorHTML에서 텍스트를 추출하는 함수

WikipediaLoader

위키피디아 문서를 검색하여 로드합니다.

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 비교 정리

Loader용도필요 패키지
TextLoader텍스트 파일(기본)
DirectoryLoader폴더 내 파일(기본)
CSVLoaderCSV 파일(기본)
PyPDFLoaderPDF 파일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)}개")

0개의 댓글