Gukhanmun: 国漢文をハングル専用に変換する Rust/JavaScript ライブラリ
(gukhanmun.org)こんにちは。国漢文をハングル専用に変換するライブラリ Gukhanmun を公開しました。古い文献、国漢文資料、昔の新聞や公文書のようなテキストを処理するときに役立てばと思います。
一見すると、文字ごとに読みの対応表を引けば済むように思えますが、実際に実装してみると、その方法ではまともな結果を出しにくいことがすぐ分かります。同じ漢字でも語頭では頭音法則が適用され、複数の文字が集まって一つの単語を成すと、文字ごとの読みとは異なる発音になることもあります。庫間 は「kogan」ではなく「kotkkan」で、標識 は「pyoshik」ではなく「pyoji」、漢字とハングルが混ざった 汽車길 にはサイシオッが付いて「kichatgil」になります。漢数字も厄介で、二〇一六年 は「2016年」が正しい一方、十一月 は「11月」、一千二百三十四 は「1234」なので、同じ数字表記の中でもどの方式かを判断しなければなりません。
以前、似た目的で Haskell ライブラリ Seonbi を作りましたが、今回は漢字変換に範囲を絞って Rust で新たに書き直しました。標準国語大辞典を内蔵しており、別途辞書をインストールしなくても使え、一般テキストと HTML、Markdown を処理します。出力はハングルだけを残すことも、漢字(漢字)のように括弧で併記することも、HTML ルビマークアップとして出力することもできます。韓国・北朝鮮の正書法プリセットや、同音異義語があるときに漢字を併記するオプションも入れました。
最も気を使った部分は分割アルゴリズムです。左から右へ最長一致で選ぶ方式だと、資本論理 を 資本論+理 に切って「jabonroni」と読んでしまいます。Gukhanmun はラティス (lattice) 上で動的計画法 (Viterbi アルゴリズム) を回し、資本+論理 に分けて「jabonnolli」を見つけ出します。
最初から Rust で作った理由の一つは、さまざまな言語から利用しやすくするためです。CLI は GitHub Releases から、Rust クレート gukhanmun は crates.io から入手でき、JavaScript 側は WebAssembly(@gukhanmun/wasm) と Node.js ネイティブアドオン(@gukhanmun/napi) の2種類を npm と JSR に公開してあります。コアクレート gukhanmun-core は no_std + alloc 環境にも対応しているので、組み込みでも使えます。
- ドキュメントとウェブサイト: https://gukhanmun.org/ko-KR/
- プレイグラウンド: https://gukhanmun.org/ko-KR/playground
- GitHub リポジトリ: https://github.com/dahlia/gukhanmun
まだコメントはありません。