표준국어대사전

gukhanmun-stdict는 국립국어원의 《표준국어대사전》 JSON 내려받기에서 파생된 스냅숏을 내장합니다.

출처 덤프는 이 저장소에 커밋되어 있지 않습니다. 내려받기는 사전 웹사이트 로그인을 필요로 하며, 그 아카이브는 빌드에 사용되는 정규화 데이터보다 훨씬 큽니다. 커밋된 진실의 출처는 그 대신 crates/gukhanmun-stdict/data/stdict.tsv의 정준 TSV 파일입니다.

스냅숏

필드
출처 아카이브전체 내려받기_표준국어대사전_JSON_20260506.zip
덤프 날짜2026-05-06
SHA-2560da6bef096f892d7ab44e8f52ba3f16ece1e88fc8d823e7bc816f2c2d9689e46
TSV 항목260,697

재생성

내려받은 zip을 변한 곳에 두고 다음을 실행합니다:

cargo run -p gukhanmun-stdict --bin gukhanmun-stdict-extract -- \
  -o crates/gukhanmun-stdict/data/stdict.tsv \
  --suffix-output crates/gukhanmun-stdict/data/suffix.tsv \
  ~/Downloads/전체\ 내려받기_표준국어대사전_JSON_20260506.zip

추출기는 사전 키 순으로 정렬된 결정적 UTF-8 TSV를 씁니다. 그러면 gukhanmun-stdict 빌드 스크립트가 컴파일 시점에 gukhanmun-mkdict를 호출하여 내장 FST를 빌드합니다.

접미사 독음

남한의 두음법칙은 일부 한자를 다른 곳에서와 달리 어두에서 다르게 읽게 만듭니다. 그래서 年度에서는 으로, 1998년에서는 으로 읽힙니다. 엔진은 어두가 아닌 위치에 있는 단일 한자의 원 소리를 내장된 unihan 독음에서 복원하므로, 정준 TSV는 단일 한자에 대해 추가 데이터가 필요하지 않습니다.

다음절 합성어는 다릅니다: 어두가 아닌 위치에서 어느 것이 원래의 첫소리를 유지하는지는 사전만이 압니다. 사전은 이를 접미사 표제어(-년대처럼 앞에 하이픈을 붙여 쓴다)와 의존명사 표제어를 통해 기록합니다. 추출기는 이것들을 모아, 어두 독음 I와 접미사 독음 S가 첫 음절에서만 다른, 두 글자 이상의 한자 전용 키마다 crates/gukhanmun-stdict/data/suffix.tsvhanja<TAB>I<TAB>S 행을 씁니다(예를 들어 年代<TAB>연대<TAB>년대). 첫 음절만 보는 검사는 便(/)처럼 의미가 다른 독음을 제외합니다. 단일 한자는 엔진이 unihan 독음에서 처리하므로 일부러 생략됩니다.

gukhanmun_stdict::ko_kr은 내장 FST를 감싸고 각 접미사 독음을 일치하는 항목에 붙이는 KoKrDictionary를 반환하므로, 엔진이 위치에 맞는 독음을 고를 수 있습니다.

추출 정책

word_unit단어이고 original_language_info가 한자를 지닌 찾기 키를 적어도 하나 산출할 수 있는 항목만 포함됩니다. 사전 독음은 pronunciation_info가 아니라 word_info.word에서 옵니다; 동형이의 번호, 하이픈, ^ 구분자는 단어 형태에서 제거됩니다.

고유 한자 항목에서는 language_type = "한자" 분절이 찾기 키로 복사됩니다. 고유어(고유어) 분절이 한자 분절 주변에 나타날 수 있으므로, 고유어 접두나 고유어 접미 단어 같은 국한문혼용 항목은 보존됩니다. 같은 출처 표기 표지는 찾기 키에서 제거됩니다. /로 표시된 인라인 이형 표기는 별개의 키로 펼쳐지므로, 布告하다/佈告하다 같은 출처 표기는 런타임에 일치 가능한 두 형태를 모두 산출합니다.

중국어·일본어·기원 불명의 차용어 분절은 그 original_languageBeijing[北京]이나 haiku[俳句]처럼 독립된 한자 표기나 대괄호로 묶인 한자 표기를 담을 때에만 포함됩니다. 그런 경우 한자 표기가 찾기 키로 사용되고 로마자 텍스트는 버려집니다. 그런 한자 표기가 없는 외래 기원 분절은 건너뛰어, ←lipoic酸 같은 값이 국한문혼용 키가 되지 않도록 합니다.

/(병기)로 표시된 이형 한자 표기는 별개의 TSV 행으로 펼쳐집니다. 중복 키는 최고 우선순위 독음을 유지합니다. → 표지03.처럼 뜻이 다른 항목으로 넘기기만 하는 항목은, 같은 한자 표기에 대해 실질적 정의를 가진 항목에게 집니다. 대괄호로 묶인 차용어 한자 표기는 같은 키에 대해 고유 한자어 독음보다 선호되며, 그 밖에는 정렬된 덤프 샤드 순서에서 처음 만난 독음이 유지됩니다.

추출기 자체는 모든 행에 대해 require_hanjarequire_hangulfalse로 씁니다. 병기 표지는 나중에 규칙 파일(아래 참조)이 덧입히므로, 정준 TSV는 순수한 한자↔한글 사상으로 남습니다.

병기 규칙

crates/gukhanmun-stdict/data/rules.tsv는 빌드 시점에 require_hanja/require_hangul 표지를 사전 항목에 OR-병합하는, 손으로 정리한 규칙을 열거합니다. stdict 크레이트의 build.rs가 규칙 파일을 gukhanmun-mkdict에 넘기므로, 내장 FST는 표지가 이미 인코딩된 채로 배포됩니다.

형식은 kind, pattern, require_hanja, require_hangul, reason 열을 가진 TSV입니다. 세 가지 종류의 규칙이 지원됩니다:

  • entry: pattern은 한자 키가 pattern과 정확히 같은 사전 항목 하나를 일치시킵니다.
  • contains: pattern은 한자 부분 문자열(한 글자 이상)입니다; 한자 키가 그 부분 문자열을 포함하는 모든 항목이 표지됩니다. 사전 키가 국한문혼용일 수 있으므로(예: 布告하다) 패턴은 한자 문자로만 이루어져야 합니다; 한글이나 라틴 부분 문자열은 무관한 항목을 소리 없이 표지할 것입니다.
  • reading: pattern은 한글 독음입니다; 그 독음을 가진 모든 항목이 표지됩니다.

규칙은 require_hanja/require_hangul 중 적어도 하나를 설정해야 하고, 비어 있지 않은 reason을 포함해야 하며, 적어도 하나의 항목을 일치시켜야 합니다. 같은 항목을 건드리는 여러 규칙은 OR-병합됩니다. 어떤 항목과도 일치하지 않는 묵은 규칙은 빌드를 실패시켜, 규칙 파일이 사전과 어긋나 떠다니지 않게 합니다; 규칙 파일을 더 작은 사전과 공유한다면 gukhanmun-mkdict--allow-unmatched-rules를 넘깁니다.

규칙을 추가하거나 편집하려면 rules.tsv를 고치고 다음을 실행합니다:

cargo test -p gukhanmun-stdict

테스트 모음은 내장 FST를 다시 빌드하고, 표지가 대표 항목에 내려앉는지 검증하며, RenderMode::HangulOnlyconvert_plain_text를 처음부터 끝까지 행사하여 표지된 항목이 한글(漢字)로 렌더링됨을 확인합니다.