FreeBSD/Namazu

Namazu

ソース:
http://www.namazu.org/index.html.ja

インストール

$ cd /usr/ports/japanese/namazu2
$ make install clean

インストール(ソース)

$ tar zxvf namazu-2.0.19.tar.gz
$ cd namazu-2.0.19
$ ./configure
$ make
# make install

「mknmz」の設定

# cp -p /usr/local/etc/namazu/mknmzrc-sample /usr/local/etc/namazu/mknmzrc
# chmod 644 /usr/local/etc/namazu/mknmzrc
# vi /usr/local/etc/namazu/mknmzrc

# $NKF = "module_nkf";
# $MECAB = "module_mecab";
# $WAKATI = $MECAB;
          ↓「mknmzrc」の編集(編集後) 
$NKF = "module_nkf";
$MECAB = "module_mecab";
$WAKATI = $MECAB;

「namazu」の設定

# cp -p /usr/local/etc/namazu/namazurc-sample /usr/local/etc/namazu/namazurc
# chmod 644 /usr/local/etc/namazu/namazurc
# vi /usr/local/etc/namazu/namazurc
Index        /usr/local/var/namazu/index/root_http/
Template     /usr/local/var/namazu/index/root_http/
Lang         ja

「mknmz」によるインデックスの作成

$ export LANG=ja_JP.eucJP
$ export LC_ALL=ja_JP.eucJP
$ mknmz -O /usr/local/var/namazu/index/test /home/www/http/

「namazu」による全文検索

$ namazu test

Webページからの全文検索

CGIファイルのコピー

$ cp -p /usr/local/libexec/namazu.cgi /home/www/root_http/

「.namazurc」の作成

$ cp -p /usr/local/etc/namazu/namazurc /home/www/root_http/.namazurc

「.namazurc」への追記

Replace  /home/www/root_http  http://www.kishiro.com

フィルタのインストール

ExcelとPowerPoint?形式ファイルをHTMLに変換ツール

# cd /usr/ports/textproc/xlhtml
# make ; make install ; make clean

pdftohtmlのインストール
PDF形式ファイルをHTMLに変換ツール

# cd /usr/ports/textproc/pdftohtml
# make -D WITHOUT_X11 install ; make clean 

wvWareのインストール
Word形式ファイルをHTMLに変換ツール

# cd /usr/ports/textproc/wv
# make -D WITHOUT_X11 install ; make clean

いろいろ

# cd /usr/ports/archivers/unzip
# make install ; make clean

ps2textインストール
http://softpark.jplaza.com/software/freesoft.html

# tar zxvf ps2text-0.4.1.tar.z
# cd ps2text-0.4.1
# vi Makefile
---------------------------------------
GS      = /usr/local/gnu/bin/gs
SED     = /bin/sed
        ↓
GS      = /usr/local/bin/gs
SED     = /usr/bin/sed
---------------------------------------
# make
# make install
# chmod 755 /usr/local/bin/ps2text
# ln -s /usr/local/bin/ps2text /usr/local/bin/ps2ascii

フィルタの一覧

http://www.namazu.org/doc/manual.html#doc-filter

複数のインデックスを作成する場合、更新日・ファイル数・キーワード数の取得スクリプト

構成はこんな感じ

----indexs(テンプレート)
  |
  |--AAA(インデックス1)
  |
  |--BBB(インデックス2)
  |
  |--CCC(インデックス3)

スクリプト

<?php
$index_main="/home/matsui/public_html/indexs/NMZ.head.ja";
$index_master="/home/matsui/public_html/indexs/NMZ.master";
$index[1]="/home/matsui/public_html/indexs/AAA/NMZ.head.ja";
$index[2]="/home/matsui/public_html/indexs/BBB/NMZ.head.ja";
$index[3]="/home/matsui/public_html/indexs/CCC/NMZ.head.ja";
$file_all =0;
$key_all=0;
$tmp=0;

foreach($index as $k => $v){
       exec("grep '<!-- DATE -->' ".$v." |awk '{print $5}'",$arr[date]);
       exec("grep '<!-- FILE -->' ".$v." |awk '{print $4}'",$arr[file]);
       exec("grep '<!-- KEY -->' ".$v." |awk '{print $4}'",$arr[key]);
       $index_date[date][$k] = $arr[date][0];
       $index_date[file][$k] = $arr[file][0];
       $index_date[key][$k] = $arr[key][0];
       unset($arr);
}
for($i=1;$i<=count($index);$i++){
       $file_all += ereg_replace('\,','',$index_date[file][$i]);
       $key_all += ereg_replace('\,','',$index_date[key][$i]);

       if($index_date[date][$i] > $tmp)$date_last = $index_date[date][$i];
}

//echo $file_all."\n";
//echo $key_all;

$file=file($index_master);
$fp = fopen($index_main, "w+");

foreach($file as $val){
  if(ereg('<!-- DATE -->',$val)){
    foreach($index as $k => $v)
        $val = ereg_replace('index_'.$k,$index_date[date][$k],$val);
  }
  if(ereg('<!-- FILE -->',$val)){
    foreach($index as $k => $v)
        $val = ereg_replace('index_'.$k,$index_date[file][$k],$val);
  }
  if(ereg('<!-- KEY -->',$val)){
    foreach($index as $k => $v)
        $val = ereg_replace('index_'.$k,$index_date[key][$k],$val);
  }
  if(ereg('<!-- FILE --> index_file_all <!-- FILE -->',$val))
       $val = ereg_replace('index_file_all',trim($file_all),$val);
  if(ereg('<!-- KEY --> index_key_all <!-- KEY -->',$val))
       $val = ereg_replace('index_key_all',trim($key_all),$val);
  if(ereg('<!-- DATE --> index_date_last <!-- DATE -->',$val))
       $val = ereg_replace('index_date_last',trim($date_last),$val);   
  fwrite($fp,$val);
}
fclose($fp);
?>

