クリップボードから Google 検索

Ubuntu 日本語フォーラムで googlizer の話題が出ていました。ドラッグで選択した領域*1Google のアドレスと結合して既定のブラウザに突っ込むアプリのようです。
使い方としてはパネルに登録しておき、検索したい文字をドラッグして反転させた状態でアイコンをクリックするようです。さてそのフォーラムで次のような意見が。

クリップボードに複数の単語を保存しておくことができれば、GNOME上でいくらか便利な検索ができるということですか? 実際、上記のように最後に選択した内容でしか検索できないのですが。
私としましては、複数の中から検索ワードを選べたらより便利になるのではと思い投稿させて頂きました。

なるほど。Firefox 上でなら右クリックして Google 検索がデフォルトでありますが、X 上で行う作業は色々ありますからいつでもボタンひとつで検索ができれば便利かもしれません。
でも、X のクリップボードにキルリングのような複数の履歴を保存する機能ってあるのでしょうか? 仮にあったとして、それへのインターフェイスは? 何度も検索する場合、古い履歴が混じってきたらやだよね? 色々考える問題はありそうです。
そこで発想を逆転させて、選択した文章から特定の単語を抽出して and 検索するっていうアプローチはどうでしょう? 例えば「私の名前はアデランスの中野です」を選択して実行すると「私」「名前」「アデランス」「中野」で and 検索を行うというのは。*2
ちょっと Ruby で書いてみました。まず形態素解析ツールである MeCabRuby の開発パッケージをインストールします。開発パッケージを入れるのは、MeCabRuby バインディングコンパイルする際に必要な mkmf ライブラリが通常パッケージではインストールされないからです。

$ sudo apt-get install mecab ruby-dev

次に mecab-ruby をダウンロードします。http://sourceforge.net/project/showfiles.php?group_id=177856&package_id=205294
最新の 0.97 は Ubuntu でのコンパイル時にエラーが出てきてしまったので、素直に動く 0.96 を使います。ダウンロードしたら解凍してコンパイル

$ tar zxfv mecab-ruby-0.96.tar.gz
$ cd mecab-ruby-0.96
$ ruby extconf.rb
$ make
$ sudo make install

これで必要なものは揃ったはずです。EUC で保存してあげてください。MeCab 辞書を UTF-8 にあらかじめ変換しておけばいいようです。

$ sudo /usr/lib/mecab/mecab-dict-index -d /usr/share/mecab/dic/ipadic -o /var/lib/mecab/dic/ipadic -f euc-jp -t utf-8

そしてプログラム本体。チェックしてないので変な文字食わせると誤動作するかも。UTF-8 で動かせることが解ったので少し変更した。

#!/usr/bin/ruby

require 'gtk2'
require 'cgi'
require 'MeCab'

ENGINE = "http://www.google.com/search?q="

clip = Gtk::Clipboard.get('PRIMARY')
mecab = MeCab::Tagger.new("-Ochasen")
n = mecab.parseToNode(clip.wait_for_text)
text = ''
while n do
p = n.feature.split(/,/)[0]
text = "#{text} #{n.surface}" if p == '名詞' # 本当は posid で判定したいけど未実装?
n = n.next
end

# 本当は gnome_show_url みたいな呼び出し方をしたいのだけど、Ruby からどーすればいいのか orz
system("firefox #{ENGINE}#{CGI.escape(text)}")

これを適当なファイル名で保存してカスタムランチャとしてパネルに登録。調べたい文章をドラッグしてボタンをぽちれば、Firefox が起動して Google を呼び出してくれます。
便利? うーん、びみょーーー(笑

*1:xclip -o で表示されるもの

*2:全然逆転してないような気がするのは多分正解です