← 목록
기타 2026-07-09 7KB 읽기 7분

Number 온톨로지 오염 수정 — 정확 한국어 수사 재작성

개요

실어휘코드북v2_한글.psv(Concepticon 4,164개념 + 한글글로스, en↔ko 번역 소스)의 Number 온톨로지 163행 중 97행이 형용사/음식/식물 등 엉뚱한 한글글로스로 오염돼 있었다 (Number오염스캔.psv가 사전 스캔). haiku가 제시한 후보 수사 표기 자체도 다수 오답 ("FIVE HUNDRED→다섯백", "TWENTY ONE→이십하나" 등 순우리말/오기)이라 97건 전부 정확한 한자어 수사로 재작성 후 반영했다.

무엇을 했는지

  1. 오염 97건 전수 재작성: 100 이상 자릿수는 한자어(백/천/만/억/조), 1~99도
기존 코드북의 정상행 패턴(THREE→삼, FIVE→오, FIFTY SIX→오십육 등)에 맞춰 한자어 기수로 통일. 만/억/조 단위(TEN MILLION~TRILLION)는 한국어 4자리 분단 체계(만=10⁴·억=10⁸·조=10¹²)로 환산, 선두 "일"은 생략(일백, 일만 기존 코드북 관례와 일치). - 보류 처리 0건 — 97건 전부 단순 자릿수 조합으로 확정 가능(복합/모호 케이스 없음).

  1. 자체 교차검증(역산): Perl로 영문 수사→정수 파서(units/tens/scales)와
한자어 수사→정수 파서(십/백/천 자리단위 + 만/억/조 4자리 그룹단위)를 각각 작성, 97건 전체를 역산해 원 개념값과 비교. - 역산 일치율: 97/97 (100%) — 스크립트: /private/tmp/.../scratchpad/roundtrip.pl (임시 검증 스크립트, 일회성 데이터 검증용 — 재사용 도구화 대상 아님). - 반영 전, Number오염스캔.psv의 행번호가 실제 실어휘코드북v2_한글.psv 라인번호와 1:1 대응하는지 사전 확인(concept·gloss 양쪽 필드 일치 검증, 97/97 일치 확인 — 실어휘코드북v2.psv엔 한글글로스 열이 없고 _한글.psv에만 8번째 열로 존재, 헤더 주석 "형식: 개념|A|P|O|S|의미장|온톨로지"는 7필드지만 실제 데이터는 글로스 포함 8필드).

  1. 백업 후 코드북 반영: Perl로 8번째 필드(글로스)만 교체, 나머지 7필드·후행
개행 불변. - 백업: /Users/ef/crowny-butler/libs/실어휘코드북v2_한글.psv.bak-Number수정-20260710003003 - 반영: 97건 (기대건수와 일치, perl 스크립트 내 assert로 가드) - 비대상 라인 byte-identical 검증: 전체 4,169라인 중 정확히 97라인만 변경, 나머지 4,072라인은 원본과 완전 동일(Python 라인단위 diff로 확인). - 필드수 불변 검증: 반영 후 전체 파일 awk -F'|' 'NF!=8' 이상행 0건. - 보류 파일(Number보류.psv)은 생성하지 않음 — 보류 0건.

  1. 왕복 스모크:
- 파일 mtime touch 후 4초 대기 → :9977 상주서버(crownycode-brain-server.sh)의 /translate?d=en2ko 3s 폴 mtime 감시가 재로드 확인. - 단일 토큰 개념 3건(다단어 토큰화 한계 회피 — /translate는 공백 단위 단어별 매치라 "FIVE HUNDRED" 같은 다단어 개념은 "FIVE"+"HUNDRED" 각각 매치되어 "오 백"으로 분리 출력됨, 이는 도구의 기존 알려진 한계이지 이번 수정의 결함 아님): - TRILLION → en2ko (매핑1/1) - HUNDRED → en2ko (매핑1/1) - THOUSAND → en2ko (매핑1/1) - TEN → en2ko (매핑1/1) - ko2en 역방향: hundred, ten 정상. fabric으로 나온 것은 ko2en 다대일(318건 중복, 파일 내 첫 등재 행 우선) 기존 알려진 한계 — "천"이 "THOUSAND"보다 앞선 행에서 "옷감/직물" 의미로도 등재돼 있어 첫 매치가 우선된 것(동음이의 충돌, 이번 수정과 무관한 기존 코드북 구조 이슈). - /Users/ef/.claude/scripts/브레인번역.한선 CLI 경로: `echo TRILLION | 브레인t1.sh 번역 en2ko -조` (매핑1/1) 정상 확인.

