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 のエラーである可能性がある.


1 つ上に戻る

メインページに戻る