さて,実は,前回(knowledgebase プラグインについて)の続きです.更新にちょっと時間があいてしまったのは,この検索機能を実現しようと色々頑張った結果なのです.そして,失敗ばかりが続いていたのです...
知識データベースをどんどん膨らませていくのはいいのですが,検索が機能していないのが難点でした.
検索が機能しないのは,Redmine本体の作りの問題というか"プロジェクト中心"指向のためで,現在,検索対象は,なんからのプロジェクトに属しているものだけとなっているようです.
そのため,プラグイン開発者から,Redmine本体に対応のリクエストは出していますが,対応されるかどうかはまだはっきりしていません.
で,有志で,知識データベースを検索できるようにする取り組みがあったのですが,
とりあえず,やったことをつらつらと2回にわけて書きたいと思います.
■xapian ツールの利用.
たまたま,以下のサイトで,
http://www.redmine.org/boards/3/topics/23591?r=23740#message-23740
「Xapianと組み合わせれば,検索できるぜ」的なコメントを発見.
Xapianってなんじゃろ?と調べてみたところ,外部ツールですが,インデックスを作成・利用してファイルの中身検索を行うツールのようです.namazuや,hyper estraier のようなものかな.
で,必要なステップは以下.
・Xapian関係ののバイナリ,及びバインディングするライブラリ群が必要.
・redmine_xapian プラグインをインストール
・ほか?
収穫だったのが,redmine_xapian プラグインを使用することで,redmineのチケットや,ファイル,wikiに添付したファイルが検索可能になるらしい.
添付ファイルの検索は,自分が以前から望んでいたことで,redmine上で実現する方法がわからないので,いままでは,極力,word/pdfなどのファイルを作成せずに,チケットやwikiにテキストデータとして載せることで検索に引っかかりやすくしていました.
でも,この機能があれば,誰かが作ったPDFファイルなんかも貼りつけて,検索対象にすることができる!これで,また利便性が上がったと共に,Redmineそのものが,(knowledgebase プラグインをインストールしていてもしていなくても)より有用な知識データベースとして機能するようになる!と期待するわけです.
で,自分のいまRedmineを使用している環境はWindowsだけども,Xapianは,Ubuntuなどで使われているらしく,Windowsではコンパイル通せる自信なし.
なので,バイナリファイルを使用するつもりだったのだけど,これがまた見つからない.
このサイトに色々な情報が書いてあります.
http://xapian.org/download.
cygwinport のサイトをちゃんと読んでみると,バイナリは確かにありましたが,バージョンがちょっと古いのです.(1.0.10) 最新は,1.2.7.
ftp://ftp.cygwinports.org/pub/cygwinports/release/
ここから,xapian-bindings, xapian-core はダウンロードして展開すると,必要なライブラリ, 実行ファイルは入手できました.Search::xapianというのがないけど,どっから手に入れるんだろう.
で,さっそくインデックスをつくろうとしたのだけど,
% omindex -s english --db /var/www/xapian-index/ /var/www/redmine/files/
エラーになった.
windows 向けに書き直すと,
% omindex -s english --db c:\cygwind\var\www\xapian-index\ c:\cygwin\var\www\redmine\files\
エラーは以下のようになる.(パスが違うけどこれは環境が異なるので適宜読み替えてください)
... "pdftotext -enc UTF-8 c\:\\Ruby\\share\\redmine\\files/100930192152_123864bd2075017eb8afb9200fbba459.pdf -" failed - skipping
このコマンドをコマンドライン上から行うと,きちんとインデックスをつくることができます.なので,Windowsのパスの変換(\記号とか)が恐らく間違っていると思うのですが,対処方法が分からず,諦めました.
WindowsでXapianを動作させる環境を作る別の方法としては,
http://sourceforge.net/projects/mingw/files/
これを使って,コンパイルできると書いてあるけど,自分のCygwinのパスと混ざるといやだなぁと思って躊躇ってました.が,そのあと,結局色々うまくいかず,インストールして挑戦しました.
% make
かけると,
bin/ld.exe: cannot find -lz
というエラー.
http://haraita9283.blog98.fc2.com/blog-entry-208.html
ここを参考にzlibのソースをダウンロードして,自分でビルド.
http://lists.tartarus.org/pipermail/xapian-discuss/2008-January/005102.html
ここでつぶやかれているように,Xapianは,一般の人がだれでもバイナリを利用できる感じではないのが残念.(または,自分の知識不足)
ここを参考に真面目にコンパイル.結構時間がかかりました.(そして,コンパイルエラー...orz)
http://xapian.org/docs/install.html
% cd xapian-core-
% ./configure --prefix=/opt
% make
% sudo make install
結局,make でエラーがでる.
■その他,各種ファイルの変換ツールのインストール
■pdftotextの動作確認
% pdftotext -enc Shift-JIS hogehgoe.pdf
Error: Bad annotation destination
あれ?エラーだ.
% which pdftotext
としたら,cygwin の中に既にあったのでこれを利用.
xpdfrc のファイルをpdftotextと同じフォルダに置きます.
-----------------------
# xpdfrc (for pdftotext xpdf-WIN32)
# Change the name of the Resource directory
# D:/Resource into your own one, if it differs.
#
cidToUnicode Adobe-Japan1 "C:\Program Files\Xpdf\japanese\Adobe-Japan1.cidToUnicode"
unicodeMap ISO-2022-JP "C:\Program Files\Xpdf\japanese\ISO-2022-JP.unicodeMap"
unicodeMap EUC-JP "C:\Program Files\Xpdf\japanese\EUC-JP.unicodeMap"
unicodeMap Shift-JIS "C:\Program Files\Xpdf\japanese\Shift-JIS.unicodeMap"
cMapDir Adobe-Japan1 "C:\Program Files\Xpdf\japanese\CMap"
toUnicodeDir "C:\Program Files\Xpdf\japanese\CMap"
#displayCIDFontX Adobe-Japan1 "-*-fixed-medium-r-normal-*-%s-*-*-*-*-*-jisx0208.1983-0" ISO-2022-JP
Bad annotation destination とエラーを吐くのだけど,ファイルは出来ているので気にしないことにする.
■wordファイルのテキスト化
antiword のバイナリがありました.
http://www-stud.rbi.informatik.uni-frankfurt.de/~markus/antiword/
動作確認は,
$ antiword.exe -f -m UTF08.txt sample.doc > fileoutput.txt
-m で指定するマップファイルを間違えると日本語が出ません.
■Excelのテキスト化
xls2csv
これ使えばOK.
■PowerPointのテキスト化
catppt
これ使えばOK.
xls2csvとcatpptは,以下のサイトからソースコードをダウンロードして,コンパイルすれば,どちらもexeファイルとして作成されます.
http://wagner.pp.ru/~vitus/software/catdoc/
% sh configure
% make
make install は何もしないようなので,自分でパスの通っているフォルダに catdoc.exe, xls2csv.exe, catppt.exe をコピーします.catdoc.exeは,他のexeから使用される模様.ちょっとはっきりしませんが.
まとまっていないのですが,Xapianのインストールの段階で躓いてしまい,このRedmineプラグインを使用して,添付ファイルを検索したり,知識データベースプラグインとの連携は試せませんでした.
hyper estraierを利用したプラグインを作りたいけど,どう呼び出せばいいんだろうか.
Rubyから利用することが可能なのは分かってるのだけど,コーティングするモチベがちょっと今はまだない...