Skip to main content

Docling — 멀티포맷 문서 변환

Docling은 IBM Research에서 개발한 문서 변환 라이브러리로, PDF, DOCX, PPTX, HTML, 이미지 등 다양한 형식을 구조화된 문서 모델(DoclingDocument)로 변환합니다. OCR, 레이아웃 분석, 표 인식, 이미지 추출을 포함하는 종합 파이프라인을 제공합니다.
pip install docling
from docling.document_converter import DocumentConverter

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

# Markdown으로 내보내기
markdown_text = result.document.export_to_markdown()
print(markdown_text)

Docling + 청킹 파이프라인

Docling의 내장 HybridChunker는 문서 구조를 인식하면서 토큰 기반 크기 제어를 동시에 수행합니다.
from docling.document_converter import DocumentConverter
from docling.chunking import HybridChunker

# 1. 문서 변환
converter = DocumentConverter()
result = converter.convert("document.pdf")

# 2. 구조 인식 + 토큰 기반 청킹
chunker = HybridChunker(
    tokenizer="gpt-4o",      # 토크나이저
    max_tokens=512,            # 청크당 최대 토큰
    merge_peers=True,          # 같은 레벨의 짧은 섹션 병합
)
chunks = list(chunker.chunk(result.document))

for chunk in chunks:
    print(f"[{chunk.meta.headings}] ({len(chunk.text)} chars)")
    print(chunk.text[:200])
    print("---")
파라미터설명기본값
tokenizer토크나이저 (모델명 또는 객체)"gpt2"
max_tokens청크당 최대 토큰 수512
merge_peers같은 레벨의 짧은 섹션을 병합True
HybridChunker는 헤딩, 단락, 표, 리스트 등 문서 구조를 인식하여 의미 단위를 존중합니다. 단순히 토큰 수로 자르지 않으므로, Docling 변환 결과에 가장 적합한 청킹 도구입니다.

지원 형식

입력 형식레이아웃 분석표 인식이미지 추출OCR
PDFOOOO
DOCXOOO-
PPTXO-O-
HTMLOOO-
이미지 (PNG, JPG)---O
MarkdownOO--

VLM 파이프라인 — Vision Language Model 기반 문서 이해

Docling v2부터 기존 OCR 파이프라인 외에 Vision Language Model(VLM) 파이프라인을 지원합니다. VLM은 문서 페이지 이미지를 직접 “읽고 이해”하여, 복잡한 레이아웃·차트·수식도 높은 정확도로 변환합니다.

VLM vs OCR 비교

항목OCR 파이프라인 (PdfPipeline)VLM 파이프라인 (VlmPipeline)
동작 방식텍스트 추출 → 레이아웃 분석 → 구조화페이지 이미지를 VLM이 직접 해석
복잡한 레이아웃규칙 기반, 일부 오류 가능시각적 이해로 높은 정확도
차트/수식제한적 (텍스트만 추출)시각적 맥락 포함 변환
속도빠름느림 (GPU 권장)
리소스CPU로 충분GPU 메모리 필요 (2B 모델 기준 ~4GB VRAM)
적합한 경우텍스트 중심 문서, 대량 처리복잡한 레이아웃, 시각 요소가 많은 문서

기본 사용법

VlmPipelinepipeline_cls로 지정하면 VLM 기반 변환이 활성화됩니다. 기본 모델은 GraniteDocling (IBM, 258M 파라미터)입니다.
from docling.datamodel.base_models import InputFormat
from docling.document_converter import DocumentConverter, PdfFormatOption
from docling.pipeline.vlm_pipeline import VlmPipeline

converter = DocumentConverter(
    format_options={
        InputFormat.PDF: PdfFormatOption(
            pipeline_cls=VlmPipeline,
        ),
    }
)

result = converter.convert("document.pdf")
print(result.document.export_to_markdown())

모델 선택

VlmPipelineOptionsvlm_options로 사용할 VLM 모델을 지정합니다. Docling은 여러 사전 정의 모델 스펙을 제공합니다.
from docling.datamodel.base_models import InputFormat
from docling.datamodel.pipeline_options import VlmPipelineOptions
from docling.datamodel import vlm_model_specs
from docling.document_converter import DocumentConverter, PdfFormatOption
from docling.pipeline.vlm_pipeline import VlmPipeline

pipeline_options = VlmPipelineOptions(
    vlm_options=vlm_model_specs.SMOLDOCLING,
)

converter = DocumentConverter(
    format_options={
        InputFormat.PDF: PdfFormatOption(
            pipeline_cls=VlmPipeline,
            pipeline_options=pipeline_options,
        ),
    }
)

result = converter.convert("document.pdf")
print(result.document.export_to_markdown())

VlmPipelineOptions 주요 설정

옵션설명기본값
vlm_optionsVLM 모델 설정 (사전 정의 스펙 또는 InlineVlmOptions)GraniteDocling
accelerator_options.device추론 디바이스 ("auto", "cpu", "cuda", "mps")"auto"
accelerator_options.num_threadsCPU 스레드 수4
accelerator_options.cuda_use_flash_attention2Flash Attention 2 활성화 (Ampere+ GPU)False
enable_remote_services원격 API 서비스 허용 여부False
document_timeout문서당 최대 처리 시간 (초)None
VLM 파이프라인은 GPU가 있을 때 가장 효과적입니다. CUDA GPU가 없는 환경에서는 기존 OCR 파이프라인(PdfPipeline)이 더 빠르고 실용적입니다. macOS에서는 MLX 가속(GRANITEDOCLING_MLX, SMOLDOCLING_MLX)을 활용하세요.