완벽한 추출: Docling + LangExtract로 비정형 데이터 잠금 해제 🚀

발행: (2025년 12월 25일 오후 03:45 GMT+9)
7 분 소요
원문: Dev.to

Source: Dev.to

위에 제공된 Source 링크만으로는 번역할 본문이 포함되어 있지 않습니다. 번역이 필요한 전체 텍스트(마크다운 형식 포함)를 제공해 주시면, 요청하신 대로 한국어로 번역해 드리겠습니다.

구조적 기반: IBM Docling 📑

추출 파이프라인에서 첫 번째 과제는 “지저분한” 형식을 구조 메타데이터를 잃지 않으면서 기계가 읽을 수 있는 데이터로 변환하는 것입니다. Docling은 오픈소스 툴킷으로, 이 과정을 간소화하여 비정형 파일을 LLM이 쉽게 처리할 수 있는 JSON 또는 Markdown으로 변환합니다.

전통적인 OCR은 느리고 오류가 발생하기 쉬운 반면, Docling은 DocLayNet 같은 특화된 컴퓨터 비전 모델을 사용해 레이아웃을 분석하고 TableFormer를 통해 복잡한 표 구조를 복원합니다. 헤더, 리스트 항목, 심지어 수식까지 식별하면서 계층적 관계를 유지합니다.

Docling 시작하기

from docling.document_converter import DocumentConverter

source = "https://arxiv.org/pdf/2408.09869"  # PDF path or URL
converter = DocumentConverter()
result = converter.convert(source)

# Export to Markdown for LLM readiness
print(result.document.export_to_markdown())

시맨틱 엔진: 구글의 LangExtract 🧠

깨끗한 텍스트를 확보한 뒤에는, 특정하고 구조화된 정보를 추출할 방법이 필요합니다. LangExtract는 사용자 정의 스키마와 few‑shot 예시를 기반으로 원시 텍스트를 엄격히 구조화된 데이터로 변환하도록 설계된 파이썬 라이브러리입니다.

그 핵심 기능은 Precise Source Grounding으로, 추출된 각 엔터티를 원본 텍스트 내 정확한 문자 오프셋에 매핑합니다. 이는 의료 기록(임상 노트)이나 법률 서비스와 같이 모든 데이터 포인트가 감사 가능해야 하는 민감한 분야에서 매우 중요합니다.

LangExtract 작업 설정

import langextract as lx

# 1. 추출 규칙 정의
prompt = "Extract characters and their emotional states."

# 2. 스키마 강제 적용을 위한 few‑shot 예시 제공
examples = [
    lx.data.ExampleData(
        text="ROMEO. But soft! What light through yonder window breaks?",
        extractions=[
            lx.data.Extraction(
                extraction_class="character",
                extraction_text="ROMEO",
                attributes={"emotional_state": "wonder"}
            )
        ]
    )
]

# 3. 추출 실행
result = lx.extract(
    text_or_documents="Lady Juliet gazed longingly at the stars...",
    prompt_description=prompt,
    examples=examples,
    model_id="gemini-2.5-flash"
)

Source:

100 % 추적 가능성 달성: 통합 파이프라인 🔍

두 도구를 결합할 때 진정한 마법이 일어납니다. LangExtract는 원시 텍스트 문자열에만 작동하므로 파일을 수동으로 변환해야 하고 문서 레이아웃 및 출처가 손실될 수 있습니다. Docling을 프런트‑엔드로 사용하면 다양한 형식을 페이지 번호와 경계 상자를 포함한 풍부하고 통합된 표현으로 파싱할 수 있습니다.

이 통합은 LangExtract가 추출한 의미 데이터가 Docling의 메타데이터를 통해 PDF 페이지상의 정확한 물리적 위치와 매핑될 수 있는 원활한 파이프라인을 만들며, 100 % 추적 가능성을 텍스트와 시각적으로 모두 제공한다는 의미입니다.

개념적 통합 워크플로우

# Conceptual: Using Docling for provenance‑aware extraction
from docling.document_converter import DocumentConverter
import langextract as lx

# Step 1: Convert with Docling to preserve metadata
converter = DocumentConverter()
conv_result = converter.convert("report.pdf")
text = conv_result.document.export_to_text()

# Step 2: Extract with LangExtract
result = lx.extract(text_or_documents=text, ...)

# Step 3: Map offsets back to Docling's page/bbox metadata
# (Conceptual integration for visual auditability)

생산 혜택 및 산업 영향 📈

  • RAG & Graph‑RAG: 높은 재현율과 구조화된 출력은 Knowledge Graph 또는 고급 Retrieval‑Augmented Generation 시스템에 공급하기에 이상적입니다.
  • 감사 가능성: 인터랙티브 HTML 시각화를 통해 인간‑인‑루프 검토자는 추출된 엔터티를 클릭하고 원본 컨텍스트에서 직접 강조된 모습을 확인할 수 있습니다.
  • 도메인 적응성: 파이프라인은 방사선 보고서(RadExtract), 재무 요약, 이력서 파싱 등에 비용이 많이 드는 모델 파인튜닝 없이도 적용할 수 있습니다.

결론: 문서 인텔리전스의 미래 ✨

Docling의 구조적 레이아웃 분석과 LangExtract의 기반이 되는 의미 추론을 결합함으로써, 개발자는 “조각난” 추출을 넘어설 수 있습니다. 이 시너지는 비구조화된 문서를 “구조화된 금”으로 변환하고, 각 데이터 포인트에 대해 완전하고 검증 가능한 감사 추적을 제공합니다.

파이프라인 은유
Docling은 느슨하고 번호가 매겨지지 않은 페이지들을 상세 목차가 있는 제본된 책으로 정리하는 꼼꼼한 사서입니다. LangExtract는 그 책을 읽으며 모든 중요한 사실을 네온 마커로 강조하고, 증거로 사용된 문장을 정확히 가리키는 정밀한 북마크를 남기는 전문가 연구원입니다. 사서가 없으면 연구원의 책상이 엉망이 되고, 연구원이 없으면 사서의 작업은 읽히지 않은 정보의 정리된 더미에 불과합니다.

Back to Blog

관련 글

더 보기 »