Skip to content

Latest commit

 

History

History
132 lines (105 loc) · 10.3 KB

File metadata and controls

132 lines (105 loc) · 10.3 KB

진척도 (Progress / 구현 현황)

2026-05-22 세종국책연구단지 미팅(원문) 요구사항 대비 현재 코드 구현 상태를 정직하게 매핑한 문서입니다. 계획/로드맵은 roadmap.md, 어려운 영역(도장· 손글씨) OCR 개선안은 improvement-plan-ocr.md를 보세요.

범례: ✅ 구현 완료 · 🟡 부분 구현 · 📋 계획 수립(미구현) · ⬜ 미착수

한눈에 보기

Phase 내용 상태 진행
Phase 0 준비(보안 결정·GPU·샘플·파일럿) 🟡 부분 ████░░░░░░ 40%
Phase 1 MVP — PDF에서 이름 자동추출 + 검토 UI ✅ 완료·배포 █████████░ 90%
Phase 1.5 어려운 영역 OCR·신뢰도·교차검증 🟡 1.5a 구현 ███░░░░░░░ ~30% (1.5a 완료, 1.5b/c 계획)
Phase 2 소속 자동검색·내부직원 데이터·인사혁신처 DB ⬜ 미착수 ░░░░░░░░░░ 0%

요약: 미팅의 1단계 목표 "타이핑 없이 눈으로만 확인"타이핑 텍스트(텍스트레이어 PDF) 기준으로 동작하며 내부 서버에 배포(PM2 :3100) 되어 있습니다. 미팅에서 "정확도 낮을 것"이라 예상한 도장·필기체·스캔 OCR은 현재 "감지해서 사람 검토 큐로 보내기"만 하고, 실제 OCR·신뢰도 산출은 합의된 개선계획으로 수립 완료·구현 대기 상태입니다.


미팅 요구사항 → 구현 현황 매핑

추출 대상 (관계자)

미팅 요구 상태 근거 / 메모
학위논문 지도교수 추출 extract role supervisor (stub/vlm 인준·표지 파싱)
학위논문 심사위원 추출 role committee
(보너스) 부지도교수·학과장 co_supervisor/department_head
연구과제 책임자·참여연구진 role principal_investigator/research_staff (역할·추출 경로 존재)
내부직원 부서장·실장·과제책임자 🟡 domain.ts ROLES에 역할 정의됨. 조직/인사 데이터 연동은 미착수(Phase 2)

OCR / 추출 방식 (미팅 기술논의)

미팅 요구 상태 근거 / 메모
타이핑 텍스트 PDF에서 추출 ingest/pdf.ts 텍스트레이어 추출(pdfjs) → LLM/휴리스틱 추출
도장/서명/필기체 위치 감지 로컬 vLLM(Qwen2.5-VL)로 "있다/어디" 감지→크롭→검토 큐(DETECT_MARKS=1). 라이브 확인됨
필기체(한글) 글자 읽기 🟡 감지는 됨(위). 전서체/손글씨 인식은 자동확정 금지·검출→사람(설계상). 정식 OCR은 개선계획
영문 이름 → 한글 여러 개 병기 🟡 1.5a 구현: 근접중복(같은 성씨 + 자모 1자 차이) nameCandidates + 검토 UI 후보 드롭다운(이주영이조영 자동병합 없이 사람이 선택). 엔진 n-best(VLM 다중 한글표기)는 1.5b
한자 논문 앞 페이지만 처리 🟡 학위논문은 표지/앞 1–2p만 파싱(extractThesis). 한자 전용 라우팅은 미세조정 여지
스캔 PDF / 이미지(hindex) OCR 🟡 도장/서명 감지는 라이브 동작. 이미지 이름 OCREXTRACTOR_MODE=vlm로 켜면 동작(라이브 확인), 기본은 stub

심사위원 풀 / 소속

