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";
! }
}
}
}