備忘録

いろいろ忘れないためのブログ

anything 的絞りこみコマンド percol が migemo 対応しました

| Comments

先日のエントリpercol というとっても便利なコマンドを紹介しました。migemo 対 応してくれたら更に便利だなーと思っていたのですが、mooz さんがばっちり --match-method に migemo を追加して下さいました。 percol で migemo を使うには C/MigemoPyMigemo を導入する必要があります。備忘 として Ubuntu 11.10 とWidnows7 での導入方法を記しておきます。めんどくさいのでイ ンストール場所は全部デフォルトの場所で、migemo の辞書の文字コードは utf-8 を使 うことにします。

各ソフトウェアのバージョン

Ubuntu 11.04 に導入する

Ubuntu の環境は以下のようになってます。

  • Ubuntu 11.10
  • python 2.7.2
  • zsh 4.3.11

まずは cmigemo の導入です。KaoriYaさんからアーカイブをダウンロードしてきます。

$ wget http://cmigemo.googlecode.com/files/cmigemo-default-src-20110227.zip
$ unzip cmigemo-default-src-20110227.zip
$ cd cmigemo-default-src

このソースの中の src/wordbuf.c は limits.h をインクルードし忘れているので、以 下のように修正します。

$ diff -u src/wordbuf.c.bck src/wordbuf.c
--- src/wordbuf.c.bck   2012-05-11 21:52:44.006214700 +0900
+++ src/wordbuf.c       2012-05-11 19:40:39.310948000 +0900
@@ -9,6 +9,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <limits.h>
 #include "wordbuf.h"

 #define WORDLEN_DEF 64

あとはビルドするだけです。

$ ./configure
$ make gcc
$ make gcc-dict; cd dict; make utf-8; cd ..    # 辞書のビルド
# make gcc-install

これで /usr/local/bin に cmigemo、/usr/local/share/migemo に辞書、 /usr/local/lib に libmigemo.so がインストールされます。

次は PyMigemo を導入します。

$ wget http://www.atzm.org/etc/files/pymigemo/pymigemo-0.3.tar.gz
$ tar xvf pymigemo-0.3.tar.gz
$ cd pymigemo-0.3
$ python setup.py build
# python setup.py install

これで無事ビルドされるはずです。

最後に percol を入れます。

$ git clone git://github.com/mooz/percol.git
$ cd percol
# python setup.py install

ビルドはこれだけです。あと設定ファイルが必要ですが、無駄に長くなるので 前のエントリを見て下さい。

Windows7 64bit に導入する

Windows の環境は以下のようになっています。

基本的に Cygwin の使用を前提としています。私は Cygwin のもともと全パッケージを インストールしているので、以下の工程での細かい必要パッケージがわかりません。 cmigemo も Windows用 dll ではなく、ソースからビルドします。

まずは cmigemo ですがすこし make のコマンドが変わるだけです。先程と同様に src/wordbuf.c の修正は必要です。

$ wget http://cmigemo.googlecode.com/files/cmigemo-default-src-20110227.zip
$ unzip cmigemo-default-src-20110227.zip
$ cd cmigemo-default-src
$ edit src/wordbuf.c
$ ./configure
$ make cyg
$ make cyg-dict; cd dict; make utf-8; cd ..    # 辞書のビルド
# make cyg-install

これで /usr/local/bin に cmigemo と cygmigemo1.dll、/usr/local/share/migemo に 辞書、/usr/local/lib に libmigemo.dll.a がインストールされます。

次に PyMigemo をビルドします。先程とライブラリの名前が違うので、そのまま ではビルドできません。

$ wget http://www.atzm.org/etc/files/pymigemo/pymigemo-0.3.tar.gz
$ tar xvf pymigemo-0.3.tar.gz
$ cd pymigemo-0.3
$ python setup.py build
running build
running build_ext
building 'migemo' extension
(中略)
gcc -shared -Wl,--enable-auto-image-base build/temp.cygwin-1.7.11-i686-2.6/pymigemo.o -L/usr/lib/python2.6/config -lmigemo -lpython2.6 -o build/lib.cygwin-1.7.11-i686-2.6/migemo.dll
/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/ld: cannot find -lmigemo
collect2: ld returned 1 exit status
error: command 'gcc' failed with exit status 1

setup.py を修正すればいいのかもしれませんが修正の仕方わからなかったので、手動 でlibmigemo.dll.a とリンクしてコンパイルします。

$ gcc -shared -Wl,--enable-auto-image-base build/temp.cygwin-1.7.11-i686-2.6/pymigemo.o \
  -L/usr/lib/python2.6/config -L/usr/local/lib -lmigemo.dll -lpython2.6 \
  -o build/lib.cygwin-1.7.11-i686-2.6/migemo.dll
# python setup.py install

これでビルド完了です。

percol は先程と全く同じ工程で出来ますので省きます。

使ってみる

実際にしぼり込んでみます。

$ ls | percol --match-method migemo

percol_example_migemo.jpg

という感じに日本語もばっちり絞り込んでくれます。

前のエントリで作成した search-document-by-percol はドキュメントを絞り込みます が、これもばっちり日本語のパスが含まれていても絞り込んでくれるようになりまし た。1000以上の候補があってもサクサク絞り込んでくれますし、migemo かつ AND 検 索できるようなドキュメント検索ツールは今までにないものだと思います。

zsh の履歴検索もできるかと思ったのですが、日本語を使ったコマンドが .zsh_history に正しく保存されず文字化けっぽくなってしまいます。どなたか解決策をご存知の方 に教えていただきたい!

おわりに

この機能が実装されて本当に便利すぎて滂沱の涙が出てきました。mooz さん本当にあ りがとうございます。もう拝まずにいられません。ぜひぜひこのエントリを見た人も使っ てみてください。

Comments