NMZ.master

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<!-- LINK-REV-MADE -->
<link rev="made" href="mailto:foobar@namazu.org">
<!-- LINK-REV-MADE -->
<title>Namazu: a Full-Text Search Engine</title>
<style type="text/css"><!--
  strong.keyword { color: Red; }
  p.example      { text-indent: 1em; 
                   color: Navy;
                  font-weight: bold;
                   font-family: monospace; }
  code           { color: Navy;
                   font-family: monospace; }
  code.example   { color: Navy;
                  font-weight: bold;
                   font-family: monospace; }
  code.operator  { color: Navy;
                   font-family: monospace; 
                  font-weight: bold; }
--></style>
</head>
<body lang="ja">
<h1>Namazu による全文検索システム</h1>
<p>
現在、<!-- FILE --> index_file_all <!-- FILE --> の文書がインデックス化され、
<!-- KEY --> index_key_all <!-- KEY --> 個のキーワードが登録されています。
</p>
<p>
</p>
<hr>
<form method="get" action="{cgi}">
<p>
<strong>検索式:</strong> 
<input type="text" name="query" size="40">
<input type="submit" name="submit" value="Search!">
<input type="hidden" name="whence" value="0">
<!-- <input type="hidden" name="idxname" value="foobar"> -->
<a href="{cgi}">[検索方法]</a>
</p>
<p>
<strong>表示件数:</strong>
<select name="max">
<option value="10">10</option>
<option selected value="20">20</option>
<option value="30">30</option>
<option value="50">50</option>
<option value="100">100</option>
</select>
<strong>表示形式:</strong>
<select name="result">
<option selected value="normal">標準</option>
<option value="short">簡潔</option>
</select>
<strong>ソート:</strong>
<select name="sort">
<option selected value="score">スコア</option>
<option value="date:late">日付 (新しい順)</option>
<option value="date:early">日付 (古い順)</option>
<option value="field:subject:ascending">題名 (昇順)</option>
<option value="field:subject:descending">題名 (降順)</option>
<option value="field:from:ascending">著者 (昇順)</option>
<option value="field:from:descending">著者 (降順)</option>
<option value="field:size:ascending">サイズ (昇順)</option>
<option value="field:size:descending">サイズ (降順)</option>
<option value="field:uri:ascending">URI (昇順)</option>
<option value="field:uri:descending">URI (降順)</option>
</select>
</p>
<p>
<strong>検索対象:</strong>
<ul>
<li><input type="checkbox" name="idxname" value="AAA" checked>AAA
 ファイル:<!-- FILE --> index_1 <!-- FILE -->個
 キーワード:<!-- KEY --> index_1 <!-- KEY -->個
 インデックスの最終更新日: <!-- DATE --> index_1 <!-- DATE -->
</li>
<li><input type="checkbox" name="idxname" value="BBB">BBB
 ファイル:<!-- FILE --> index_2 <!-- FILE -->個
 キーワード:<!-- KEY --> index_2 <!-- KEY -->個
 インデックスの最終更新日: <!-- DATE --> index_2 <!-- DATE -->
</li>
<li><input type="checkbox" name="idxname" value="CCC">CCC 
 ファイル:<!-- FILE --> index_3 <!-- FILE -->個
 キーワード:<!-- KEY --> index_3 <!-- KEY -->個
 インデックスの最終更新日: <!-- DATE --> index_3 <!-- DATE -->
</li>
</ul>
</p>
</form>

フォルダ名などの文字化け

windowsの共有フォルダをマウントすると、特定文字「〜」などが「??」で表示される。
mknmzでインデックスが作成できない場合。EUC-JP-MSを使ってみるとよいかも

# mount_smbfs -E euc-jp-ms:cp932 -I 172.16.8.51 //ADMINISTRATOR@TEST-WIN-SERVER/desktop /mnt

EUC-JP-MSを使えるようにする

参考ヒット数を表示しない

テンプレートファイル (NMZ.head もしくは NMZ.head.ja) の Form の中で、

<input type="hidden" name="reference" value="off">

という 1 行を追加すると、参考ヒット数は表示されなくなります。

xlhtmlのバグ

65536行目でセルをマージしてあると無限ループしてしまう。

解消バージョン

http://www.flateight.com/modules/mydownloads/viewcat.php?cid=1

Namazuのxlhtmlのパッチ。(xlhtml-0.5.1にパッチをあてる) (^-^

パッチとxlhtml-0.5.1

$ ll
-rwxr--r--    1 matsui   matsui       5749  6 30 13:45 xlhtml-0.5.1-patch-03
-rwxr--r--    1 matsui   matsui     263933  6 30 13:45 xlhtml-0.5.1.tar.gz
$ tar zxvf xlhtml-0.5.1.tar.gz
$ cd xlhtml
$ patch -p1 < ../xlhtml-0.5.1-patch-03
$ ./configure 
$ make
# make install

・パッチを当てると、デフォルトのものとサイズが変わっている事を確認。

$ ll xlhtml/xlhtml
-rwxrwxr-x    1 matsui   matsui     129772  6 30 14:02 xlhtml/xlhtml
$ ll /usr/local/bin/xlhtml 
-rwxr-xr-x    1 root     wheel      129537  4  6 13:51 /usr/local/bin/xlhtml

参考ページ

kakasi(KAKASI)とchasen(茶筌)とMeCab(和布蕪)の比較ができるサイト
http://nomadscafe.jp/test/keitaiso/index.cgi