콘텐츠로 이동

Docling - RAG용 문서 파싱 치트시트

Docling - RAG용 문서 파싱 치트시트

Docling은 PDF, DOCX, PPTX, XLSX, HTML, 이미지 등을 구조화된 표현으로 변환하는 오픈소스 문서 파싱 도구킷(LF AI & Data 프로젝트)입니다. 레이아웃, 테이블, 제목, 읽기 순서를 보존하는 깔끔한 Markdown 또는 JSON을 생성합니다. 계층 인식 청킹을 포함하며 구조 메타데이터로 청크를 강화하고, LangChain 및 LlamaIndex와 직접 통합되므로 RAG 파이프라인 수집 단계에서 가장 강력한 오픈소스 선택 중 하나입니다.

설치

방법명령어
pippip install docling
uvuv add docling
OCR extras 포함pip install "docling[ocr]"
확인docling --version

CLI 사용법

명령어설명
docling document.pdf파일을 Markdown으로 변환 (기본값)
docling --to json document.pdf구조화된 JSON 출력
docling --to md --output out/ report.docx디렉터리로 변환
docling https://example.com/page.htmlURL에서 변환
docling --ocr scanned.pdf스캔된 문서에 OCR 강제
docling --help전체 옵션 목록

Python: 기본 변환

from docling.document_converter import DocumentConverter

converter = DocumentConverter()
result = converter.convert("report.pdf")

doc = result.document
print(doc.export_to_markdown())   # 깔끔한 Markdown
print(doc.export_to_dict())       # 구조화된 JSON 호환 dict
메서드반환
export_to_markdown()제목/테이블 보존된 Markdown
export_to_dict()구조화된 문서 모델 (JSON 호환)
export_to_doctags()DocTags 표현
result.document파싱된 DoclingDocument

지원되는 입력

형식참고
PDF레이아웃, 테이블, 읽기 순서; 스캔용 OCR
DOCX / PPTX / XLSXOffice 형식
HTML웹 페이지 및 내보내기
ImagesPNG/JPG/TIFF via OCR
Markdown / AsciiDoc문서 모델로 재구조화

계층 인식 청킹

Docling의 chunkers는 구조적 맥락(섹션 제목, 테이블 경계)을 각 청크의 메타데이터에 유지하면서 파싱된 문서를 임베딩용으로 분할합니다.

from docling.document_converter import DocumentConverter
from docling.chunking import HybridChunker

doc = DocumentConverter().convert("report.pdf").document
chunker = HybridChunker(tokenizer="sentence-transformers/all-MiniLM-L6-v2")

for chunk in chunker.chunk(doc):
    print(chunk.text)
    print(chunk.meta)   # 제목, 페이지, provenance
Chunker동작
HierarchicalChunker문서 구조(섹션, 항목)로 분할
HybridChunker구조 인식 + 토크나이저 인식 크기 조정/병합
chunk.meta맥락 확장을 위해 제목/provenance 운반

RAG 프레임워크 통합

프레임워크방법
LangChainDoclingLoader 문서/청크 반환
LlamaIndexDocling reader/node parser
Customexport_to_markdown() 또는 chunker 출력 직접 사용
# LangChain 예제
from langchain_docling import DoclingLoader
docs = DoclingLoader(file_path="report.pdf").load()

성능 & 옵션

옵션목적
OCR engineOCR 선택/비활성화 (EasyOCR, Tesseract 등)
Table mode정확 vs 빠른 테이블 구조 복구
DeviceCPU 또는 GPU에서 모델 실행
Page range변환을 특정 페이지로 제한
Pipeline options형식별 변환 파이프라인 튜닝

일반적인 워크플로우

# PDF 폴더를 수집용 Markdown으로 변환
for f in docs/*.pdf; do docling --to md --output corpus/ "$f"; done
# Parse → chunk → embed, RAG 수집의 핵심
from docling.document_converter import DocumentConverter
from docling.chunking import HybridChunker

doc = DocumentConverter().convert("manual.pdf").document
chunks = list(HybridChunker().chunk(doc))
# chunk.text를 모델로 임베드하고, chunk.meta를 옆에 저장

Docling vs 다른 파서

측면DoclingUnstructuredMarker
출력Markdown + 구조화된 모델타입 요소Markdown
청킹기본 제공, 계층 인식요소 기반외부
속도좋음 (CPU)좋음GPU with 가장 빠름
최적자체 호스팅 RAG 수집타입 요소 파이프라인GPU 대량 Markdown

리소스