# 개요
LangChain을 사용하여 Markdown 문서를 처리하는 방법을 설명하는 가이드입니다. 본 문서는 다음과 같은 주요 내용을 다룹니다:
1. 환경 설정
- Python 가상환경 설정 (Windows 환경 기준)
- LangChain 핵심 패키지 및 Markdown 처리용 추가 패키지 설치
2. 기본 기능
- UnstructuredMarkdownLoader를 사용한 기본적인 마크다운 문서 로딩
- Document 객체의 구조와 주요 속성 (page_content, metadata)
3. 처리 모드
- Single Mode: 전체 문서를 하나의 Document로 처리
- Elements Mode: 문서를 의미 단위로 분리하여 구조적 분석 수행
이 가이드를 통해 사용자는 LangChain을 사용하여 Markdown 문서를 쉽게 로드하고 처리하는 방법을 학습할 수 있습니다. 특히 Elements Mode를 활용한 고급 문서 분석 기능을 제공하여 목차 생성, 특정 섹션 추출 등 다양한 문서 처리 작업을 수행할 수 있습니다.
# Python 가상환경 설정
가상환경 분리는 프로젝트별 의존성 충돌을 방지하고 깔끔한 개발환경을 위해 필수적입니다. [[Programming/Python/Setup/Python 가상환경 설정 가이드|Python 가상환경 설정 가이드]]를 참고해 설정하세요. 가상환경 설정이 처음이시라면 가이드의 [[Python 가상환경 설정 가이드#1. 가상환경 생성|1. 가상환경 생성]]부터 [[Python 가상환경 설정 가이드#2. 가상환경 활성화 및 관리|2. 가상환경 활성화 및 관리]]까지만 진행해도 충분합니다.
> [!WARNING]
> - 본 문서는 Windows 환경에서 Python venv를 사용한 가상환경 설정을 기준으로 작성되었습니다
> - Linux/Mac에서는 virtualenv나 conda 사용을 권장하며, 패키지 설치 명령어가 다를 수 있습니다
> - 특히 nltk-data 설치 과정이 OS별로 상이할 수 있으니 주의하세요
# 필수 패키지 설치
## Langchain 기본 패키지
아래는 LangChain 사용을 위한 핵심 패키지들입니다:
```txt
langchain
langgraph
langsmith
faiss-cpu
openai
langchain-openai
langchain-community
```
모든 패키지를 `packages.txt`에 기록하고 일괄 설치하면 편리합니다. 자세한 방법은 [[Programming/Python/Setup/Python 가상환경 설정 가이드#패키지 일괄 설치|패키지 일괄 설치 가이드]]를 참고하세요.
## Markdown Loader 추가 패키지
Markdown 문서 처리를 위한 패키지입니다:
```bash
pip install "unstructured[md]"
```
# 기본 실습
가장 기본적인 마크다운 로더 사용법입니다:
```python
from langchain_community.document_loaders import UnstructuredMarkdownLoader
from langchain_core.documents import Document
import os
markdown_path = "./files/SAMPLE.md"
if os.path.exists(markdown_path):
loader = UnstructuredMarkdownLoader(markdown_path)
data = loader.load()
print(data[0].page_content) # 전체 문서 내용 출력
```
> [!WARNING]
> - NLTK 관련 에러(`LookupError`)가 발생하면 `pip install nltk-data`로 필요한 언어 데이터를 설치하세요
> - 이는 공식 문서에 명시되지 않은 요구사항입니다 (2025-01-26 기준)
## Document 구조
Langchain의 Document 객체는 문서 처리의 기본 단위입니다:
- `loader.load()`는 Document 객체들의 리스트를 반환
- 각 Document는 두 가지 주요 속성을 가짐:
- `page_content`: 실제 문서 내용을 담는 문자열
- `metadata`: 파일 경로, 생성일 등 문서 관련 정보
- 이 구조는 PDF, CSV 등 다른 형식의 문서에도 동일하게 적용됨
# Mode 설정
## Single Mode (기본값)
전체 문서를 하나의 Document로 처리하는 기본 모드입니다:
```python
loader = UnstructuredMarkdownLoader(markdown_path, mode="single")
data = loader.load()
print(len(data)) # 항상 1
print(data[0].metadata) # 기본 메타데이터만 포함
```
## Elements Mode
문서를 의미 단위로 분리해 처리하는 고급 모드입니다:
```python
loader = UnstructuredMarkdownLoader(markdown_path, mode="elements")
data = loader.load()
print(len(data)) # 문서 구조에 따라 여러 개
print(data[0].metadata) # 상세한 메타데이터 포함
```
### Elements Mode 활용 예시
문서의 특정 부분만 추출하고 싶을 때 유용합니다:
```python
loader = UnstructuredMarkdownLoader(markdown_path, mode="elements")
documents = loader.load()
# 제목만 추출하는 예시
for doc in documents:
category = doc.metadata.get("category")
if category == "Title":
print(doc.page_content)
```
Elements Mode는 문서를 제목, 본문, 코드 블록 등으로 자동 분리하여 구조적 분석이 필요할 때 특히 유용합니다. 예를 들어 목차 생성, 특정 섹션 추출, 문서 구조 분석 등의 작업에 활용할 수 있습니다.