このブログを検索

2016年9月21日水曜日

ハングル用の辞書を作る

最近、妻と一緒に韓国ドラマを毎日のように見ている。

以前、韓国語の勉強をした事があって 語学の勉強の積りで付き合って見るか、という態度だったけど、韓国と日本の文化の違いや同じ点を発見したり 言葉だけでなく、色々と興味が湧く。

確かに、取り箸を使わずに銘々が自分の箸を鍋に突っ込んだり、女性が立て膝だったりして あれっと思う事もあるが、家の中でも靴を脱がないような欧米のドラマとは違って、殆どの場面で文化面でも心情面でも日本人には全く違和感なく受け入れられる。単に喋っている言葉が異なるだけである。

それで、また韓国語の勉強をやってみたくなった。字幕に頼らずに聞いて分かる部分がちょっとでも増えれば楽しいから。

ハングル入力

私は地道に単語を覚えたりする事は苦手だが、色々と仕掛けを考えるのは大好きだ。韓国語を勉強するとなると、ハングルをパソコンで書けるようにして置きたい、と思って色々と調べた。

日本語の入力には日本語入力メソッドがあるように、韓国語の入力には韓国語入力メソッドがある。これには Windows に元々備わっているものも使えるし、Google Korean Input というものもあるらしい。

しかし、韓国語では もはや漢字は殆ど用いられないから、事実上 ハングルさえ入力出来れば良い。日本語入力のままでハングルが入力出来れば 日本語との混在も楽なのだ。そうすると、日本語の辞書にハングルとその読みを追加する、という方法がある。

読みは最初の文字が半角アルファベットの大文字、残りが半角アルファベットの小文字、という形をとり、アルファベットとハングルの対応は「文化観光部2000年式」に基づく。

「文化観光部2000年式」は、ハングルの読みをアルファベットで表す韓国政府の公式の方法で、韓国中の案内板に書かれているので 覚えておいて損は無い。但し、これは読みを表す方法なので、入力に使うとなると全く同じには出来ない。

それは、ハングルには母音の後にパッチムと呼ばれる子音が付随する場合があるが、そのパッチムの読みには「異なる子音の字母でも同じ読み」となる場合があるからだ。そこで、パッチムの入力コードも母音の前の子音と同じ入力コードを使うように変更する。

ハングルには、最初の子音が18種類、母音が21種類、パッチムが27種類存在する。そして、その組み合わせでハングルの文字の形が定まるので、理屈では(子音とパッチムは無しの場合も含め)全部で (18+1)*21*(27+1)=11,172種類 のハングル文字が存在する事になる。その中で実際には使われていない文字もあるけど、ユニコードではその全てが定義されている。

実は、11,172文字揃った Google日本語入力の辞書用のハングル入力辞書データがネット上に存在していて、有難くダウンロードさせて貰った。しかし、これには著作権は存在しないので、私が自由に改変して公表することも出来る。

辞書を改変する

まず、ᄎ という子音のコード ch について、c も使えるようにデータを追加する。この ᄎ 以外に c は使われていないから h を入力するのは余計な事だとの判断である。今使っているGoogle日本語入力のローマ字変換でも c が ch と同様に使えるようにしているのと合わせたいという気もある。

この改変で 検索と置換 機能で ch を c に変えるだけなら簡単だが、そうすると ch は使えなくなるのでちょっと困る。だから、c 又は C を含んだ行を抜き出してコピーした上でコピーした行の ch を c に、Ch を C に置換しなければならない。

ダウンロードした辞書はGoogleスプレッドシートに入力して加工。コードの先頭にある Ch はソーティングで集まるからコピーは簡単に出来るが、パッチムの ch はコードの先頭には無いから検索で見つけ、その行をコピーし、コピーした行の ch を c に置換する、という作業は手作業になる。それで、幾つかやってみて これでは駄目だと悟った。

それで、簡単に出来るように考えた。要は、c と C を含む行に何か印を付けてそれでソーティングすれば全部が集まるから、コピーして置換するのは一回の操作で済む。

それで、列を一つ増やして、=regexmatch(A1,"[cC]") という関数を一行目に書いた。これを列の最後までコピーすれば、2行目は =regexmatch(A2,"[cC]") というように自動的に数字が置き換えられている。

これで、A列にあるハングル文字コードに c 又は C が含まれている場合は TRUE、含まれてなければ FALSE、という値となり、これでソーティングして、行をコピーし、966行が増えた。因みに、ch を c にしたのが399箇所、Ch を C にしたのが588箇所になる。作業後に関数の列は削除した。

字母も追加

ハングル文字だけならこれでOKだけど、その子音だけ、母音だけ、パッチムだけ、の文字ユニコードで定義されていて、これも欲しい。さっき書いた ᄎ も子音だけの文字なのである。ハングル文字だと 츠 のように必ず母音を含むから、説明上都合の悪い事もあるのだ。

それで、子音、母音、パッチム の字母用のデータを作った。

G独立語1100
Kk独立語1101
N独立語1102
D独立語1103
Tt独立語1104
R独立語1105
M独立語1106
B独立語1107
Pp独立語1108
S独立語1109
Ss独立語110A
X独立語110B
J独立語110C
Jj独立語110D
Ch | C独立語110E
K独立語110F
T独立語1110
P独立語1111
H独立語1112

Xa独立語1161
Xae独立語1162
Xya独立語1163
Xyae独立語1164
Xeo独立語1165
Xe独立語1166
Xyeo独立語1167
Xye独立語1168
Xo独立語1169
Xwa独立語116A
Xwae独立語116B
Xoe独立語116C
Xyo独立語116D
Xu独立語116E
Xwo独立語116F
Xwe独立語1170
Xwi独立語1171
Xyu独立語1172
Xeu独立語1173
Xui独立語1174
Xi独立語1175

Xg独立語11A8
Xgg独立語11A9
Xgs独立語11AA
Xn独立語11AB
Xnj独立語11AC
Xnh独立語11AD
Xd独立語11AE
Xl独立語11AF
Xlg独立語11B0
Xlm独立語11B1
Xlb独立語11B2
Xls独立語11B3
Xlt独立語11B4
Xlp独立語11B5
Xlh独立語11B6
Xm独立語11B7
Xb独立語11B8
Xbs独立語11B9
Xs独立語11BA
Xss独立語11BB
Xng独立語11BC
Xj独立語11BD
Xch | Xc独立語11BE
Xk独立語11BF
Xt独立語11C0
Xp独立語11C1
Xh独立語11C2

表はGoogle日本語入力の辞書に合わせて、一列目は文字コード、二列目は文字、三列目は品詞、四列目はコメント、になっている。品詞は 全部「独立語」とし、コメントには ユニコードの番号を16進数で書いた。

子音のコードはハングル文字のコード(から母音を除いたもの)と同様だが、子音無しを示す ᄋ (「이응」 イウング という名があるけど) をどうするか悩んだ結果、X にした。

母音のコードはハングル文字と同じに出来ない( ᄋ 抜き)ので、頭にXを加えた。

パッチムのコードも子音のコードと区別する必要があり、頭にXを加えた。

これでOKと思いきや、実際にGoogle日本語入力の辞書にインポートしてみると、何故か最後の行が入力されていない。バグなのか仕様なのか不明だが、辞書の最後にダミーの行を追加する事で回避する。因みに、ダミー行として 「こぶり ハングル 辞書」 として置いた。

この改変したGoogle日本語入力用の[ハングル文字辞書ファイル]を公開する。(但し、コメント欄は空白にしてある。)