接続辞書と日本語入力
(2019/1/13)
世の中で広く使われているモダンな日本語入力システムは高度な
自然言語処理によって
かな漢字変換を行なっているが、実は高度な自然言語処理を利用しなくても効率的に日本語入力することは可能である。たとえば
SKKという日本語入力システムは単純な辞書とアルゴリズムしか使っていないにもかかわらず高速な日本語入力が可能だったりする。(SKKはもともと
Emacs上での日本語入力用に開発されたもので、

も結構使っていたのだが、
キーボードの利用が前提でありモバイル機器では使いにくいとか日本語でしか使えないという制約がある)
接続辞書というのは「単語の次にどのような単語が続くか」を記述した辞書である。単語ごとに、
読み/
カテゴリ/
接続カテゴリを登録する。たとえば、
慶應という単語は、
けいおう
という読みをもつ
大学名
カテゴリの単語で、
大学名接続
というカテゴリの単語が後に続く可能性があると記述しておく。
同様に、
大学という単語は
だいがく
という読みをもつ
大学名接続
というカテゴリの単語だと記述しておく。
けいおうだいがく
と入力したとき、 けいおう
が 慶應
にマッチし、その後に 大学
が接続可能ということがわかるので、 けいおうだいがく
を 慶應大学
と変換できることになる。 けいおうだ
と入力した時点で 慶應大学
が候補に出る。
接続辞書を利用すると動詞の活用もうまく扱える。たとえば以下のようなエントリを定義しておくと、 結
の後には ば行五段活用語尾
である べ
が接続可能で、 べ
の後には な否定
である ない
が接続可能だということになるので、 むすべない
を 結べない
に変換できる。 べない
のように文節と認識したくないところは *
をつけている。
be.txt*べ*
べ ば行五段動詞語尾 な否定
べ ば行五段動詞語尾 た過去
同様にして漢数字の変換もできる。数字に対して以下のような接続を定義しておくと さんじゅうごにん
を 三十五人
に変換できたりする。
go.txt五
ご 漢数字1 漢数字2
ご 漢数字1 漢数字3
ご 漢数字1 数字接尾
このように、接続辞書は単語の状態遷移を記述したものだといえる。接続辞書を利用した変換はアルゴリズムが簡単だし日本語以外でも利用できるという特徴があり、パソコンでもスマホでも同じ辞書とアルゴリズムが使える。

は10年以上にわたってこの手法だけを使って生活しており、それなりに使い物になると考えている。辞書データとIMEのソースは以下に置いてある。
Scrapbox上で管理しているので単語の追加や修正が簡単
? [ブログ]: [接続辞書]を使った([日本語入力]|[IME])
? [ブログ]: [簡単]な([日本語入力]|[IME])の[アルゴリズム]