Hyper Estraier で仏典探索

導入

Mac OS X には標準ですぐれた全文検索システム Spotlight があるが、Hyper Estraier も試してみる。Macports でインストールできるので導入は楽だ。

$ sudo port install hyperestraier

依存関係は次の通り。

$ port deps hyperestraier
Full Name: hyperestraier @1.4.13_0
Build Dependencies:   pkgconfig
Library Dependencies: qdbm, libiconv, zlib

検索対象としてPDF (.pdf) やワード (.doc)、エクセル (.xls)、パワーポイント (.ppt) などのファイルを扱うことが可能だが、フィルタのスクリプト類がそのままではインストールされないので、

$ cp /opt/local/share/doc/hyperestraier/filter/* /usr/local/bin/

とパスの通ったところにコピーしておく。

インデックス作成

テストとしてローカルに保存されているテキストファイルを集めてインデックスを作成してみた。フォルダ /Library/WebServer/Documents/etext/buddh には仏教学関連のサンスクリット語、パーリ語、チベット語、漢訳と色々な言語のテキストファイルを混ぜてみた。

$ mkdir -p /Library/WebServer/Documents/etext/buddh
$ cd /Library/WebServer/Documents/etext
...                  # <-- テストファイルを集める
$ ls buddh/
chin pali skt tib    # <-- 言語ごとに分けた
$ estcmd create est_index
$ estcmd gather -pc UTF-8 -ft -il en -bc -lt -1 -sd -cm -um est_index buddh
... 
estcmd: INFO: finished successfully: elapsed time: 0h 13m 50s

4701 個の document と 3562599 個の word 登録で 14 分弱。

たくさんオプションが用意されているので詳細は ユーザーガイド を参照。今回使用したオプションだけメモしておく。

-pc ファイルのパスの文字コードを指定。デフォルトは ISO-8859-1. 日本語のフォルダ名がある場合などに。
-ft 処理対象の全てのファイルをプレーンテキストとして扱う。
-il 文字コードの判定で優先される言語を指定。デフォルトは英語。
-bc バイナリファイルを検出して処理対象から除外。
-lt 解析するテキストのサイズ制限をキロバイト単位で指定。デフォルトは128KB。負数にすると無制限になる。
-sd ファイルの更新日時を文書の属性として追加。
-cm 文書の属性の更新日時がファイルの更新日時より古い場合にのみ登録。
-um キーワードを抽出する際に形態素解析器を使用。

ターミナルで検索

実際に検索してみる。

$ estcmd search -ic UTF-8 -vh -max 8 est_index "空"
--------[02D18ACF7BA60063]--------
VERSION 1.0
NODE    local
HIT 1625
HINT#1  空  1625
TIME    0.005597
DOCNUM  4701
WORDNUM 3562599
VIEW    HUMAN
...

早い…

-ic 文字コードを明示。デフォルトはUTF-8.
-vh 属性情報とスニペットを人間が読みやすい形式にして結果を出力。
-max 最大表示件数を指定。負数にすると無制限になる。デフォルトは10件。

ちなみに Spotlight (= mdfind) で同じ語を検索してみると、

$ cd buddh
$ time mdfind -onlyin $PWD "空"   # <-- "$PWD" = "." (current directory)
 ...
real    0m0.114s
user    0m0.031s
sys     0m0.028s

こちらも十分すばらしい1

比較対象にはならないが一応 lgrep で同じように検索して時間を計測してみた。

$ time find -L . -type f -print0 | xargs -0 lgrep -n -Au8 -Ia "空"
...
real    1m36.797s
user    1m5.999s
sys     0m3.427s

ブラウザで検索

検索用 CGI スクリプト estseek.cgi が付いているので利用してみる。Mac OS X は標準で Apache が搭載されているので、「システム環境設定」「共有」「Web 共有」にチェックを入れるだけで Apache を起動でき、ローカルでも CGI を動かすことができる。なお、以下の作業は Mac OS X 10.6.8, Hyper Estraier 1.4.13 (installed via Macports) で実行している。

Macposrts で hyperestraier を導入した場合 estseek.cgi は /opt/local/libexec/ 以下にあるので、これを Mac OS X の初期状態での CGI ファイルの置き場所 /Library/WebServer/CGI-Executables/ にコピーする。他にもいくつかのファイルを次のようにコピーしてリネームしておいた。

$ mkdir -p /Library/WebServer/CGI-Executables/est    # <-- このフォルダにまとめた
$ cd /Library/WebServer/CGI-Executables/est
$ cp -a /opt/local/libexec/estseek.cgi buddh.cgi
$ cp -a /opt/local/share/doc/hyperestraier/estseek.conf buddh.conf
$ cp -a /opt/local/share/doc/hyperestraier/estseek.tmpl buddh.tmpl
$ cp -a /opt/local/share/doc/hyperestraier/estseek.top buddh.top
$ cp -a /opt/local/share/doc/hyperestraier/estseek.help estseek.help  # <-- そのまま利用した
$ chmod 755 *
$ ls -l
-rwxr-xr-x  1 skalldan  admin  58696  6 28 21:59 buddh.cgi
-rwxr-xr-x  1 skalldan  admin    965  6 28 21:59 buddh.conf
-rwxr-xr-x  1 skalldan  admin   6768  6 28 21:59 buddh.tmpl
-rwxr-xr-x  1 skalldan  admin    440  6 28 21:59 buddh.top
-rwxr-xr-x  1 skalldan  admin   5235  6 28 21:59 estseek.help

今回の場合、buddh.conf を次のように書き換える。

indexname: /Library/WebServer/Documents/etext/est_index
tmplfile: buddh.tmpl
topfile: buddh.top
helpfile: estseek.help
...
replace: ^file:///Library/WebServer/Documents/{{!}}http://localhost/
...
deftitle: Buddhological Text Search
...

buddh.tmpl, buddh.top も適宜少しだけ書き換えて、ブラウザ (Firefox, 3.6.18) で http://localhost/cgi-bin/est/buddh.cgi にアクセスしてみる。

“Top Page”

https://skalldan.files.wordpress.com/2011/06/wpid-top_est3.png

“Advanced”

https://skalldan.files.wordpress.com/2011/06/wpid-est_advanced.png

“Help”

https://skalldan.files.wordpress.com/2011/06/wpid-est_help.png

estseek.cgi のデフォルトの設定では、Google のように空白で区切ることで AND 条件を指定できるようになっている (簡便書式を使用)。

色々な言語を検索してみる。まずは古典中国語。

https://skalldan.files.wordpress.com/2011/06/wpid-chinese_est2.png

サンスクリット語。フレーズ検索は「”rūpam eva śūnyatā”」のように括る。

https://skalldan.files.wordpress.com/2011/06/wpid-sanskrit_est2.png

チベット語。

https://skalldan.files.wordpress.com/2011/06/wpid-tibetan_est3.png

非常に反応が早い。見た目は Google 検索さながら。

Lookup で検索

Emacs の辞書インターフェース Lookup の拡張版 lookup 1.4 + media を使用すれば Hyper Estraier のインデックス検索が可能になる (ndest エージェント)。lookup-search-agents に、

;; .lookup.el
(setq lookup-search-agents
      '((ndest "/Library/WebServer/Documents/etext/est_index"))) ; index のパス

というように設定する。Lookup を起動してみる。

https://skalldan.files.wordpress.com/2011/06/wpid-est_lookup1.png

辞書 “Hyper Estraier” が追加された。先と同じように検索すると (「色即是空」)、

https://skalldan.files.wordpress.com/2011/06/wpid-est_lookup_chinese.png

“rūpam eva śūnyatā”

https://skalldan.files.wordpress.com/2011/06/wpid-est_lookup_sanskrit.png

“gzugs ni stoṅ pa ñid”

https://skalldan.files.wordpress.com/2011/06/wpid-est_lookup_tibetan.png

メンテナンス

$ estcmd optimize est_index

でインデックスを最適化して不要な領域を削除する。

$ estcmd purge -cl est_index

でインデックス内にあってファイルシステム上にない文書の情報を削除する。-cl を付けると、削除された文書の領域を整理する。

チベット仏教のマニ車 (མ་ཎི་འཁོར་ལོ་) には中に経典が収められており、回転させた回数だけ功德があると言う。一方で、何千という仏典を HDD にコピーして何万回と全文検索にかけると検索をかけた回数だけ功德がある、というわけにはいかない (-_-;)

Footnotes:

1 ちなみに Spotlight で UTF-8 のプレインテキストを検索するには Spotlight インポータ より JapaneseText.mdimporter を導入する。Spotlight の詳しい使い方や他の拡張などについては MacWiki の Spotlight 参照。

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s