End-to-End Document Extraction
관세 신고용 핵심필드 자동추출 — 스캔·난삽 레이아웃까지 견고 처리
Invoice / B/L 등 비정형 문서에서 KCS 수입신고 필드를 추출해 즉시 사용 가능한 JSON/EDI로 출력합니다.
FastAPI
OCR
Regex IR
SHACL QC
CLI
한 줄 요약: “입력 문서 → 텍스트 확보(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_debugPOST /renderGET /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 실행 스크립트 포함
폴더/파일 구조 정합성
- cli/poc_runner.py (요구) ↔ cli/poc_runner.py (실제)
- core/compare.py, core/contract.py (요구) ↔ 루트에 존재(실제)
- engine/image_preprocess.py (요구) ↔ 미존재
- tests/dashboard_ui.py (요구) ↔ 루트 dashboard_ui.py (실행시 모듈경로로 호출)