入力に5打必要なハングル

きっかけ

KMC(京大マイコンクラブ)に入って2ヶ月が経とうとしていた今日この頃、例会があったので(こちらは午前3時であるにも関わらず)参加した。例会が終わった後、することもないので(いや寝ろよ)韓国語の単語帳を回していたところ、pelkさんという方から「常々思ってたんですけどハングルってキーボードでどう入力するんでしょう」という質問を頂いた。

 

その質問に対して、私は「ハングルの入力は、まあある種のIMEを使うのが普通です。ㅇㅏㄴㅎㄷㅏと入力すると、順にㅇ→아→안→않→않ㄷ→않다となります」とテキストチャットで書いたあとで、Google Docs を開き、韓国語作文を即興でしながら入力する様子を画面共有をすることで、実際の入力の様子を見せて説明することができた。

ほえ~
パーツごとに入力していくのか
最大で4パーツ組み合わさりえて, 該当する文字が無ければ即座に次の文字に入力されるんだなぁ

とテキストチャットに書かれているのを見つけた私は、「あ、ㅚとかの一部の母音字は入力に2打を必要とするので、(まあこんな音節はないんですが)욊という音節を入力するには5打必要になりますね」とコメントした。

 

さて、韓国語初学者である私はここでサクッと5打必要となる音節の実例を提示することができず、入力はできるけれど実際には用いられない文字を使って説明をしてしまったわけだ。ということで気になるのが、果たして実際に使う単語でこの条件を満たす具体例があるのかということである。調べてみよう。

 

KS X 1001

韓国語がそんなにできないにも関わらず「実際に用いられる文字」の一覧を持ってくるにはどうすればいいか。そういうときに役に立つのが、韓国語のレガシーエンコーディングである KS X 1001 というやつである。このエンコーディングは、韓国語で実際に使う音節のうち、頻度の高い 2350 字を収録している。(ただし、出現頻度がある程度低いやつは入っていないので、例えば하얬다「白かった」に出てくる얬という字が収録から漏れていたりする)

また、この選出は1987年に行われたので、翌年の正書法改訂で消えた뭏という字(아뭏든「とにかく、いずれにせよ」。今は아무튼と書く) が入っているといった細かい話もある。まあそれはそれとして、とりあえずサクッと使えるのでこの中から探すことにする。

 

探し方

今回探し求めているのは、以下の条件を満たすやつである。

  • 母音字として ㅘ, ㅙ, ㅚ, ㅝ, ㅞ, ㅟ, ㅢ のどれかを含む
  • 終声として二重パッチム ㄳ, ㄵ, ㄶ, ㄺ, ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, ㅄ のどれかを含む

今私が使ってるWindows標準のやつだと、2打連続で同じ子音字を打つことによって濃音を入力することはできず、Shift を用いた入力しか受け付けないので、そのような入力は今回は考えないことにした(というか、濃音パッチムがアリなら됐(~になった)即座に提示していた。さすがに됐がパッと出るくらいの韓国語力は私にもある)。同様に、ㅐやㅔは一打での入力しかできないので、これらもカウントしない。

 

さて、どうやって探すかだが、こういう書き捨ての探索はブラウザの JavaScript コンソールでやってしまうのが手っ取り早い。便利なことに、Namuwiki の완성형/한글 목록/KS X 1001(訳すと、「完成形/ハングル目録/KS X 1001」)というページにスペース区切りで一覧が入っているので、

var a = "가 각 간 (中略) 힘 힙 힛 힝".split(" ")

としてやれば配列aにハングル一覧が入る。さて、この中から

  • 母音字として ㅘ, ㅙ, ㅚ, ㅝ, ㅞ, ㅟ, ㅢ のどれかを含む
  • 終声として二重パッチム ㄳ, ㄵ, ㄶ, ㄺ, ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, ㅄ のどれかを含む

という条件を満たすやつを探してやらなければならない。これをするには、Unicodeで定義されている NFD というやつを使うのが便利である。例えば、값 (U+AC12, HANGUL SYLLABLE GABS) という字をNFDに突っ込むと、以下のように3つに分解される。

f:id:hsjoihs:20211101202453p:plain

값 が NFD を喰らった様子

こう分解されてしまえばもうこっちのもので、後はこれらが条件を満たすかどうかを探るだけでいい。とりあえず、NFDしたやつの n 番目を抜き出す関数を定義して、

var f = (str,n) => str.normalize("NFD")[n]

母音に関する条件を記述して、

var vowel_condition = (s) => [..."와왜외워웨위의"].map(c => f(c, 1)).includes(f(s, 1))

子音についても書いて、

var consonant_condition = (s) => [..."갃갅갆갉갊갋갌갍갎갏값"].map(c => f(c, 2)).includes(f(s, 2))

フィルターを掛けると……

f:id:hsjoihs:20211101203638p:plain

1個だけあった!!!

なんと、「괆」ただ一字だけが条件を満たすことが判明!!!!

 

この形はだいたいㄹ語幹の動詞を名詞化したものなので、괄다で調べると……ありました、「火の勢いが強い」「せっかちで荒々しい」「(生地などが)ごわごわしている」「(木の)やにが多い」。うん、どう考えても初学者が知らない単語です。

結論

  • KS X 1001 に出てくる字の中で唯一5打を必要とする特別な文字「괆」。「火の勢いが強いこと」「せっかちで荒々しいこと」「(生地などが)ごわごわしていること」「(木の)やにが多いこと」という意味を表すことができる文字です。
  • こいつをクビにして「白かった」とかを入れた方がよかったんじゃなかろうか、KS X 1001。