End-to-End Document Extraction

관세 신고용 핵심필드 자동추출 — 스캔·난삽 레이아웃까지 견고 처리

Invoice / B/L 등 비정형 문서에서 KCS 수입신고 필드를 추출해 즉시 사용 가능한 JSON/EDI로 출력합니다.

FastAPI OCR Regex IR SHACL QC CLI
데모 열기 API 문서 엔드포인트와 예제

한 줄 요약: “입력 문서 → 텍스트 확보(OCR 보강) → 후보/IR → 점수·SHACL → 정규화(EOC)”를 자동화했고, UI/CLI/API로 즉시 확인 가능합니다.

내 역할: 엔드투엔드 설계/구현 · 스키마/품질보증 · 문서화/대시보드

작동 방식

사전검사 → 전처리/OCR → 라우팅 → 후보추출(IR) → 스코어링/SHACL → 후처리/정규화 → 병합(EOC)

증거(품질/검증)

Doc-level 성공률
64%
POC F1 평균/최저
94% / 83%
운영 F1 평균/최저
47% / 42%
정규화 정확도
100%
테스트 샘플
벤더 2 · 인보이스 3
Latency
문서 1건 1 s 이내
비용
문서 1건 ₩0

텍스트 품질/선택

  • printable_ratio·페이지·용량 기반 OCR 선호
  • 텍스트 통계로 품질 추론

SHACL 검증

  • 적합 보너스/위반 패널티
  • QC 지표·점수 산출

정규화/세이프가드

  • 금액 2자리 소수, 날짜 YYYY-MM-DD
  • 헤더성 문자열/카테고리 보정

참고: 지표는 샘플/운영 환경 차이를 명시적으로 비교합니다. “정규화 100%”는 스키마 캐스팅 기준의 정확도를 뜻합니다.

데이터 계약(스키마)

DEFAULT_SCHEMA(내장) + 외부 report_format.json 오버라이드를 지원하며, cast_contract_to_schema로 느슨한 캐스팅을 수행합니다.

{
  "vendor": "string",
  "invoice_no": "string",
  "date": "YYYY-MM-DD",
  "amount_total": "number(2-digit decimals)",
  "currency": "string",
  "items": [
    { "desc": "string", "qty": "number", "unit_price": "number", "line_total": "number" }
  ],
  "meta": {
    "used_ocr": "bool",
    "printable_ratio": "float",
    "shacl": { "score": "float", "violations": "int" }
  }
}

샘플 구조(개념적). 실제 필드는 프로젝트 스키마에 따릅니다.

API 스케치

POST /analyze

curl -X POST http://localhost:8080/analyze \
  -H "Content-Type: multipart/form-data" \
  -F "files=@sample.pdf"

입력: files[]. 출력: 문서별 candidates, ir 등 파이프라인 산출.

POST /render

curl -X POST http://localhost:8080/render \
  -H "Content-Type: application/json" \
  -d '{"doc_id":"...", "select":"best"}'

후처리/정규화 렌더링(선택 반영).

엔드포인트

  • GET /
  • POST /analyze, POST /analyze_debug
  • POST /render
  • GET /engine_info

앱: FastAPI(title="EOC Dashboard", version="1.1.0")

실행

# 1) 환경 구성
conda env create -f environment.yml
conda activate inv-root

# 2) API 기동
uvicorn tests.dashboard_ui:app --port 8080

# 3) 분석 호출
curl -X POST http://localhost:8080/analyze \
  -H "Content-Type: multipart/form-data" \
  -F "files=@sample.pdf"

# 4) 정규화 렌더
curl -X POST http://localhost:8080/render \
  -H "Content-Type: application/json" \
  -d '{"doc_id":"...", "select":"best"}'

모듈 요약

1) cli / poc_runner

  • 파이프라인 오케스트레이션 & 최종 병합(EOC)
  • run_pipeline, run, _merge_docs_to_eoc

2) pre_inspect

  • MIME/페이지/가독성/용량 검사, prefer_ocr 판단
  • 출력: inputs[] 메타

3) pre_flight

  • 텍스트 확보(PDF 추출 + OCR 보강), 통계부착
  • 출력: docs[] 텍스트/통계

4) routing

  • PDF, 이미지 파일 분류(확장 지점)
  • 출력: docs 그대로

5) multi_engine

  • IR 구성 + 정규식 기반 후보 생성
  • 출력: candidates, ir

6) scoring

  • 가중치·합리성·SHACL 점수 연동, best 선택
  • 출력: score, qc{shacl}

7) post_process

  • 스키마 캐스팅, 금액/날짜 정규화, 상호보정
  • 최종 final 산출

기타 유틸

  • pdf_text: 텍스트 통계/후처리
  • ocr: 페이지 OCR
  • compare: 정규화 후 diff

대시보드 / API

  • FastAPI: GET /, POST /analyze, /render
  • Uvicorn 실행 스크립트 포함

폴더/파일 구조 정합성