namazu-ml(avocado)


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

Re: nmztxt.pl & gcnmz.pl



Rei FURUKAWA <furukawa@xxxxxxxxxxxxxxxx> wrote:

>>> ファイルは1つになったほうがいいですか?
>> できればその方がありがたいです。 @INC とか面倒だし。
>
>やってみました。
>
>nmztxt.pl と gcnmz.pl の 2 つが入っていますが、nmztxt.pl の内容は、
>gcnmz.pl の最後にくっつけてあるので、gcnmz.pl だけで動くと思います。

試しました。

NMZ.t, NMZ.f, NMZ.fi, NMZ.field.* あたりは完全にゴミ掃除できている
ようですが、 NMZ.i, NMZ.ii, NMZ.p, NMZ.pi, NMZ.w あたりは不完全の
ようです。

そんなわけでソースを眺めて適当に修正してみました。軽くテストした感
じでは正常に動いているようです。メイルの末尾にパッチを添付しておき
ます。

# @List の扱いがややこしかったのでハッシュで参照しました。

古川さんのおかげでゴミ掃除機が実現できたので v1.3.0.0 のパッケージ
に添付させていただこうと思います。ありがとうございました。

-- Satoru Takabayashi

*** gcnmz.pl.orig	Tue Oct 13 02:43:31 1998
--- gcnmz.pl	Tue Oct 13 02:46:43 1998
***************
*** 1,5 ****
! #!/usr/local/bin/perl5
  # gcnmz.pl - by furukawa@xxxxxxxxxxxxxxxx
  #
  # namazu v1.3 でできた、無効なエントリのゴミ掃除スクリプト
  #  使い方
--- 1,6 ----
! #!%OPT_PATH_PERL%
  # gcnmz.pl - by furukawa@xxxxxxxxxxxxxxxx
+ #    small modification by satoru@xxxxxxxxxxxxx
  #
  # namazu v1.3 でできた、無効なエントリのゴミ掃除スクリプト
  #  使い方
***************
*** 28,72 ****
      # 現在無効になっているファイル番号を調べる
      print STDERR "checking NMZ.t\n" if !$Quiet;
      if (@List = &nmztxt::dis_list(1)){
!         # データベース -> テキストの変換
!         print STDERR "reading NMZ.f, NMZ.fi\n" if !$Quiet;
!         &nmztxt::flist2txt($TMP_I);
  
!         # テキストの加工 --  該当するファイルを削除
!         &delete_elem($TMP_I, $TMP_O, @List);
  
!         # データベースに書き戻す
!         print STDERR "writing NMZ.f, NMZ.fi, NMZ.r\n" if !$Quiet;
!         &nmztxt::txt2flist($TMP_O);
  
!         # 以下同様に
  
!         # 単語データベース
!         print STDERR "reading NMZ.i\n" if !$Quiet;
!         &nmztxt::word2txt($TMP_I);
  
!         &delete_hit($TMP_I, $TMP_O, @List);
  
!         print STDERR "writing NMZ.i, NMZ.ii, NMZ.h, NMZ.w\n" if !$Quiet;
!         &nmztxt::txt2word($TMP_O);
  
  
!         # フレーズデータベース
!         print STDERR "reading NMZ.p, NMZ.pi\n" if !$Quiet;
!         &nmztxt::phrase2txt($TMP_I);
  
!         &delete_hit($TMP_I, $TMP_O, @List);
  
!         print STDERR "writing NMZ.p, NMZ.pi\n" if !$Quiet;
!         &nmztxt::txt2phrase($TMP_O);
  
!         # NMZ.head に結果を反映
!         print STDERR "editing NMZ.head*\n" if !$Quiet;
!         &nmztxt::nmzhead;
  
!         # NMZ.field.* にも反映
!         print STDERR "editing NMZ.field.*\n" if !$Quiet;
!         &nmztxt::delete_field(@List);
      }
  }
  unlink($TMP_I);
--- 29,73 ----
      # 現在無効になっているファイル番号を調べる
      print STDERR "checking NMZ.t\n" if !$Quiet;
      if (@List = &nmztxt::dis_list(1)){
! 	# データベース -> テキストの変換
! 	print STDERR "reading NMZ.f, NMZ.fi\n" if !$Quiet;
! 	&nmztxt::flist2txt($TMP_I);
  
! 	# テキストの加工 --  該当するファイルを削除
! 	&delete_elem($TMP_I, $TMP_O, @List);
  
! 	# データベースに書き戻す
! 	print STDERR "writing NMZ.f, NMZ.fi, NMZ.r\n" if !$Quiet;
! 	&nmztxt::txt2flist($TMP_O);
  
! 	# 以下同様に
  
! 	# 単語データベース
! 	print STDERR "reading NMZ.i\n" if !$Quiet;
! 	&nmztxt::word2txt($TMP_I);
  
! 	&delete_hit($TMP_I, $TMP_O, @List);
  
! 	print STDERR "writing NMZ.i, NMZ.ii, NMZ.h, NMZ.w\n" if !$Quiet;
! 	&nmztxt::txt2word($TMP_O);
  
  
! 	# フレーズデータベース
! 	print STDERR "reading NMZ.p, NMZ.pi\n" if !$Quiet;
! 	&nmztxt::phrase2txt($TMP_I);
  
! 	&delete_hit($TMP_I, $TMP_O, @List);
  
! 	print STDERR "writing NMZ.p, NMZ.pi\n" if !$Quiet;
! 	&nmztxt::txt2phrase($TMP_O);
  
! 	# NMZ.head に結果を反映
! 	print STDERR "editing NMZ.head*\n" if !$Quiet;
! 	&nmztxt::nmzhead;
  
! 	# NMZ.field.* にも反映
! 	print STDERR "editing NMZ.field.*\n" if !$Quiet;
! 	&nmztxt::delete_field(@List);
      }
  }
  unlink($TMP_I);
***************
*** 94,99 ****
--- 95,101 ----
      $/ = $tmp;
  }
  
+ # bug fix by satoru@xxxxxxxxxxxxx [10/13/1998]
  sub delete_hit{
      local($fi, $fo, @list) = @_;
      local(*FI, *FO);
***************
*** 102,123 ****
      my $tmp = $/;
      $/ = '';
  
      if (open(FI, $fi) && open(FO, ">$fo")){
          while (defined($elem = <FI>)){
              ($word, @hits) = split(/\n/, $elem);
              if (@hits){
-                 print FO "$word\n";
-                 @x = @list;
-                 $x = -1 unless defined($x = shift(@x));
-                 $ndx = 0;
                  for (@hits){
!                     if (/^$x\W/){
!                         $x = -1 unless defined($x = shift(@x));
!                     }else{
!                         print FO "$_\n";
                      }
                  }
!                 print FO "\n";
              }
          }
      }
--- 104,126 ----
      my $tmp = $/;
      $/ = '';
  
+     my %mark; 
+     grep($mark{$_} = 1, @list); # marking with hash
+ 
      if (open(FI, $fi) && open(FO, ">$fo")){
          while (defined($elem = <FI>)){
              ($word, @hits) = split(/\n/, $elem);
+ 	    my $buf = "";
              if (@hits){
                  for (@hits){
!                     /^(\d+)/;
! 		    unless ($mark{$1}) {
!                         $buf .= "$_\n";
                      }
                  }
! 		if ($buf) {
! 		    print FO "$word\n$buf\n";
! 		}
              }
          }
      }