SKK
SKK(エスケイケイ、Simple Kana to Kanji conversion program)は、Emacs上で動く、日本語入力システムの一つである。
概要
1987年に、東北大学教授(当時)佐藤雅彦によって開発された[1]。本家での開発終了が2000年11月頃に宣言され[1]、現在はSKK Openlabが開発を行っている。SKK OpenlabがリリースするSKKには、Daredevil SKK(ddskk)の名が付けられている。
SKKが他の日本語インプットメソッドと大きく異なるのは、かな漢字変換において形態素解析に基づいた変換を行わないことである。かなと漢字の境界をユーザが指定することになるため、形態素解析を行うシステムではどうしても避けられない解析ミスを回避し、意図した通りの変換を行うことができる。話し言葉や方言を記述する際、その表記のぶれのほとんどはかな文字で表記される部分であるので、SKKでは変換ミスにつながらない。
SKKでは、ローマ字を直接入力するとそのままひらがなに変換される。かなを漢字に変換する場合は、漢字の開始部分を大文字で指定する。活用のある場合には送りがなの開始部分を、活用のない場合は空白を入力することで漢字へ変換する。例えば、「彼は足が速い」という文を入力する場合、「Kare haAsi gaHayaI」と入力する。
他の特徴として、シームレスな辞書登録が挙げられる。辞書に登録されていない単語を変換しようとした場合はミニバッファで変換結果の入力が促され、その結果は個人用の辞書に登録される。辞書の登録は再帰的に行うことができる。そのため、使っているうちに自然と辞書が成長していき、より快適な変換を実行することができるようになる。
SKKの大きな欠点のひとつは大文字を入力するためのシフトキーの多用、すなわち小指の酷使である。このため長時間の入力には向かないという意見もある。設定によりシフトキーを押しやすい別のキーにアサインしてこの小指問題を回避する方法もある。
SKKはローマ字かな変換に基づいた入力方式だが、漢字の始点と終点を指定できれば、直接かな入力に対応できる。多少のインストールと設定の追加により、親指シフト配列やJISかな入力、T-CodeやTUT-Codeでの使用が可能である。親指シフト配列では漢字変換の始点を大文字で指定するのではなく、ホームポジションの両人差し指のキーである「f」と「j」の同時打鍵を使用する。
SKKでの日本語入力は、ほかのインプットメソッドと大きく異なるため、初めてのものは戸惑いを感じさせる。形態素解析を利用した変換では送りがなの開始位置を変換のたびに明示的に指定することはないからだ。しかし、手書きの際には、送り仮名の開始位置で戸惑うことなく記述できているので、慣れてくると(あるいは戸惑いの原因であるシフトキーに慣れさえすれば)手書きと同じ感覚で入力することができるとされている。
SKKのバリエーション
SKKはEmacs Lispで実装されているため、Emacsが動く環境ならばどこでも使うことができる。一方、Emacs以外で使いたい場合は、何らかの手段を講じる必要がある。様々な環境のインプットメソッドに対応したSKKライクな変換エンジンが開発されており、それらを利用してSKK方式の入力を行うことができる。
Unix系環境においては、X Window System上で動作する伝統的な XIM (X Input Method) のために skkinput が開発された。skkinputには現在 skkinput2 と skkinput3 のふたつの実装が存在する。
また、XIMにかわるインプットメソッドとして開発された、多言語対応のインプットメソッドのIIIMF (Internet/Intranet Input Method Framework)、 uim (Universal Input Method)、SCIM (Smart Common Input Method)、IBus (Intelligent Input Bus) においてもSKKを使用することができる。
IIIMFは、XIM開発者自身によりウィンドウシステム非依存としてXIMを置き換えるべく開発されたフレームワークである。複数の言語エンジンを切り替えて使用できることを特徴としており、SKKに似た言語エンジンとして iiimf-skk が開発されている。
uim は、インプットメソッドサーバを用いずライブラリとして実装された多言語インプットメソッドで、uim-skkというモジュールを使用することでSKK方式の入力が可能となる。コンソールや、GUIフレームワーク、インプットメソッドサーバへのブリッジが提供されている。
SCIMは、できるだけ多くのインプットメソッドに対応することを目標にしている、インプットメソッド・プラットホームである。scim-skk はSCIM上でDaredevil SKKと同等の機能を実装することを目標に開発されている。
Mac OS Xでは AquaSKK および MacUIM/SKK が利用できる。AquaSKKはその名のとおりMac OS X に特化したSKKライクなインプットメソッドである。SKK辞書のほかことえりのユーザ辞書を使用することができる。MacUIMはuimをMac OS Xで使用するためのパッケージである。
Windows上でSKKライクな入力を実現するには skkime や corvus-skk や SKK日本語入力FEP がある。これらはOS付属のMSIMEを含めて全て同時にインストールでき、言語バーおよび入力言語のホットキー操作によりアプリケーション実行中でも自由に切り替えて使用することが可能である。skkime と corvus-skk はコントロールパネルからGUIを用いて設定を行うことができる。
Vim 上でSKKライクな入力を実現するには eskk.vim と skk.vim でどちらも Vim script で実装されている。 eskk.vim は skk.vim の後継を目指して活発に開発されており、 skk.vim は2006年以降開発が停止している状況であったが、2010年にメンテナが変わって以降パッチなども精力的に取り入れている。
こうした他実装は、Daredevil SKKと独立に開発・保守されている。したがって、機能的に劣ることや、独自の拡張機能を持つこともある。
SKKの辞書とSKKサーバ
SKKの使用する辞書は、複数のユーザによって共有する書き換えられない辞書と、ユーザのホームディレクトリに置かれ、登録した単語や変換の履歴が追加されていく個人用の辞書がある。どちらも、かな(送りがなのある場合はかな+送りがなの最初のローマ字)と変換対象のひとつ以上の漢字とを対応させたテキストファイルである。基本語を集めた辞書は、サイズ別に、S、M、ML、Lの4つが公開されている。また、人名、地名などの固有名詞や専門用語は別のファイルとして配布されており、環境や目的に応じ複数の辞書を自由に組み合わせて使うことができる。
SKKは、辞書をバッファにとりこんで検索を行うため、最初の読み込みの際若干時間がかかることがある。また、emacs 毎に大きな辞書をとりこむのは非効率でもある。そうした欠点を補うため、共有の辞書を辞書サーバで置き換えることができる。これをSKKサーバと呼ぶ。SKKサーバへは skkserv という独自の簡易なプロトコルを用いて問い合わせを行い、入力文字列から変換結果を受け取る。SKKサーバはSKKの辞書ファイルの形式に依存しないため、様々な方式で高速化、効率化を図った実装が存在する。
SKKにはskkserv以外にも多数の辞書サーバが存在する。主なSKK辞書サーバプログラムとその特徴を下記に示す。
- skkserv
- オリジナルのSKKサーバ。
- skkipserv
- 辞書をメモリ上にハッシングすることで検索を高速化したSKKサーバ。
- dbskkd-cdb
- 辞書形式としてcdbを利用したSKKサーバ。
- multiskkserv
- 複数辞書の管理が可能なSKKサーバ。
- rskkserv
- Rubyで実装されたSKKサーバ。EPWING形式の辞書も利用可能。
- fskkserv
- OCamlで実装されたSKKサーバ。内部の索引構造にパトリシア木を用いている。
- mecab-skkserv
- MeCabを利用して、擬似的に連文節変換を可能にするSKKサーバ。
また、入力予測システムであるPOBoxの変換サーバプロトコルは、skkservプロトコルをもとに拡張を加えたものである。
名前
SKIコンビネータ計算において、SKKという式は恒等関数と同じ結果となる。このことから、SKKという名前は、文字種は変えるが意味は変えない、というカナ漢字変換の性質を示したジョークでは、という説がある。また、東北大学の教授により開発されていたわけであるが、新制東北大学の工学部の母体のひとつ仙台高等工業学校の略称もSKKである。
脚注
外部リンク
- SKK Openlab
- skkime's page
- corvus-skk - SKK-like Japanese Input Method for Windows
- SKK日本語入力FEP
- AquaSKK プロジェクト - 日本語を快適に
- skkinput2's page
- skkinput3
- iiimf-skk
- uim
- scim-imengine
- skk.l - xyzzy移植版
- tyru/eskk.vim - GitHub
- skk.vim - Japanese SKK : vim online
- skk.vim - Japanese SKK(改良版) : vim online
- jj1bdx/dbskkd-cdb - GitHub