🧬 연구 허브

Skill

institution-resolve 코드 참조

'Univ Ulsan, Asan Med Ctr' 같은 표기를 정해진 기관 코드로 판정한다.

언제 쓰나

같은 기관이 수십 가지로 적혀 있어 집계가 안 될 때. 논문 소속만이 아니라 의뢰기관·검사기관·수탁기관 표기 통일에도 같은 구조를 쓴다.

resolve("Univ Ulsan, Asan Med Ctr, Seoul, South Korea")  → "AMC"

정본 코드

~/Documents/혜연/BTC_KOL_PoC/
  institution_resolver.py   337줄
  institutions.json         기관 마스터 137개
설계 문서: docs/02-design/features/institution-name-unify.design.md

--selfcheck 내장. 규칙을 고치면 먼저 돌린다.

핵심 — 판정 순서가 전부다

기존 korean_institution() 은 C3(Clarivate 정규화 기관명)를 먼저 써서 서울아산병원 3,028건이 'University of Ulsan' 으로 뭉쳤다. 여기서는 병원 마커를 C3보다 먼저 본다.

이게 이 스킬의 존재 이유다. 외부 정규화(Clarivate C3, 기관 DB 등)는 대개 대학·법인 단위로 묶는다. 의학 연구에서 의미 있는 단위는 병원이다. 울산대 의대 서울아산병원을 '울산대'로 묶으면 기관 분석이 통째로 무의미해진다.

① 주소 문자열에서 병원 마커 탐지 (Asan Med Ctr, Samsung Med Ctr …)
② 없으면 C3(외부 정규화명) 사용
③ 그래도 없으면 raw_label 로 원문 보존

남이 정규화해준 값을 먼저 믿지 마라. 그쪽이 쓰는 단위가 내가 원하는 단위와 다를 수 있다. 원문에서 내 단위를 먼저 찾고, 못 찾을 때만 외부 값으로 물러난다.

③이 중요하다. 판정 실패를 빈칸으로 두지 않고 원문을 남긴다. 나중에 마스터에 추가할 후보가 거기서 나온다.

구성

함수역할
expand(s)축약형 전개 (Med Ctr → Medical Center)
core(aff)주소에서 핵심 토큰만 남김 (도시·국가·우편번호 제거)
_has_org_info(aff)기관 정보가 있기는 한지
resolve(aff, c3)메인 판정 → 코드
raw_label(aff)판정 실패 시 원문 보존
label(code, lang) · parent_label(code, lang)한/영 라벨, 상위기관

코드와 라벨을 분리한다. 내부는 AMC 같은 코드로 다루고 표시할 때만 라벨로 바꾼다. 한글·영문 보고서를 같은 데이터로 낼 수 있다.

parent_label 로 상위기관을 따로 둔다 — "서울아산병원"과 "울산대학교"를 둘 다 알아야 병원별·대학별 집계를 모두 낼 수 있다.

마스터는 사람이 관리한다

institutions.json 에 137개 기관이 있다. 새 기관이 나오면 여기 추가하지 코드를 고치지 않는다. 판정 로직과 기관 목록은 수명이 다르다.

함정

  • 설계 문서를 남겨라. 판정 순서를 왜 이렇게 정했는지는 코드만 봐서는 안 보인다. 정본은 docs/02-design/features/ 에 설계서를 두고 파일 상단에서 가리킨다.
  • 마커 탐지는 대소문자·구두점에 취약하다. expand → core 를 거친 뒤에 비교한다.
  • 한 기관이 여러 이름을 갖는 경우(개명·통합)를 마스터에서 별칭으로 흡수한다.
  • 집계 전에 판정 실패 건수를 먼저 본다. 실패율이 높으면 그 상태로 분석하면 안 된다.

연관 skill

biblio-normalize(같은 정리 단계), paper-merge-provenance, biblio-analysis