かな漢字変換システム
今回は「Gyaim」というMacの日本語入力システムを紹介します。
この連載は、シンプルなのに便利な「コロンブスの卵」的なシステムを紹介する趣旨のものなのに、日本語入力システムのような複雑なものを取り上げるのは変だと思われるかもしれませんが、「Gyaim(ギャイム)」は単純な原理にもかかわらず実用的に利用できるIMEですので、ここで紹介したいと思います(図1)。私はこの連載をすべてGyaimで書いています。
現在のパソコンでは、「かな漢字変換システム」で日本語入力を行うのが普通になっています。かな漢字変換システムは、1978年に東芝から販売された日本語ワープロで初めて導入されたものですが、パソコンの黎明期から標準的に利用されてきています。かな漢字変換システム以外にもさまざまな日本語入力システムが提案されてきましたが、それほど努力しなくても普通のユーザがとりあえず使えるうえに、熟達すれば高速に入力が可能だという特長があるため、かな漢字変換方式の日本語入力が廃れることはなさそうです。
連文節変換
現在のパソコンのかな漢字変換システムでは、いわゆる連文節変換が主流になっています。連文節変換とは、文章の読みをすべて入力してから、漢字混じりの日本語文字列に一気に変換する手法のことで、たとえば「わたしのなまえはなかのです」という入力を「私の名前は中野です」に変換するというものです。「私の」「名前は」のように、息継ぎできる場所で文を区切った単位を「文節」と呼びますが、連文節変換では複数の文節を含む文を一気に変換できるのが特長です。
連文節変換は一見便利そうですが、実は次のようなさまざまな問題があります。
- 正確な入力が必要
- watashinonamaeha...のような文字列を1文字も間違えずに入力する必要がある
- 完全な読みの入力が必要
- 変換誤りの訂正が必須
- 非力なマシンで利用しにくい
これからのユビキタス社会においては、パソコンの熟練者だけが使える入力手法ではなく、どこでも誰でも簡単に使えるシンプルで柔軟な入力方式が必要で、次の要件が満たされる必要があるでしょう。
- 必要なキーやボタンの数が最小限
- 操作の種類や量が少ない
- ユーザがカスタマイズ可能
- さまざまな環境で同じ方式が利用可能
このような要件を満たすためには、単純なアルゴリズムに基づいて単純な操作で入力を行えるようなコロンブスの卵的な入力システムが必要だと思われます。
SKK
連文節変換を利用しない場合、かな漢字変換は辞書を参照して読みを漢字に置き換える単純な検索作業に近く、動詞の活用への対応などを除けばそれほど難しいものではありません。
単純なしくみで日本語入力を行うシステムの例として、Emacs上のSKKというシステムがあります。SKKは1987年ごろ、京都大学名誉教授の佐藤雅彦氏が東北大学にいたとき開発したEmacs用の日本語入力システムです(図2)。
SKKには英数字モードと日本語モードがあります。日本語モードでローマ字を入力するとひらがなが入力されますが、「書く」のような漢字を含む動詞を入力したい場合は「KaKu」のように大文字と小文字を混ぜたローマ字を入力します。最初の大文字「K」は変換の開始を意味しており、2つめの大文字「K」は送り仮名の開始を意味しています。SKKの辞書には次のようなエントリが含まれており、
かく /核/格/各/角/画/確/:
かk /書/掛/欠/
「Kaku」と入力された場合は「核」「格」「各」のような漢字への変換が行われ、「KaKu」と入力された場合は「書く」や「欠く」のような文字列に変換されるようになっています。つまり変換開始場所や送りがなの場所をユーザが明示することによって、単純なアルゴリズムでの変換を可能にしているわけです。
Gyaim
SKKは単純なしくみで効率的な日本語入力ができる、コロンブスの卵的な優れた日本語入力システムなのですが、一般的なかな漢字変換システムと同じように、すべての読みを正確に入力する必要があるうえに、漢字や送り仮名についてユーザが明示的に指定しなければならないためユーザの負担が大きく、万人向けとは言い難いものでした。私は1990年代ごろはSKKを愛用していたのですが、携帯電話の予測型テキスト入力システム「POBox」の開発後はあらゆる場所でPOBoxに準じた入力手法を使っており、MacではGyaimを使っています。
GyaimはMacで動くシンプルな日本語入力システムです。Gyaimは約1,000行のRuby(Ruby Motionを使用)で記述されており、スマホの予測入力システムと同じように利用できます。
Gyaimは次の手順でインストールします。
このように設定を行ったあと、環境設定画面の[キーボード]→[入力ソース]でGyaimを選択し、追加します(図3)。
Gyaimの実装
IMEの作成には、ユーザインターフェースとかな漢字変換アルゴリズムが必要です。
IMEのユーザインターフェース
Macには、IMKitというIME作成用ライブラリが用意されており、それを利用してIMEを作成できます。IMKitにはさまざまな機能が用意されていますが、GyaimではIMKInputController
クラスのhandleEvent
というAPIのみを利用しています。候補を表示したり選択したりするには、任意のCocoaライブラリを利用できます。
かな漢字変換アルゴリズム
ユーザインターフェースはシステムごとに用意する必要がありますが、かな漢字変換アルゴリズムはAndroidでもMacでも同じものを利用できます。GyaimではRubyでかな漢字変換アルゴリズムを実装していますが、同じアルゴリズムをJavaやJavaScriptで実装すれば、Androidやブラウザなどで利用できます。
GyaimではSKKと同様に読みと漢字の対応辞書を使ってかな漢字変換を行います。たとえば日本語入力モードで「とうきょう」と入力されたとき、辞書から「とうきょう」という読みを持つ単語を検索して、リストして候補として表示し、ユーザの操作で候補を選択してテキストに貼り付けます。
「東京」のあとには「駅」や「大学」のような単語が続くことがあります。「東京駅」「東京大学」のような単語をすべて辞書に登録しておくのはたいへんですので、「東京は地名である」「地名のあとには駅や大学が続くことがある」という情報を辞書に登録しておくことにより、「東京駅」が辞書に登録されてなくても「とうきょうえき」を「東京駅」に変換できるようにしています。
まったく同じ手法で動詞の変化形も扱うことができます。たとえば辞書に、
- 「書」の読みは「か」である
- 「書」のあとにはカ行五段活用語尾がつながる
- 「か」はカ行五段活用語尾である
といった情報を定義しておけば「かかない」を「書かない」に変換できます。このように、単語の読みと属性、接続情報を定義しておくだけで、それなりに自然言語を入力できますし、日本語以外の文字入力でも利用できます。
Gyaimの特殊機能
Gyaimでは前述のような非常に単純な変換手法を使っていますが、特殊な機能も用意しています。自前のIMEだと好きな機能を自由に実装できるのが楽しいところです。
単語登録機能
一般的なIMEは単語登録が面倒なことが多いので、頻繁に単語登録を行っている人は多くないでしょう。たいていのIMEにおいて、単語登録は入力とはまったく異なるインターフェースになっていますが、Gyaimでは入力操作と登録操作をほとんど同じにすることにより簡単に単語登録が行えるようになっています。Gyaimでは「選択中の文字列があったりコピーバッファに文字列があった場合は候補として表示する」という単純な方法で単語登録を可能にしています。
たとえば「\(^o^)/」という文字列を「owata」という読みで登録したい場合(図4)、「\(^o^)/」という文字列を選択またはコピーしておいてからGyaimで「owata」と入力すると「\(^o^)/」が候補の先頭に表示され(図5)、これを選択して確定することにより単語登録が終了します(図6)。
画像変換
Gyaimでは、辞書の中で文字列の代わりにGyazoの画像ファイル名を登録しておくと漢字の代わりに画像を入力できます。たとえば私の顔画像を「masui」という読みで登録しておくと、Gyaimで「masui」と入力することにより顔画像を入力できます(図7)。
時刻の入力
Gyaimでは「ds」と入力すると現在時刻が候補に出るようになっており、文章やプログラムの中に手軽にタイムスタンプを記録しておくことができます。数式演算機能のような特殊な機能を追加することも簡単です。こういったちょっとした機能が用意されているIMEはありますが、GyaimはRubyを少し書くだけで特殊な機能でも簡単に追加できるのがうれしいところです。
秘密文字列の入力
ブラウザなどでパスワードやクレジットカード番号を入力するのは面倒なものですが、IMEでこれらを覚えておけば簡単に入力を行うことができます。もちろんこれらを生テキストで単語登録するのは危険ですが、秘密の文字列を変換することによりクレジットカード番号が候補に表示されて入力可能にしています。
Google変換の利用
Gyaimの辞書は貧弱ですのでうまく変換できないこともよくありますが、そういうときはGoogle入力ツールのようなWeb上の変換APIを利用して変換を行えるようにしています。
IMEは複雑な要素を含んでいるのでGyaimの詳細について書くことはできませんでしたが、とりあえず簡単なIMEをMacで作ることができることが理解いただけたでしょうか。
私のように単純な変換方式を好む人はGyaimのような方法を工夫すれば良いでしょうし、連文節変換が好きな人はGoogleなどの変換APIを利用することもできます。IMEの作成がたいへんだった昔と異なり、現在はIME用のAPI/使いやすい強力な言語/Webの変換API/高度な入出力機能などを利用できますからIME作成のハードルは極めて低くなってると言えるでしょう[1]。IMEを自分で作る試みが、今後もっと増えると良いと思っています。
- 第1特集
MySQL アプリ開発者の必修5科目
不意なトラブルに困らないためのRDB基礎知識
- 第2特集
「知りたい」「使いたい」「発信したい」をかなえる
OSSソースコードリーディングのススメ
- 特別企画
企業のシステムを支えるOSとエコシステムの全貌
[特別企画]Red Hat Enterprise Linux 9最新ガイド
- 短期連載
今さら聞けないSSH
[前編]リモートログインとコマンドの実行
- 短期連載
MySQLで学ぶ文字コード
[最終回]文字コードのハマりどころTips集
- 短期連載
新生「Ansible」徹底解説
[4]Playbookの実行環境(基礎編)