emacsからローカルのwikipediaを参照できるようにする

なんとなく記事を見つけてしまい、他にやることあるのにやってみました。

基本的にはこちらの手順そのままなのですが、この記事の著者がlookupにこの煩雑な手順を簡略化できるツールを入れてくださっているとのことで、それを踏まえた手順をメモります。

なお、私の環境は 32bit/Gentooで、この環境でしか確認していません。なので手順内emergeとか出てきます。そのあたりは、apt-getとかyumとかに読み替えてください。

まずは下準備です。先に必要になるであろう以下のものを準備します。rubyとかOCamlとかがすでに入っている場合は飛ばしてOKです。

lookupのCVS版、そして数式を画像化するために必要なtexvcは、emergeは使わずに直接落としてくる必要があります。任意のディレクトリで以下のコマンドをば。
CVSのloginの際にパスワードの入力が求められますが、何も入力せずにそのままEnterで問題ありません。さくっとやってしまいましょう。
そして、先にtexvcも作成しておきます。

emerge xapian ocaml mecab mecab-ruby ruby ptex

cvs -d:pserver:anonymous@lookup.cvs.sourceforge.net:/cvsroot/lookup login
cvs -z3 -d:pserver:anonymous@lookup.cvs.sourceforge.net:/cvsroot/lookup co -P lookup
svn checkout http://svn.wikimedia.org/svnroot/mediawiki/branches/REL1_15/phase3/math
cd math
make

texvcは直接実行ファイルが作成されるため、パスが通った場所に置いておいてください。
さて、lookupのインストールはとりあえず置いておいて、内部のmiscというディレクトリに移動します。以降の作業はすべてここで行います。作業用にjaというディレクトリも作成しておきます。

cd lookup/misc
mkdir ja

このmiscに、簡略化するための「wikipedia.ja.rb」というスクリプトがあります。英語版もありますが、今回は日本語版だけを対象とします。
さて、このmiscの中に、quickstartsearch.cc、quickstartindex.ccというファイルがあります。拡張子からそのまんまなんですが、これはC++で作成されたプログラムです。が!
この二つのプログラム、コンパイルするためにはXapianが必要なうえ、Makefileが無いため、決まり文句のmakeができません。

・・・というわけで、直接打ちます。

g++ -o quickstartindex -lxapian quickstartindex.cc
g++ -o quickstartsearch -lxapian quickstartsearch.cc

これでできる・・・はずです。

さて、ここ以降の手順では、wikipediaのデータが必要になりますので、wikipediaの公式ページから、`jawiki-latest-pages-articles.xml.bz2'を落としておきます。
落としたら、さっき作成したlookup/misc/jaディレクトリに入れておきます。

さて、ここからはコマンドを打っては待ち、が繰り返されます。以下のコマンドをjaディレクトリ内で順番に入力していってください。forとかは複数行よりかは単一行のほうがいいかと思って一行にしています。

bzip2recover jawiki-latest-pages-articles.xml.bz2
rm jawiki-latest-pages-articles.xml.bz2
for i in rec*.bz2 ; do ; echo #$i ; bzcat $i | grep '<title' | perl -ne 'm/<title>([^<]+)<\\/title>/ && print $1."\\n";' ; done | ../quickstartindex
cd ..
mkdir offline.wikipedia
mv ja/ offline.wikipedia/
cp quickstartsearch offline.wikipedia/

注:最初Mecabを使うと言っていましたが、やると必ずエラーを吐いてしまっていたので、元々のものにしました。これでもちゃんと検索できます。

はい、ここまででとりあえずインデックス化までが完了しました。このoffline.wikipediaがキモとなります。このディレクトリを適当な場所に移動させておいてください。とりあえずは ~/dict ディレクトリに置いておくことにします。

さっき無視したlookupをインストールします。これはREADMEを見てください・・・じゃあんまりなので、一応lispディレクトリは ~/.emacs.dであることを前提として、lookupをインストールします。

cd lookup
./configure --with-emacs=emacs --with-lispdir=~/.emacs.d
make install

そして、.emacs.elに以下を貼り付けます。lookupの他の設定は

(global-set-key (kbd "C-x C-l") 'lookup)
(global-set-key (kbd "C-x y") 'lookup-region)
(global-set-key (kbd "C-x C-y") 'lookup-pattern)

(load "lookup-autoloads")
(setq ndwikipedia-search-program (expand-file-name "~/dict/offline.wikipedia/quickstartsearch"))
(setq ndwikipedia-texvc-program (expand-file-name "~/bin/texvc"))
(setq lookup-search-agents
      '((ndtp "dserver")
        (ndeb "/usr/local/dict/epwing")
        (ndwikipedia "~/dict/offline.wikipedia/")
        (ndspell)))

texvcは~/binに移動してある前提です。

とりあえずはこれで見られるようになります。非常に面倒ですが、それなりに見られますし、遷移も普通にできたりします。限度はあるようですが。
課題はMecabでしょうか。これはよくわからないんですが、とりあえず上の手順でできることはできるので、不便になってからやることにします。

試行錯誤しながら試しているので、

・・・あれ、なんでこんなことしてるんだっけ(爆