namazu-ml(avocado)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Perl version search program (Re: Tawagoto?)



Rei FURUKAWA <furukawa@xxxxxxxxxxxxxxxx> wrote:

>で、いいかげんな方法を考えてみました。
>
>
>「愛知大学」の先頭と一致する、最長の語を検索すると、「愛知」がヒットす
>るので、残りの「大学」を別の単語として、再検索する。

おお、これは単純かつ現実的な方法ですね。これって KAKASI と相性ぴっ
たりなんじゃないですか、多分。

# 本当のところどうなんでしょう? > 馬場さん


>というわけで、1.1.1.1 の srnmz.c を参考に、perl で書いてみました。

うーん、素晴らしいです。さっそく試してみました。

>#   7  cgi として呼ぶことしか考えていません。

ということなので環境変数を QUERY_STRING="key=html" のようにセット
して RFC を検索するようにコマンドラインから実行してみました。

…ところが

/^html)"/: unmatched () in regexp at
/home/ccsatoru/tmp/uu/pnamazu.cgi line 146, <INDEX> chunk 6.

のようなエラーが出てしまいました。ということで

 sub readindexindex{
     # NMZ.ii の N 番目の語を NMZ.i から読んで返す
 
     my($N) = @_;
     my($BUF);
     seek(INDEX, &indexpointer(*INDEXINDEX, $N), 0);
     $BUF = <INDEX>;
     chop($BUF);
+    $BUF = quotemeta($BUF);
     $BUF;
 }

と修正しました。これは私もよく失敗するミスです :-)。

で、動くようになったので試しに速度を計測してみました。何度も実行し
ているのでディスクの読み込みはすべてキャッシュに入っているはずです。

結果は…

C言語版
  % time namazu . html >/dev/null 
  
  real    0m0.039s
  user    0m0.010s
  sys     0m0.030s

Perl版
  % time perl pnamazu.cgi  >/dev/null 
  
  real    0m0.188s
  user    0m0.140s
  sys     0m0.040s

のようになりました。ほぼ予想通りという感じがします。まずますですね。

# Win32 で実行すると極端に遅くなるのかな…? > 広瀬さん

--
高林 哲 Satoru Takabayashi