피드로 돌아가기
Dev.toBackend
원문 읽기
비정형 PDF의 구조적 정규성을 활용한 4초 내 예산 데이터 파이프라인 구축
I extracted a government's entire budget from a 625-page PDF in 4 seconds
AI 요약
Context
625페이지 분량의 비정형 PDF 예산서로 인한 데이터 접근성 부재 및 수동 분석의 한계 발생. 단순 Table Extraction 도구로는 일관되지 않은 컬럼 간격과 페이지 분산 데이터로 인해 약 33%의 파싱 오류가 발생하는 상황.
Technical Solution
- pdfplumber를 통한 페이지 단위 텍스트 추출 후 정규표현식 기반의 Pattern Matching 적용
- 개별 페이지의 파편화된 데이터를 유일 식별자인 Entity Code 기준으로 결합하는 Stitching 로직 구현
- 데이터 인입 시점에 growth_pct를 미리 계산하는 Precomputed Column 전략 채택
- Postgres의 GENERATED ALWAYS AS STORED 기능을 통한 런타임 집계 연산 제거
- 단순 쿼리 기반의 /api/v1/anomalies 엔드포인트 설계를 통한 Sub-millisecond 응답 속도 달성
Impact
- 117개 정부 기관의 6개년 예산 데이터 전체 추출 시간을 4초 미만으로 단축
- 런타임 Aggregation 제거를 통한 API 응답 시간의 획기적 개선
- 20% 이상의 변동폭을 갖는 이상 징후(예: 농림부 예산 262% 증가)의 자동 탐지 구현
Key Takeaway
완전한 비정형 데이터라도 문서 내부의 구조적 규칙성(Structural Regularities)을 찾아내면 ML 없이도 고성능의 정형화 파이프라인 구축이 가능함.
실천 포인트
- 비정형 문서 파싱 시 단순 툴 의존보다 데이터 간의 유일 식별자(Unique Identifier) 기반 결합 전략 검토 - 읽기 빈도가 높고 연산 비용이 발생하는 지표는 Ingest 시점에 Precompute 하여 DB에 저장 - 도메인 지식이 부족한 상태에서 이상 징후 탐지 시, 단순 Heuristic 임계값 설정 후 점진적 고도화 추진