미팅 요구 상태 근거 / 메모
소속 불분명 시 미기재 처리 affiliation nullable, 없으면 비움(aggregate)
추출 인물 소속 자동검색 Phase 2 (난이도 높아 추후)
인사혁신처 DB(열람만) 캡처/Computer Use Phase 2 미착수
위원장 추천/외부 풀 대조 범위 밖(명단 내보내기로 대조 지원)

1단계 합의 목표 / 출력물

미팅 요구 상태 근거 / 메모
PDF에서 이름 자동 추출 4단 파이프라인(타이핑 텍스트 기준)
논문명 + 인물 이름 목록 출력 검토 UI 역할/문서별 그룹 + 출처(문서·페이지), CSV/Excel 내보내기
육안 검토 병행(맹신 금지) 검토 UI: 초록 "자동통과" / 노랑 "미확인" 배지, 확인/수정/제외, 검토 필요 큐

액션 아이템

항목 상태 메모
합격자 3명분 샘플 제공(2·3) ⬜ 대기 제공 시 라벨셋·캘리브레이션에 사용(개선계획 §4·평가)
샘플로 OCR+LLM 파일럿(1) 🟡 결정적 stub 파이프라인 + 온프레 VLM 클라이언트 와이어 완료. 실샘플 미검증

Phase별 상세

Phase 0 — 준비 🟡 ████░░░░░░

  • 📋 추출 프롬프트 + JSON 스키마 파일럿: 스캐폴드 완료(stub + VLM 프롬프트). 실데이터 파일럿 ⬜
  • [보안] 외부 API 가부 결정 (차단요소) · ⬜ 온프레 GPU 확보 · ⬜ 합격자 3명분 샘플 확보

Phase 1 — MVP ✅ █████████░

  • ✅ 1단 Ingest(pdf 텍스트레이어·image·hwp/hwpx 텍스트추출·text), 2단 Type 분류, 3단 Extract(stub+VLM 클라이언트), 4단 Aggregate(dedup·역할합집합·본인제외·보수적 매칭·자간 정규화·자모 단위 동명이인 후보)
  • ✅ 임베디드 DB(libsql+Drizzle 7테이블, 지원자 external_id로 중복 식별) · 백그라운드 워커·작업 큐
  • ✅ 검토 UI(seed-design): 지원자별 검토(관계 유형별 그룹 + 필터 칩 + 문서별 인원 태그, 배지·출처 링크), 검토 필요 큐(도장/손글씨/동명이인, 인라인 썸네일·필터·bbox·CSV)
  • ✅ 명단 내보내기(CSV/Excel) · ✅ 102 테스트 green · ✅ PM2 배포(:3100) · ✅ GPU 모니터링(Prometheus+Grafana)
  • ✅ 실합격자 ZIP end-to-end 검증(문서 13건, PDF+HWP+이미지 → 관계인 50여 명) · 🟡 한자/앞페이지 미세조정 여지

