Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Gukhanmun: 國漢文을 한글로 바꾸기

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

Gukhanmun: 國漢文을 한글로 바꾸기

Haskell로 作成되었던 國漢文을 한글로 바꿔주는 소프트웨어 Seonbi를 Rust로 再作成하고 改善시킨 Gukhanmun에 對한 發表입니다.

Avatar for Hong Minhee (洪 民憙)

Hong Minhee (洪 民憙)

June 20, 2026

More Decks by Hong Minhee (洪 民憙)

Other Decks in Programming

Transcript

  1. 國漢文混用體, 줄여서 國漢文이란? 국한문 혼용체 국한문 國漢文混用 또는 漢字混用 韓國語를

    文字로 表記할 때 한글과 漢字를 섞어서 表記하 국한문 혼용 한자 혼용 한국어 문자 표기 한자 표기 는 方式을 말한다. 嚴密하게 말하면 漢文은 使用하지 않으므로 國漢字混用이라 불러 방식 엄밀 한문 사용 국 한자 혼용 야 한다는 意見도 있다. 의견 《위키百科》 韓國語板 [[한글專用과 國漢文混用]]: 백과 한국어 판 전용 국한문 혼용
  2. 한 글 專 用 下 의 漢 字 敎 育

    에 關 하 여 나 는 韓 國 語 를 쓸 때 國 漢 文 混 用 體 를 즐 겨 쓴 다 。 블 로 그 글 도 、 소 셜 미 디 어 포 스 트 도 漢 字 를 섞 어 쓸 때 가 많 다 。 漢 字 에 對 한 個 人 的 愛 着 은 分 明 히 있 다 。 그 런 데 도 漢 字 敎 育 을 韓 國 의 公 敎 育 에 서 深 化 해 야 한 다 는 主 張 에 는 同 意 하 지 않 는 다 。 이 글 은 그 理 由 를 說 明 하 려 는 試 圖 다 。 敎 育 의 디 폴 트 는 「 가 르 치 지 않 는 다 」 이 다 敎 育 은 費 用 이 많 이 든 다 。 敎 師 를 養 成 해 야 하 고 、 敎 材 를 만 들 어 야 하 고 、 무 엇 보 다 學 生 들 의 時 間 을 써 야 한 다 。 學 生 의 時 間 은 有 限 하 므 로 、 어 떤 科 目 을 敎 育 課 程 에 넣 는 다 는 것 은 다 른 科 目 에 쓸 수 있 었 을 時 間 을 빼 앗 는 다 는 뜻 이 기 도 하 다 。 그 렇 기 때 문 에 어 떤 科 目 이 든 敎 育 課 程 에 包 含 하 려 면 그 效 用 이 科 學 的 으 로 立 證 되 어 야 한 다 。 배 우 면 도 움 이 될 것 이 라 는 漠 然 한 期 待 로 는 不 足 하 다 。 도 움 이 되 지 않 는 敎 育 이 란 없 기 때 문 이 다 。 바 느 질 도 배 우 면 도 움 이 되 고 、 木 工 도 배 우 면 도 움 이 된 다 。 問 題 는 漢 字 敎 育 이 도 움 이 되 느 냐 가 아 니 라 、 같 은 時 間 을 投 入 했 을 때 다 른 敎 育 보 다 더 도 움 이 되 느 냐 이 다 。 漢 字 敎 育 이 韓 國 語 文 解 力 向 上 에 도 움 이 된 다 는 科 學 的 根 據 는 現 在 로 서 는 없 다 。 種 種 漢 字 를 알 면 韓 國 語 語 彙 力 이 좋 아 진 다 는 主 張 이 있 지 만 、 이 를 뒷 받 침 하 는 體 系 的 인 硏 究 는 찾 기 어 렵 다 。 敎 育 政 策 은 直 觀 이 아 니 라 根 據 위 에 서 야 한 다 。 效 用 이 立 證 되 지 않 는 한 디 폴 트 는 언 제 나 「 가 르 치 지 않 는 다 」 이 고 、 이 는 漢 字 敎 育 에 도 마 찬 가 지 로 適 用 된 다 。 國 漢 文 混 用 體 의 利 點 과 現 實 論 率 直 히 말 하 면 、 國 漢 文 混 用 體 가 語 文 政 策 的 으 로 利 點 이 많 二 〇 二 六 年 四 月 一 七 日 洪 民 憙 雜 記 朝 鮮 語 ( 國 漢 文 ) 日 本 語 한 국 어 ( 한 글 )
  3. 先行 作業: Seonbi 선행 작업 2018年에 Haskell로 作成 년 작성

    國漢文 → 한글 뿐만 아니라 各種 文章符號들도 變換 (韓國語를 爲한 SmartyPants) 국한문 각종 문장 부호 변환 한국어 위 Haskell 라이브러리, CLI, HTTP API 서버 提供 제공 《標準國語大辭典》 搭載 표준 국어 대사전 탑재 使用者 定義 辭典 支援 사용자 정의 사전 지원 使用 例: 사용 예 dahlia/seonbi 이미 그럭저럭 돌아가던 소프트웨어. $ echo 吾等은 玆에 我 朝鮮의 獨立國임과 朝鮮人의 自主民임을 宣言하노라. | seonbi 오등은 자에 아 조선의 독립국임과 조선인의 자주민임을 선언하노라.
  4. 한글 전용 하의 한자 교육에 관하여 나는 한국어를 쓸 때

    국한문혼용체를 즐겨 쓴다. 블로그 글도, 소셜 미디어 포스트도 한자를 섞어 쓸 때가 많다. 한자에 대한 개인적 애착은 분명히 있다. 그런데도 한자 교육을 한국의 공교육에서 심화해야 한다는 주장에는 동의하지 않는다. 이 글은 그 이유를 설명하려는 시도다. 교육의 디폴트는 “가르치지 않는다”이다 교육은 비용이 많이 든다. 교사를 양성해야 하고, 교재를 만들어야 하고, 무엇보다 학생들의 시간을 써야 한다. 학생의 시간은 유한하므로, 어떤 과목을 교육 과정에 넣 는다는 것은 다른 과목에 쓸 수 있었을 시간을 빼앗는다는 뜻이기도 하다. 그렇기 때 문에 어떤 과목이든 교육 과정에 포함하려면 그 효용이 과학적으로 입증되어야 한 다. 배우면 도움이 될 것이라는 막연한 기대로는 부족하다. 도움이 되지 않는 교육이 란 없기 때문이다. 바느질도 배우면 도움이 되고, 목공도 배우면 도움이 된다. 문제 는 한자 교육이 도움이 되느냐가 아니라, 같은 시간을 투입했을 때 다른 교육보다 더 2026년 4월 17일 洪 民 憙 雜 記 한 국 어 ( 한 글 ) 日 本 語 朝 鮮 語 ( 國 漢 文 )
  5. Seonbi에서 아쉬웠던 點들 점 Haskell로 만들어서 웹이나 다른 프로그래밍 言語에서

    가져다 쓰기 어려움 언어 辭典 데이터를 통째로 메모리에 올리기 때문에 무거움 사전 【汽車길】 같은 混種語가 辭典 데이터에서 除外됨 기찻길 혼종어 사전 제외 數字를 똑똑하게 다루지 못함 숫자 單語를 貪慾的으로 매치(eager longest-match)하기 때문에 가끔 讀音이 틀림 단어 탐욕적 독음 8年 동안 어찌저찌 써 왔지만… 년 $ echo 資本論理 | seonbi 자본론이 $ echo 汽車길 | seonbi 기차길 $ echo 二〇二六年 六月 二〇日 | seonbi 이〇이육년 유월 이〇일
  6. 再作成 計劃 재 작성 계획 WebAssembly 및 Node-API 타깃이 쉬운

    Rust로 作成 작성 辭典 데이터를 메모리에 통째로 올리지 않기 爲해 cdb (constant database) 導入 사전 위 도입 【汽車길】 같은 混種語도 辭典 데이터에 包含 기찻길 혼종어 사전 포함 單語 매치에 래티스(lattice) 基盤의 비터비(Viterbi) 알고리즘 導入 단어 기반 도입 再作成에 앞서 다음과 같은 大略的인 計劃을 세움. 재 작성 대략적 계획
  7. Haskell → Rust Haskell은 매우 좋은 言語 언어 하지만, Rust에

    比해 生態系가 不足 비 생태계 부족 Rust로 오니 自然스럽게 解決된 것들: 자연 해결 WebAssembly를 通한 JavaScript/TypeScript 바인딩 통 Node-API를 通한 Node.js 바인딩 (Deno, Bun도 支援!) 통 지원 musl을 通한 單一 Linux 實行 파일 통 단일 실행 모두 Haskell에서도 可能은 하지만, 훨씬 삽질을 많이 해야 함 가능 Rust로 다시 作成하니 좋았던 것들. 작성
  8. cdb cdb는 “constant database”의 줄임말 Daniel J. Bernstein의 作品 中

    하나 작품 중 디스크 위에서 돌아가는 不變 키–값 데이터베이스 불변 이걸 利用해 트라이(trie)를 具顯 이용 구현 아주 쉽게 온 디스크 接頭辭 트리(on-disk prefix tree) 完成! 접두사 완성
  9. 래티스(lattice) + 비터비(Viterbi) 알고리즘 Unihan「資」(자) Δcost=(0, +1) 辭典【資本】(자본) Δcost=(-2, +1)

    辭典【資本論】(자본론) Δcost=(-3, +1) Unihan「本」(본) Δcost=(0, +1) Unihan「論」(논) Δcost=(0, +1) 辭典【論理】(논리) Δcost=(-2, +1) Unihan「理」(이) Δcost=(0, +1) 처음 「資」 「本」 「論」 「理」 【資本】【論理】 cost=(-4, 2) 費用(cost) 評價 函數: 비용 평가 함수 辭典 標題語: 사전 표제어 Unihan 폴백: 資本論/理: 자본론 이 資本/論理: 자본 논리 資本論/理 對 資本/論理 자본론 이 대 자본 논리 (−1 × chars, 1) (0, 1) (−3, 1) + (0, 1) = (−3, 2) (−2, 1) + (−2, 1) = (−4, 2)
  10. 再作成 結果 재 작성 결과 그 外 改善點들: 외 개선점

    《標準國語大辭典》과 더불어 《우리말샘》 데이터도 搭載 (新造語, 北朝鮮語, 方言, 옛말 等) 표준 국어 대사전 탑재 신조어 북 조선어 방언 등 原文에 括弧 倂記를 通해 結果文에서의 한글 讀音 또는 漢字 倂記 與否를 設定可能 원문 괄호 병기 통 결과 문 독음 한자 병기 여부 설정 가능 實際 使用 例: 실제 사용 예 $ echo 資本論理 | gukhanmun 자본논리 $ echo 汽車길 | gukhanmun 기찻길 $ echo 二〇二六年 六月 二〇日 | gukhanmun 2026년 6월 20일
  11. Rust API 쉽게 다른 프로그램에 붙여 쓸 수 있음! use

    gukhanmun::{Builder, NumeralStrategy}; let converter = Builder::new() .numerals(NumeralStrategy::Smart) .build()?; let output = converter.convert_text_to_string( "二〇二六年 바조콘에 오신 것을 歡迎합니다!")?; println!("{output}");
  12. JavaScript/TypeScript API WebAssembly ↔ Node-API 轉換은 import 交替만으로 可能! 전환

    교체 가능 import { load } from "@gukhanmun/wasm"; // or "@gukhanmun/napi" import { stdictFst } from "@gukhanmun/stdict-fst"; const g = await load({ numerals: "smart", dictionaries: [await stdictFst()], }); console.log(g.convert("二〇二六年 바조콘에 오신 것을 歡迎합니다!"));
  13. 設置 方法 설치 방법 Rust 라이브러리: cargo add gukhanmun CLI

    프로그램: mise use -g aqua:dahlia/gukhanmun winget install HongMinhee.Gukhanmun JavaScript/TypeScript 라이브러리 npm add @gukhanmun/wasm npm add @gukhanmun/napi deno add jsr:@gukhanmun/wasm 라이브러리 및 CLI 프로그램으로 使用 可能! 사용 가능
  14. 關聯 링크 관련 文書: gukhanmun.org 문서 演習場: gukhanmun.org/playground 연습장 dahlia/gukhanmun

    crates.io: gukhanmun @gukhanmun/types, @gukhanmun/napi, @gukhanmun/wasm JSR: @gukhanmun/types, @gukhanmun/wasm Gukhanmun 프로젝트 關聯 링크들. 관련