namazu の設定
本ページでは, フリーソフトウェア namazu を研究室の内部限定 http サーバで設定したときの備忘録である。
ここで注意していただきたいのは, namazu のインストールと初期設定は既に完了しているものとして設定を行っている. また, 今回は管理者権限は一切使用せず, 一般ユーザ権限のみで設置, 設定を行ったということに注意(設定したサーバの管理者権限をそもそも持っていなかったというオチ).
前提
- namazu 検索を行うファイルは PDF ファイルのみ.
- 検索対象の PDF ファイルは Windows 上でスキャンされ, OCR 化を済ませてあるファイルである.
- 文字のエンコーディングは sjis で行われている.
- namazu の実行に必要な perl 等の最低限コマンドは事前にインストールされている.
- www を動かすソフトには apache を使用.
- namazu.cgi を起動させるためのディレクトリには既に cgi を動かすための権限が与えられている.
- わかち書きには kakasi を使用.
- インストール方法等はまだ作成していない. (上のページで確認されたい)
- 文字コード変換プログラムに nkf を使用.
- OCR 化された PDF ファイルをテキスト形式に直すために, Xpdf を使用.
- あとでこの設定ファイルを使用するため, ソースをダウンロードしておいた方がよいかも.
前準備
検索ページを設置するための各ディレクトリを用意する. 具体的には以下のとおり. ここで, src ファイルにはすでにスキャンした PDF が格納されているとする.
scan_PDF : namazu のルート |-- src : 検索対象となる PDF が格納されている. |-- index : mknmz で作成されるインデックスファイルを格納するディレクトリ. |-- pub : namazu.cgi を動かすディレクトリ. `-- conf : namazu の設定ファイルを格納するディレクトリ.
各種設定・設置
namazu のインストール
- namazu の公式サイト からソースをダウンロード.
- ダウンロードしたファイルを解凍.
configure の実行.
$ ./configure --prefix=/usr/local/bin
mknmz のための設定
- conf ディレクトリに, namazu のソースファイルから mknmz の設定ファイルである mknmzrc ファイルをコピー.
mknmzrc ファイルを以下のように設定.
package conf; # Don't remove this line! $ADDRESS = 'hogehoge@rain.hyarc.nagoya-u.ac.jp'; # 管理者メール $ALLOW_FILE = "|.*\\.pdf"; # 検索対象を PDF のみに設定 $ON_MEMORY_MAX = 80000000; # 使用するメモリの最大値 $FILE_SIZE_MAX = 500000000; # 検索対象となるファイルの最大容量 # 今回はスキャンした PDF が対象なので, 結構大きめに設定しておく. $TEXT_SIZE_MAX = 500000000; # 作成するインデックスファイルの最大容量 $NKF = "/usr/bin/nkf"; # 文字コード変換用のコマンド設定 $KAKASI = "/usr/bin/kakasi -isjis -osjis -w"; # kakasi のパス設定(*) $WAKATI = $KAKASI; # わかち書きに使用するプログラムの設定. # 今回は kakasi を使用.
namazu でインデックスを作成する際, 非常にメモリ容量を必要とするので, 各自のハードウェアと要相談の上, この容量等は設定されたい (今回設定したマシンは 512 MB が最大メモリ容量であったため, 上のように設定した.).
(*) kakasi のオプションについては, man 参照. ここでは, Xpdf で PDF をテキストファイルに書き出した際, sjis で書き出すように設定する(後述)ので, sjis のファイルを読み込み, それを sjis でわかち書き出すようにオプションを設定.
Xpdf の設定
- Xpdf はインストールしただけでは, 日本語フォント対応となっていないため, 次のようにして設定する.
- namazu 検索ページを設置しようとしているユーザのホームに設定ファイル sample-xpdfrcを Xpdf のソースから .xpdfrc という名称でコピー.
- xpdf 用の 日本語パッケージ を任意のディレクトリにダウンロード, 解凍.
- 解凍されたディレクトリを任意の場所に設置.
- ここでは, ~/usr/local/share/ 以下に設置した.
今回は sjis のファイルをインデックスに登録するので, .xpdfrc を以下のように設定.
!--- (省略) --- #textEncoding UTF-8 textEncoding Shift-JIS !--- (省略) ---
インデックスファイルの作成
- mknmz コマンドを使用し, PDF ファイルで検索対象とするインデックスを作成する.
具体的には, 以下のようなシェルスクリプトを用意し, 実行する.
#!/bin/bash export LANG=ja_JP.sjis # 環境変数の設定 export PERL_BADLANG=0 # perl での環境変数の設定 mknmz --use-kakasi --config=./conf/mknmz.conf --update=./index/ --output-dir=./index/ ./src/ # mknmz の実行.
このスクリプトは, namazu のルートである scan_PDF 直下で行われることを想定しており, それ以外から実行する場合は, mknmz のオプションのディレクトリ位置を適宜変更すること. また, 各オプションの意味は,
--use-kakasi : kakasi の perl モジュールを使用. --config= : 先に設定した mknmz の設定ファイルの場所 --update= : 検索対象ファイルを追加したときに, 追加分のみをインデックスに追加する. --output-dir= : インデックスファイルを作成するディレクトリ ./src/ : <必須> 検索対象ファイルの格納されているディレクトリ
以下のコマンドで実行し, インデックスファイルを作成.
$ ./<作成したスクリプト>
namazu.cgi の設定
- namazu のソースファイルに cgi プログラム "namazu.cgi" と設定ファイル "namazurc" を pub ディレクトリにコピー.
namazurc を以下のように設定(主に設定をデフォルトから変更する箇所のみ明記).
Index <絶対パス>/scan_PDF/index template <絶対パス>/scan_PDF/index Replace <絶対パス>/scan_PDF http://ドメイン/scan_PDF (これはあくまで例) Lang ja
- Replace 項目は, サーバ内の namazu ルートディレクトリまでのパスを URL でどのように置き換えるかを設定する.
動作確認
- namazu.cgi を URL で指定 (ここでは, http://<ドメイン>/scan_PDF/pub/namazu.cgi).
- 検索ボックスに検索単語を入れ, 正常に検索されるかを確認(筆者はここでつまづいた).
参考文献
-
- namazu を実行して, index ファイルを作成する際に, 以下のようなエラーが出力されることに対する処置.
Unable to convert pdf file (maybe copying protection) これは pdftotext のエラーである可能性がある.