Phase 1.5 — 어려운 영역 OCR 🟡 █████░░░░░ (1.5a + 도장/서명 감지 라이브, OCR·앙상블은 부분)

  • 1.5a(텍스트 기반, 모델/의존성/런타임 추가 0): 공유 폼체크 헬퍼(form-check.ts), 이름 근접중복(jamoEditDistance/koreanNearDuplicates자모 분해 후 1자 차이=오인식, 통째 음절 접두=약어, 같은 성씨만) → nameCandidates(검토 UI 후보, 자동병합 금지. 이주영↔이조영은 묶고 박철수↔박철민은 안 묶음), 카테고리별 임계값 + confirmed-is-advisory 불변식(공유 review-policy.computeNeedsHuman, 두 사이트), 자기보고 confidence=advisory, crossCheck 스켈레톤 (비-thesis NO-OP), scripts/eval.ts 검토량 baseline(npm run eval). 102 테스트 green.
  • 도장/서명/손글씨 감지(로컬 vLLM, 라이브 동작 확인): GPU1에 Qwen2.5-VL-7B-Instruct를 vLLM(:8010)로 띄우고, 관련 페이지를 이미지로 렌더(render.ts, pdf-to-img+@napi-rs/canvas) → VLM에 "도장/서명 위치(bbox)"를 질의(extract/detect.ts, 글자는 안 읽음) → bbox 크롭 → review_flags(crop) 로 검토 큐에 노출(worker/detect-marks.ts, DETECT_MARKS=1). 스모크/E2E 라이브 통과: 합성 인준서에서 이름 3건 추출 + 도장 bbox(0.75,0.24) 정확 감지 + 크롭 파일 생성. 크롭 서빙 /api/crop/[flagId].
  • 🟡 멀티모델 앙상블(vLLM, 로컬): EnsembleExtractor + 투표/후보 + 서빙 스크립트 + 목업 테스트 코드 완비. 동시 3모델은 VRAM 부담이라 현재는 단일 경량 모델(Qwen2.5-VL-7B) 로 운용, 앙상블은 여유 시 옵션.
  • 📋 1.5b/1.5c(잔여): 도장 인식(전서체)은 자동확정 금지·검출→사람 유지, 전용 per-char score· printed↔seal 교차검증·평가 플라이휠은 개선계획 따라 단계 진행.

Phase 2 — 확장 ⬜ ░░░░░░░░░░

  • ⬜ 소속 자동검색 · ⬜ 내부직원 관계(조직/인사 데이터) · ⬜ 인사혁신처 DB(Computer Use)
  • 🟡 HWP/HWPX — 텍스트 추출은 완료(cfb+zlib/adm-zip), 내부 도장·서명 렌더 감지는 미착수
  • ⬜ 도장 전용 엔진/파인튜닝

최근 추가 (2026-06)

  • HWP/HWPX 텍스트 추출(순수 Node, 외부변환·sudo 불필요) · 한글 ZIP 견고성(CP949/NFD/장문 파일명/임의 폴더구조)
  • 자모 단위 동명이인/약어 판정 — 음절 단위 오판(박철수↔박철민) 제거, 이주영↔이조영·정민↔정민호만 후보
  • 지원자 중복 제거 — 같은 지원번호(external_id) 재업로드 시 덮어쓰기(1지원자=1카드)
  • 검토 화면 분류 — 관계 유형별 그룹 + 필터 칩(전체·검토필요·역할별) + 문서별 인원 태그
  • GPU 모니터링 — GPU→모델 매핑 Prometheus 익스포터 + Grafana 대시보드(deploy/)
  • 로컬 로그인 — users 테이블(scrypt) + HMAC 세션 쿠키 + 미들웨어 전 경로 보호(외부 IdP 없음, scripts/create-user.ts)
  • 문서 슬라이드 뷰어 — 문서 카드 클릭 → 우측 패널(PDF/이미지 원문, HWP는 추출 텍스트 읽기 전용) + 다운로드
  • 검토 화면 접이식 그룹 + 검색 — 관계유형 그룹 기본 접힘(검토 필요만 펼침)·이름/소속 검색·업로드 드래그&드롭
  • 워커 고아작업 복구 — 재시작 시 running 잔존 작업 자동 재큐(영구 "추출 running" 방지)

다음 단계

  1. 선결 결정(미팅·개선계획): 외부 API 가부, 온프레 GPU, 합격자 3명분 샘플 제공.
  2. 샘플 확보 시 실데이터 파일럿(VLM 경로 검증) + 라벨셋/eval 구축.
  3. 개선계획 Phase 1.5a(모델/의존성 0)부터 착수 — n-best 병기·gazetteer· 검토량 baseline. 이후 go/no-go 게이트로 1.5b(전용 OCR) 진행 여부 결정.

UI 개선이 필요할 때는 shadcn/ui 등 Tailwind 호환 컴포넌트 리소스를 가져다 쓸 수 있습니다(현재 UI는 seed-design 토큰 기반).