Hatena::ブログ(Diary)

by edvakf in hatena

2009-12-23

ChromeMigemo Extension

ChromeMigemo 検索するための Extension を作りました。

Extension Gallery に登録しました。


これは何?

Chrome 用 Migemo サーバー Extension です。


Migemo って何?

Migemo: ローマ字のまま日本語をインクリメンタル検索を読んでください。


どうやって使うの?

これだけインストールしても何も使い道はありません。他の拡張と連携して使うものです。


どうやって他の拡張と連携するの?

Extension 間通信システムを使います。

他の拡張でこのように書くと、検索語 (ローマ字) から正規表現が作れます。

var regexp;
var query = 'kaisetu';

chrome.extension.sendRequest(
  'pocnedlaincikkkcmlpcbipcflgjnjlj' // ChromeMigemo の Extension ID (Extension Gallery からインストールした場合)
  ,{"action": "getRegExpString", "query": query}
  ,function(response) {
    console.log(response); 
    //=> {"action":"getRegExpString", "query":"kaisetu", "result":"回折|解説|開設|kaisetu|kaisetu|かいせつ|カイセツ|カイセツ"}
    regexp = new RegExp(response.result, 'i');
  }
);

API は今のところ2つ。action パラメータの値が

  • "getRegExpString"
    • query の文字列に対して、正規表現として評価可能な文字列を返す。
    • 例 : "shougi kaisetu""(?:将棋|商議|娼妓|床几|象棋|省議|しょうぎ|ショウギ|ショウギ|shougi|shougi)\s*(?:解説|開設|回折|かいせつ|カイセツ|カイセツ|kaisetu|kaisetu)"
  • "getCompletion"
    • query の文字列をスペースまたは大文字の前で区切り、各単語に対して「補完候補となる単語」の配列を返す。つまり返り値は文字列の配列の配列。
    • 例 : 'shougi kaisetu'”将棋”,”商議”,”娼妓”,”床几”,”象棋”,”省議”,”しょうぎ”,”ショウギ”,”ショウギ”,”shougi”,”shougi”],[”解説”,”開設”,”回折”,”かいせつ”,”カイセツ”,”カイセツ”,”kaisetu”,”kaisetu”?

後者は何に使うかというと、正規表現が使えない検索 (例えばこの前書いた全文検索) から使うことを想定しています。

普通の場合は "getRegExpString" しか使わないでいいと思います。


で?

せっかくなので、id:zyxwv さんが作っている migemo 検索用の Extension を、この Migemo サーバーを使うようにしてみました。

まずここから ChromeMigemo をインストールして、次に↓こっちをインストール

すると、こんなふうになります。(スクリーンショットだけだったらオリジナルと同じだけど)

f:id:edvakf:20091224005322p:image:w600


やっぱりイチから作ってみました。Migemoでページ内検索するためのGoogle Chrome Extension - by edvakf in hatena 上に公開してるものとは同時にインストールできません。


書式は?

  • "kensaku" → 例えば "検索" にマッチ
  • "kensaku enjin" → 例えば "検索エンジン" とか "検索エンジン" とかにマッチ
  • "normal" → 例えば "normal" とか "ノーマル" とかにマッチ (この機能はデフォルトではオフで、オプションで含める形にしました)

SKK 的な大文字区切りも使えます。

  • "taBeru" とか "ta beru" で "食べる" や "田べる" にマッチします。

SKK だと "田べる" という候補は出てきませんが、マッチしちゃうのは ChromeMigemo の仕様です。


ソース?

Migemo 部分には JSDeferred と JSDeferred-WebDatabase を使っています。

最初は一応 JSMigemo のソースを読んでから書き始めたのですが、アレコレ書き直しているうちに全部書き直す羽目になってしまったので、オリジナルのソースはほとんど残ってません。


id:zyxwv さんの Extension からの diff。あと migemo.js と migemoDict.js を削除して、 manifest.json からもその項目を削除。こっちも github でフォークしようと思ったのにこれまたエラーで無理でした。

'pocnedlaincikkkcmlpcbipcflgjnjlj' というのが Extension Gallery からインストールした ChromeMigemo の ID で、未来永劫変わることは無いと思う。


辞書ファイルは SKK辞書 - FreeStyleWiki から ML 辞書を改変して使わせていただきました。


アイコンクリエイティブコモンズライセンスのものを以下からダウンロードしました。デザインが虫眼鏡なのは、XUL/Migemo のアイコンが虫眼鏡だったことに由来しています。


自分好みに設定したいんだけど?

f:id:edvakf:20091228151311p:image:h700

まー見たら分かると思います。

Japanese (alphabet to katanaka) というのは olympicオリンピック という形の変換です。

ローマ字から日本語への変換表ですが、C/Migemo の中にあった roma2hira.dat というファイルとほぼ同じもの (Windows IME の変換法に添ってるらしい) が入っています。

"la" は「ぁ」じゃなくて「ら」だろうが! という人はオプションから設定してください。

あと、lya とか mpa とか、ほとんど使わないと思うので、そういうのは消してやったほうがスピードが出ると思います。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証