왜 어려운가 — 숫자부터
정본 코드에 실측이 박혀 있다.
교신저자 642편(24.8%)이 '마지막 저자' 추정이고 그 가정은 실측 대비 39.7% 만 맞는다. KoreaMed·PubMed 메타데이터에는 교신저자 필드가 아예 없어(8편 전수 조회 0건) 원문 PDF 를 읽는 것 외에 방법이 없다.
관행처럼 쓰는 '마지막 저자 = 교신저자' 가정이 10편 중 6편은 틀린다. 저자 기여도나 KOL 분석의 근거로 쓰면 결과가 통째로 흔들린다.
정본 코드
~/Documents/혜연/BTC_KOL_PoC/
corr_email.py 228줄 ① 소속란 이메일 local part
verify_corresponding_pmc.py 368줄 ② PMC 전문 (독립 3자 대조)
verify_corresponding_pdf.py 528줄 ③ 원문 PDF 1면세 파일 모두 --selfcheck 를 가지고 있다. python3.11 로 실행해야 한다 — 툴킷이 str | None(3.10+) 문법을 쓴다.
① 이메일 local part 로 지목한다
PubMed 는 교신저자 전용 필드를 안 준다. 대신 교신저자 이메일을 소속란 끝에 붙인다. 문제는 그 이메일이 모든 저자에게 똑같이 복사되어 온다는 것이다(221편 중 199편).
그래서 "이메일이 붙어 있다"는 사실만으로는 누구인지 알 수 없다. 알아낼 수 있는 이유는 local part 자체가 사람을 지목하기 때문이다.
ymhan@jbnu.ac.kr → 성 han + 이니셜 ym → 저자 배열의 Han Y M모호하면 답을 내지 않는다. 성만 걸리는 후보가 둘 이상이면(김이 셋인 논문) 빈 값으로 둔다. 틀린 교신저자를 넣는 것보다 비워두는 게 낫다.
② PMC 전문 — 독립된 세 번째 근거
지금 교신저자는 WoS 리프린트 주소와 OpenAlex 두 곳에만 의존한다. 둘이 갈리는 논문이 있어도 어느 쪽이 맞는지 판단할 근거가 없었다. PMC 전문은 출판사가 논문 안에 직접 표시한 값이라 둘과 독립된 세 번째 근거다.
두 소스가 충돌할 때 다수결이 아니라 독립 근거를 하나 더 구하는 것이 답이다. 이메일도 함께 들어 있어 ①의 검증에도 쓰인다.
캐시(pmc_cache.json)는 배치마다 증분 저장한다. 전량 처리 중 끊겨도 이어서 한다.
③ 원문 PDF — 최후 수단
PDF 를 받아 1면의 교신저자 표기를 읽는다. 느리고 실패율이 있지만 메타데이터에 없는 건은 이 방법뿐이다.
대조군 없이는 추출기를 못 믿는다
이 프로젝트의 가장 중요한 설계다.
세 구간을 함께 검증한다. 대조군이 없으면 추출기 자체를 믿을 수 없다. est 교신 추정 구간 — 원래 목표
추정 구간만 검증하면 "추출기가 100% 맞다"는 결과가 나와도 그게 추출기가 좋아서인지 그 구간이 쉬워서인지 모른다. 정답을 이미 아는 구간을 함께 넣어야 추출기의 실력이 분리된다.
--pilot 로 3구간 표본 25편을 먼저 돌려 추출기를 검증하고, 그 다음 전량으로 간다.
검증 먼저, 적용은 나중
python3 corr_email.py --validate # 정답 보유 논문에서 정확도 실측
python3 corr_email.py --apply # Email_Corresponding 필드를 채운다--validate 와 --apply 를 분리한다. 정확도를 모르는 채로 필드를 채우면 나중에 그 값을 얼마나 믿어야 할지 알 수 없다.
함정
- 판정 경로를 필드에 남겨라. 이메일로 찾은 것과 PDF 로 확인한 것은 신뢰도가 다르다.
- 저자 배열과 맞출 때 인덱스를 쓰지 마라 —
paper-merge-provenance참조. - PDF 다운로드는 실패한다. 실패를 오류가 아니라 '미확인'으로 기록한다.
연관 skill
paper-merge-provenance, author-disambiguate, kol-profile, paper-collect