Windows 版 Namazu 導入覚書
このページの解説は、PDF の検索を目的としており HTML ファイルは対象にしておりません。
また、1台のマシン上(スタンドアロン)での動作しか考えておりません。
対象 OS は Microdoft Windows2000 Professional です。
導入理由は、IDGジャパン Linux WORLD 5月号の付録 CD-ROM に収録されている PDF を効率的に検索する為に導入しました。
Windows サーバで、閲覧者に HTML ファイルを検索させる為に導入をお考えの方には余り参考にならないかもしれませんが、
設定方法はおおむねこのページの解説でできるハズですので、ご一読頂ければ幸いです。
目標としては、Windows マシンに WEB サーバを導入し、「 http://localhost/cgi-bin/namazu.cgi 」で検索フォームを表示し、検索を可能にさせる事です。私は WEB サーバに Apache を採用しています。
なお、WEB サーバの設定は完了済みと言う事を前提に解説を進めますので、ご注意下さい。
ページ内コンテンツ一覧
Namazu とは、予めキーワードを独自のファイルに格納しておきそのファイルを検索する事により、高速な日本語全文検索を実現する検索システムです。
HTML やテキストファイルはもちろんの事、Word , Excel , PowerPoint や、一太郎 , PDF 等のデータも検索対象にしてやる事が可能です。
キーワードを格納する Namazu 独自のファイルの事を一般に インデックスファイルと呼びます。
これは、定期的に更新してやらなければ、新しく追加したファイルには対応できませんので、注意が必要です。
このインデックスファイルを作成する際には、インデックスファイルを格納するフォルダと、インデックス化するデータ群が必須です。
また、検索結果などの表示様式も管理者の好みにカスタマイズする事が可能です。
これらのファイルはテンプレートとして、ファイル名が NMZ.***.ja になります。
前提条件として、以下の事柄を定義しておきます。
パス | 用途 | 備考 |
C:\namazu\data\lw | データを格納する | この lw フォルダ以下に検索対象となる PDF を格納しておく |
C:\namazu\var\namazu\index\lw | インデックスファイルを格納する | - |
C:\namazu\share\namazu\template.ja | テンプレートファイルを格納する | 必須ファイルは、ファイル名が NMZ.***.ja で合計6個 |
http://www.namazu.org/windows/#download より nmz2012.zip と kakasi-2.3.4.zip をダウンロードする。
それぞれを解凍し、C ドライブの直下へ格納します。
つまり、C:\namazu と C:\kakasi になる様に設置する、と言う事です。
ちなみに KAKASI とは、Namazu でキーワードを分割する為のソフトウェアです。
DOS プロンプトから「 C:\namazu\NMZSETUP.BAT 」を実行する。
幾つかの質問を聞かれるので、全て「y」(yes) で答える。
環境変数の設定を行います。
以下に示すテーブルを参考に設定して下さい。
Windows2000 の場合は、「マイコンピュータ」を右クリック -> 「プロパティ」 -> 「詳細」タブをクリック -> 「環境変数」を順にクリックし、設定可能です。
環境変数名 | 値 | 備考 |
HOME | C:\namazu | 新規で作成しなければならない。 |
ITAIJIDICTPATH | C:\kakasi\share\kakasi\itaijidict | - |
KANWADICTPATH | C:\kakasi\share\kakasi\kanwadict | - |
LANG | ja_JP.SJIS | - |
MKNMZRC | C:\namazu\etc\namazu\mknmzrc | - |
NAMAZULOCALEDIR | C:\namazu\share\locale | - |
NAMAZURC | C:\namazu\etc\namazu\namazurc | - |
Path | C:\namazu\bin; | C:\namazu\bin; が追加されていればオッケー |
以上で、Namazu と kakasi のインストールは完了です。
KAKASI は特に触らなくても構いません。
表示様式(テンプレート)を司るファイル群を任意のフォルダにコピーします。
対象のファイルは、C:\namazu\share\namazu\template の中の「 NMZ.***.ja 」ファイル。
これら6個のファイルを C:\namazu\share\namazu\template.ja フォルダを作成し、格納する。
WEB ページ上で CGI として動作させる為に、C:\namazu\libexec フォルダ内の「 namazu.cgi.exe 」を CGI の動作するフォルダへコピーし、「 namazu.cgi 」にリネームします。
インデックスファイル作成用コマンドである mknmz コマンドの設定を行います。
C:\namazu\etc\namazu\mknmzrc のコメント部分を省略した内容を以下に示します。
# のコメントを削除し、赤文字の部分を変更しました。
package conf; # Don't remove this line! # $ADDRESS = 'webmaster@foo.bar.jp'; # $HTML_SUFFIX = "html?|[ps]html|html\\.[a-z]{2}"; # $ALLOW_FILE = ".*\\.(?:$HTML_SUFFIX)|.*\\.txt" . # HTML, plain text # "|.*\\.gz|.*\\.Z|.*\\.bz2" . # Compressed files # "|.*\\.pdf|.*\\.ps" . # PDF, PostScript # "|.*\\.tex|.*\\.dvi" . # TeX, DVI # "|.*\\.rpm|.*\\.deb" . # RPM, DEB # "|.*\\.doc|.*\\.xls|.*\\.ppt" . # Word, Excel, PowerPoint # "|.*\\.j[sabf]w|.*\\.jtd" . # Ichitaro 4, 5, 6, 7, 8 # "|\\d+|[-\\w]+\\.[1-9n]"; # Mail/News, man # $DENY_FILE = ".*\\.(gif|png|jpg|jpeg)|.*\\.tar\\.gz|core|.*\\.bak|.*~|\\..*|\x23.*"; # $EXCLUDE_PATH = undef; # $DIRECTORY_INDEX = ""; # $REMAIN_HEADER = "From|Date|Message-ID"; # $SEARCH_FIELD = "message-id|subject|from|date|uri|newsgroups|to|summary|size"; # $META_TAGS = "keywords|description"; # %FIELD_ALIASES = ('title' => 'subject', 'author' => 'from'); # $NON_SEPARATION_ELEMENTS = 'A|TT|CODE|SAMP|KBD|VAR|B|STRONG|I|EM|CITE|FONT|U|'. # 'STRIKE|BIG|SMALL|DFN|ABBR|ACRONYM|Q|SUB|SUP|SPAN|BDO'; # $ON_MEMORY_MAX = 5000000; # PDFは重いので最大ファイルサイズを大きく設定 # $FILE_SIZE_MAX = 200000000; # PDFは重いので最大ファイルサイズを大きく設定 # $TEXT_SIZE_MAX = 600000000; # $WORD_LENG_MAX = 128; # %Weight = # ( # 'html' => { # 'title' => 16, # 'h1' => 8, # 'h2' => 7, # 'h3' => 6, # 'h4' => 5, # 'h5' => 4, # 'h6' => 3, # 'a' => 4, # 'strong' => 2, # 'em' => 2, # 'kbd' => 2, # 'samp' => 2, # 'var' => 2, # 'code' => 2, # 'cite' => 2, # 'abbr' => 2, # 'acronym'=> 2, # 'dfn' => 2, # }, # 'metakey' => 32, # for # 'headers' => 8, # for Mail/News' headers # ); # $INVALID_LENG = 128; # $MAX_FIELD_LENGTH = 200; # $NKF = "module_nkf"; # $KAKASI = "module_kakasi -ieuc -oeuc -w"; # $CHASEN = "chasen -j -F '\%m '"; # $CHASEN_NOUN = "chasen -j -F '\%m %H\\n'"; # $WAKATI = $KAKASI; $LIBDIR = 'C:/namazu/share/namazu/pl'; $FILTERDIR = 'C:/namazu/share/namazu/filter'; $TEMPLATEDIR = 'C:/namazu/share/namazu/template.ja'; 1;
次に、namazu の検索エンジンの設定を行います。
C:\namazu\etc\namazu\namazurc のコメント部分を省略した内容を以下に示します。
# のコメントを削除し、赤文字の部分を変更しました。
Index C:\namazu\var\namazu\index\lw # Template C:\namazu\share\namazu\template.ja # ローカルファイルをブラウザ上で表示させる為に Replace を設定しなければならない。 # Replace /C\|/namazu/data/ file://C:/namazu/data/ #Logging off Lang ja_JP.SJIS #Scoring tfidf # EmphasisTags "<strong class=\"keyword\">" "</strong>" # MaxHit 10000 # MaxMatch 1000 #ContentType "text/x-hdml"
これで、Namazu の設定は完了です。
Namazu はデフォルトでは PDF 形式のファイルをインデックス化してはくれません。
ここでは、PDF をインデックス化できる様に設定して行きます。
まずは、必要なツールをダウンロードします。
入手先を以下に示します。
xpdf本体2.02 ftp://ftp.foolabs.com/pub/xpdf/xpdf-2.02-win32.zip
Language Support Package ftp://ftp.foolabs.com/pub/xpdf/xpdf-japanese.tar.gz
xpdf-2.02-win32.zip を解凍します。解凍して生成されたファイルの全てを C:\namazu\bin に移動します。
xpdf 関連のファイルの設置場所は 環境変数の「 Path 」に設定されているフォルダならどこでも構いません。
もちろん新規で作成しても問題ありません。
C:\namazu\bin フォルダにある sample-xpdfrc を xpdfrc にリネームします。
続いて xpdf-japanese.tar.gz を解凍します。
解凍すると、xpdf-japanese というフォルダが生成されるので、フォルダ名を japanese にリネームして、フォルダごと C:\namazu\bin フォルダにコピーします。
C:\namazu\bin\japanese フォルダ内の add-to-xpdfrc をエディタで開きます。
デフォルトでは以下の記述がされています。
#----- begin Japanese support package (2002-jan-16) cidToUnicode Adobe-Japan1 /usr/local/share/xpdf/japanese/Adobe-Japan1.cidToUnicode unicodeMap ISO-2022-JP /usr/local/share/xpdf/japanese/ISO-2022-JP.unicodeMap unicodeMap EUC-JP /usr/local/share/xpdf/japanese/EUC-JP.unicodeMap unicodeMap Shift-JIS /usr/local/share/xpdf/japanese/Shift-JIS.unicodeMap cMapDir Adobe-Japan1 /usr/local/share/xpdf/japanese/CMap toUnicodeDir /usr/local/share/xpdf/japanese/CMap displayCIDFontX Adobe-Japan1 "-*-fixed-medium-r-normal-*-%s-*-*-*-*-*-jisx0208.1983-0" ISO-2022-JP #----- end Japanese support package
これを自分の環境に合わせ、以下の様に編集します。
デフォルトでは、パスの区切りがスラッシュになっているのを Windows で認識出来る様にする為に、円マーク(\)に書き換えます。
フォルダ構成も自分の環境に合わせて書き換えます。
#----- begin Japanese support package (2002-apr-01) cidToUnicode Adobe-Japan1 C:\namazu\bin\japanese\Adobe-Japan1.cidToUnicode unicodeMap ISO-2022-JP C:\namazu\bin\japanese\ISO-2022-JP.unicodeMap unicodeMap EUC-JP C:\namazu\bin\japanese\EUC-JP.unicodeMap unicodeMap Shift-JIS C:\namazu\bin\japanese\Shift-JIS.unicodeMap cMapDir Adobe-Japan1 C:\namazu\bin\japanese\CMap toUnicodeDir C:\namazu\bin\japanese\CMap displayCIDFontX Adobe-Japan1 "-*-fixed-medium-r-normal-*-%s-*-*-*-*-*-jisx0208.1983-0" ISO-2022-JP #----- end Japanese support package
変更内容を確認したら add-to-xpdf の内容をすべてコピーし、C:\namazu\bin フォルダ内の xpdfrc をエディタで開いてファイルの最後尾にペーストします。
これで、Namazu で PDF ファイルが検索可能になりました。
DOS プロンプトで、「 mknmz -C 」とコマンドを入力して下さい。
実行結果に「 application/pdf 」と表示されていれば成功です。
C:\>mknmz -C 読み込んだ設定ファイル: C:/namazu/etc/namazu/mknmzrc システム: MSWin32 Namazu: 2.0.12 Perl: 5.006001 NKF: module_nkf KAKASI: module_kakasi -ieuc -oeuc -w 茶筌: chasen -j -F '%m ' わかち書き: module_kakasi -ieuc -oeuc -w メッセージの言語: ja_JP.SJIS 言語: ja_JP.SJIS 文字コード: sjis CONFDIR: C:/namazu/etc/namazu LIBDIR: C:/namazu/share/namazu/pl FILTERDIR: C:/namazu/share/namazu/filter TEMPLATEDIR: C:/namazu/share/namazu/template.ja 対応メディアタイプ: application/excel application/ichitaro4 application/ichitaro5 application/ichitaro6 application/ichitaro7 application/msword application/pdf <-- これが表示されればオッケーです application/powerpoint application/rtf application/x-gzip application/x-js-taro message/news message/rfc822 text/hnf text/html text/html; x-type=mhonarc text/plain text/plain; x-type=rfc text/x-hdml C:\>
インデックスファイルの作成には、DOS プロンプト上で「 mknmz 」と言うコマンドを用います。
詳しい書式は「 mknmz --help 」コマンドで参照できますので、一度参照する事をお勧めします。
実際のコマンドを以下に示す。
mknmz -U -O C:\namazu\var\namazu\index\lw C:\namazu\data\lw
上記コマンドは以下に示す意味を持ちます。
-U:URI へのエンコードを行わない。
-O C:\namazu\var\namazu\index\lw:インデックスファイル群を書き出すフォルダを指定。
C:\namazu\data\lw:インデックス化するフォルダを指定。
Namazu の全ての表示様式(テンプレート)は、先の説明で C:/namazu/share/namazu/template.ja 内に格納しました。
これらのファイルを編集してやる事で、自分好みのインターフェイスを作成する事が可能になります。
注意点としては、NMZ.***.ja ファイル自体の文字コードは ECU で、実際にブラウザで表示する際には Shift_JIS コードを用いると言う点です。
ですので、NMZ.head.ja には以下の記述を追加し、ブラウザに表示する文字コードが Shift_JIS であると言う事を明示する事をお勧めします。文字化けも回避する事に繋がります。
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
実際の動作確認は、ブラウザ上で namazu.cgi を設置した場所までの URI を直接入力して下さい。
デフォルトのテンプレートなら「 Namazu による全文検索システム 」と見出しと検索フォーム、検索方法の説明が記述されているページが表示されます。
実際に検索してみて、検索結果が正常なら問題ありません。全ての作業は正常に終了しました。
また、WEB ページ内から検索フォームを設置して namazu.cgi を呼び出したい場合には以下の コーディングを HTML 内に追加する事により実現します。
<form action="./cgi-bin/namazu.cgi" method="GET">
<b>PDF ファイルを検索:</b>
<input type="text" name="query" size="20">
<input type="submit" value="検索">
<input type="hidden" name="whence" value="0">
<input type="hidden" name="max" value="20">
<input type="hidden" name="result" value="normal">
<input type="hidden" name="sort" value="score">
</form>
インデックスファイルを複数用意して、ユーザに検索対象を複数選択させたい場合にこの項を読んで下さい。
以下に前提条件を示します。
パス | 用途 | 備考 |
C:\namazu\data\lw | データを格納する | lw フォルダ以下に、Linux WORLD の PDF を格納しておく |
C:\namazu\data\jw | データを格納する | jw フォルダ以下に、Java WORLD の PDF を格納しておく |
C:\namazu\var\namazu\index\lw | Linux WORLD のインデックスファイルを格納する | - |
C:\namazu\var\namazu\index\jw | Java WORLD のインデックスファイルを格納する | - |
C:\namazu\share\namazu\template.ja | テンプレートファイルを格納する | 必須ファイルは、ファイル名が NMZ.***.ja で合計6個 |
そして、C:\namazu\etc\namazu\mknmzrc と C:\namazu\etc\namazu\namazurc の「 Index 」の値を編集します。
両ファイルとも「 C:\namazu\var\namazu\index 」に変更します。
Linux WORLD 向けのインデックスファイルはもう既に作成してあるとして、ここでは Java WORLD の PDF を新たにインデックス化してやらなければなりません。
インデックス化する mknmz コマンドの例を以下に示します。
DOS プロンプト上で実行して下さい。
mknmz -U -O C:\namazu\var\namazu\index\jw C:\namazu\data\jw
上記のコマンドを実行すると Java WORLD 向けのインデックスファイルが作成されます。
WEB インターフェイスの変更を行います。
C:\namazu\share\namazu\template.ja に格納してある NMZ.head.ja をエディタで開き、以下の部分を変更します。
<!--
<p>
<strong>検索対象:</strong>
<ul>
<li><input type="checkbox" name="idxname" value="lw" checked>Linux WORLD
<li><input type="checkbox" name="idxname" value="jw" checked>Java WORLD
</ul>
</p>
-->
HTML のコメントの始点と終点を示す「 <!-- 」及び「 --> 」を消去します。
checkbox の「 value="**" 」はインデックスファイルが格納されているフォルダ名を指定します。
WEB ページ内に検索フォームを設置する場合は以下の記述を HTML 内に追加してやります。
<form action="./cgi-bin/namazu.cgi" method="GET">
<b>PDF ファイルを検索:</b>
<input type="text" name="query" size="20">
<input type="submit" value="検索">
<input type="hidden" name="whence" value="0">
<input type="hidden" name="max" value="20">
<input type="hidden" name="result" value="normal">
<input type="hidden" name="sort" value="score">
<input type="hidden" name="idxname" value="lw,jw"> 注意
</form>
注意:NMZ.head.ja で指定したフォルダ名をここにも書きます。カンマ区切りでないと正常に動作しません。
実際に導入すると、これが以外と便利なのです。
私は今まで PDF と言うとちょっと敬遠気味だったのですが、この Namazu を自分のメインマシンに導入してからは、
素早く、効率良く記事を検索できるので、カナリ重宝しています。
この Namazu を導入を決意した一番の理由は、IDGジャパン Linux WORLD 5月号の付録 CD-ROM に収録されている PDF を検索する為です。
この CD-ROM には 2002年1月〜2002年12月までの記事が全て収録されていると言う、大変優れた CD-ROM です。
この様に非常に有益な CD-ROM を本誌の付録として収録して頂いた IDG ジャパン様には感謝です。