« 2006年09月 | メイン | 2006年11月 »

2006年10月17日

Ajax IME ブックマークレット

Ajax IME ブックマークレットを作ってみました.右クリックしてブックマークに登録してみてください.

Ajax IME ブックマークにアクセスするだけで現在表示しているページにある textarea と inputbox が Ajax IME 経由で入力可能になるはずです.成功すれば2秒ほどで textarea の色が変わって Ajax IME 入力状態になります.Alt-O で元に戻ります.

たいていはうまくいくようですが,まだまだ完璧ではなくて CSS がらみから入力のカーソル位置が激しくずれたり,javascript のイベントがフックできなくて変化なしといったことが頻発します.気長に修正していくつもりですが,みなさんのフィードバックお待ちしております.

Mixi の日記投稿や Movable Type の投稿も若干癖がありますが問題なかったです.海外からの日記更新がかなり楽になると思います.
ajaxime.PNG

投稿者 taku : 02:51 | コメント (46) | トラックバック

2006年10月16日

Ajax IME パワーアップ

Ajax IME の javascript 側を大幅に更新しました

http://ajaxime.chasen.org/

Firefox でキャレットの位置を参照するという blog にコメントをいただきました。 Firefoxでは、textarea とまったく同じスタイルを持った見えない pre 要素を作り、その中に現在のキャレットの論理位置に pre タグで | をつっこんで、その pre tag の絶対位置から逆算する方法でキャレット位置が取得できるようです。激しく回りくどいですが、これを使って Firefox での動作がスムーズになりました。ありがとうございます。

あと、XmlHTTPRequest から JSONP にプロトコルを変えました。その結果、ime.js を読み込むだけでそのサイトのすべての textare と inputbox が AjaxIME 経由で入力できるようになります。

ページの適当な場所に以下をコピペ
<script type="text/javascript" charset="UTF-8"
src="http://ajaxime.chasen.org/ime.js"></script>
<textarea></textarea>

ここで Alt + O


(ってかおもいっきりずれてるし...)

この hack はセキュリティ的に危険ですので、自己責任でお願いします。 不特定多数が利用するようなサイトに設置するのはお控えください。

投稿者 taku : 22:03 | コメント (17) | トラックバック

2006年10月10日

MeCab -Ochasen が激しく重い件について

ふと mecab -Ochasen を実行してみると激しく動作が遅いことがわかりました.
何も出力しない
ivy:src% time ./mecab ~/rwcp.3000.text -Onone
0.97s user 0.05s system 98% cpu 1.049 total

デフォルトの出力を /dev/null に
ivy:src% time ./mecab ~/rwcp.3000.text -o /dev/null
1.36s user 0.13s system 99% cpu 1.498 total

chasen フォーマットで /dev/null に
ivy:src% time ./mecab ~/rwcp.3000.text -Ochasen -o /dev/null
6.68s user 0.38s system 99% cpu 7.121 total

1.049 秒が純粋な解析時間だとすれば,(7.121 - 1.049) / (1.498 - 1.049) = 13.0倍もデフォルトの出力に比べ遅いことがわかります.酷い..

やってることは CSV を切り出してルールに従ってフォーマット変換してるだけです.がんばって形態素解析本体をキツキツにチューニングしているのに,最後のフォーマットの変換でこんなに時間がかかっているのはやるせないです.

ためしに CSV の切り出しだけを perl の split でやってみました.同程度の時間がかかっているので, 拙作の CSV parser とフォーマット変換ルーチンはそれほど酷くなさそうです.

#!/usr/bin/perl
while (<>) {
    chomp;
    my ($w, $feature) = split /\t/, $_;
    my @a = split /,/, $feature;
    print "@a\n";
}


ivy:src% time perl foo.pl test > /dev/null
6.99s user 0.08s system 99% cpu 7.128 total


結論:
- mecab のフォーマット変換は激しく遅い. これからチューニングしていくにしても,perl の split の例からわかるようにそんなに劇的な改善は見込めそうにない
- Perl モジュール等で後処理をする場合, 素性の切り出しを split 等でやるのは実際の解析に比べ激しく遅い.
- 品詞によるフィルタリングが必要な場合は,自前で素性を parsing するよりは品詞ID を使うほうがよい. 品詞 ID はすべてプレコンパイルされるので高速
- 特定のフィールド(読み) のみがほしい場合は,自前で素性を parsing するよりは,その部分だけを事前に切り出した辞書を作ったほうがよい

投稿者 taku : 01:04 | コメント (344) | トラックバック