2011年05月11日

Google日本語入力APIでAjax IME

日本語入力環境が無い状況(例えば海外でPCを利用、キンドルなど)で日本語を入力する場合、Ajax IMEというサービスが有名ですよね。

僕もキンドルで日本語入力したいと思いAjax IMEに辿り着いたんですが、このAjax IMEは入力されたローマ字をJavascriptでひらがなに変換してサーバに送信、サーバから送られた変換候補を受信・表示しています。サーバ側の変換エンジンにはMeCabを使っているそうですが、Google Transliterationサービスを見てGoogleの変換エンジンを使えないかなぁと思いまして、動くところまでは出来たのでご報告します。

Google日本語入力API(Google CGI API for Japanese Input)


Google日本語入力APIの詳しい使い方はこちらにありますが、要は指定されたURLのパラメータとして変換したい文字列を渡すと変換候補を含んだレスポンスが取得できます。

http://www.google.com/transliterate?langpair=ja-Hira|ja&text=へんかん

非公式のようですが、JSONPもサポートしています。


Ajax IME(Javascript)を改造


Ajax IMEで利用しているime.jsをダウンロードします。
まず、ImeShowCandidates関数を書き換え、Google日本語入力APIにJSONPでリクエストします。

  function ImeShowCandidates() {
if (!ImeIsHidden()) return;
if (ImeRawInput_ == '') ImeRawInput_ = roma2hiragana(ImePreEdit_.value, false);
//var request = "action=conv&to=" + ImeTo_ + "&query=" + encodeURI(ImeRawInput_) +
// "&id=" + ImeID_;
ImeCurrentDocument_ = ImeDocument_;
//ImeJsonp_ = new JSONRequest(ImeCGI_ + request);
var gurl = "http://www.google.com/transliterate?langpair=ja-Hira|ja&text=" + encodeURI(ImeRawInput_) + ",&jsonp=ImeRequestCallback";
ImeJsonp_ = new JSONRequest(gurl);
}

次にImeLog関数の実装部をコメントアウトしてしまいます。
(良く考えては無いんですが、サーバ側にユーザが選択した変換候補を送信しているように見えたので)

  function ImeLog(result) {
    //if (ImeRawInput_ == '') ImeRawInput_ = result;
    //if (ImeSelectedIndex_ >= 1) ImeCache_[ImeRawInput_] = result;
    //var request = "action=log&query=" + encodeURI(ImeRawInput_) + 
    //  "&result=" + encodeURI(result) + "&sel=" + ImeSelectedIndex_ +
    //  "&id=" + ImeID_;
    //ImeJsonpLog_ = new JSONRequest(ImeCGI_ + request);
    //++ImeID_;
  }

最後にJSONPで呼出されるコールバック関数ImeRequestCallBackにresult = result[0][1];を追加し、変換候補を含む配列だけ取り出します。

function ImeRequestCallback(result) {
result = result[0][1];
ImeCurrentDocument_.ImeRequestCallback(result);
}

以上で完了。
(Javascriptの技術力が無いので本当に完了か自信が無いんですが。。)


動作確認・比較


まず、こちらから標準のAjax IMEを使って’きたー’を変換してみます。
(試す場合、日本語入力をOFFにしてIME On/Offボタンをクリック)

49)

まあ、これは想像通りですね。

では、こちらからAjax IME with Googleで’きたー’を変換してみます。

18)

さすがGoogle、流行(?)を押さえてます。

明確にどちらが優秀とは言い切れませんが、選択肢があると、一方のサービスが提供中止になってしまった場合にも対応できるので使う側としては安心ですね。


なんでも充電ケーブル「ヤマタノオロチ」:ALGDPC01
サンコー 
売り上げランキング: 458


JavaScript 第5版
JavaScript 第5版
posted with amazlet at 11.05.11
David Flanagan 
オライリー・ジャパン 
売り上げランキング: 8295

Posted by netbuffalo at 12:54│TrackBack(0)javascripts 


この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/netbuffalo/3183127