검증 요약

항목결과
역산 일치율97/97 (100%)
반영 건수97건
보류 건수0건
왕복(서버 :9977 /translate)정상(mtime 재로드 확인, 단일토큰 4건 전부 매핑1/1)
왕복(브레인번역.한선 CLI)정상(TRILLION→조, 매핑1/1)
Number행 정상률(반영 전)66/163 (40.5%)
Number행 정상률(반영 후)163/163 (100%)
비대상 라인 무결성4,072/4,072 byte-identical

원인 추정 (오염 패턴)

오염 97건은 전부 Concepticon 대량 정렬/자동 글로스 생성 파이프라인에서 엉뚱한 개념 슬롯의 한글 뜻풀이가 Number 온톨로지 슬롯에 잘못 정렬(offset misalignment)되어 흘러든 것으로 추정된다. 근거:

  • 오염된 글로스가 형용사/동사(참을성있다·성급하다 등)·음식/식물(바나나·망고·상추 등)
범주로 나뉘어 있는데, 이는 Concepticon 데이터셋의 다른 의미장(Property·감정형용사, Food/Plant)에서 나올 법한 항목들 — 즉 Number 슬롯이 아니라 인접한 다른 온톨로지 버킷의 글로스가 잘못 병합됐을 가능성이 높다(단순 랜덤 오타가 아니라 다른 카테고리 단어들이 통째로 섞여든 패턴).
  • 실어휘코드북v2.psv(글로스 없는 원본, 7필드) 자체는 Number 163행이 정상 나열돼
있어 A/P/O/S 코드 배열 자체는 오염되지 않음 — 오직 _한글.psv에 8번째 열로 "부착"된 한글글로스 생성 단계(일괄 배치 번역/주석 부착 스크립트)에서 발생한 정렬 오류로 국한된다.
  • haiku 후보 수사 표기 오류("다섯백" 등)는 오염과 별개 문제로, 자동 숫자→한자어
변환 규칙이 없어 순우리말 관성(다섯·아흔 등)으로 생성된 것으로 추정 — 코드북 다른 정상행(오백·구십 등)이 이미 한자어로 일관되어 있었으므로 규칙 불일치가 원인.

관련 파일

  • /Users/ef/crowny-butler/libs/실어휘코드북v2_한글.psv — 반영 대상(수정됨)
  • /Users/ef/crowny-butler/libs/실어휘코드북v2_한글.psv.bak-Number수정-20260710003003 — 백업
  • /Users/ef/crowny-butler/libs/Number오염스캔.psv — 입력 스캔 결과(원본, 미변경)
  • /Users/ef/.claude/scripts/crownycode-brain-server.js:9977 상주서버(/translate 라우트, mtime 3s 감시 재로드)
  • /Users/ef/.claude/scripts/브레인번역.한선, /Users/ef/.claude/scripts/브레인t1.sh — CLI 번역 경로

잔여 이슈

  • ko2en 다대일 동음이의 충돌(fabric 우선매치 등 318건)은 이번 작업 범위
밖(코드북 구조적 이슈, 별도 과제).
  • /translate 엔드포인트가 공백 토큰 단위 매치라 다단어 Number 개념
(FIVE HUNDRED 등)은 자연스러운 단일 결과로 안 나오고 부분 매치 2건으로 분리 출력됨 — 데이터 자체는 정확하나 도구의 다단어 n-gram 매칭 미구현 한계(기존에 문서화된 이슈, 2026-07-06-브레인번역-코드북배선.md 참조).
  • 실어휘코드북v2.psv(글로스 없는 원본)는 이번 수정 대상 아님(글로스 열 자체가
없어 오염 무관).