Namazu-users-ja(旧)


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

Re: NMZ.p,NMPZ.i ファイルの構造について



古川と申します。

From: "TAISHI KIYOMINE" <pland@xxxxxxxxxxxxxxxx>
Subject: [namazu-users-ja] NMZ.p,NMPZ.i ファイルの構造について
Date: Sun, 8 Oct 2000 00:42:20 +0900

pland> バイナリ形式をテキスト形式に変換し、どうなっているか
pland> もしわかる方がいたらぜひ教えてください。

インデックスの情報をテキスト出力するスクリプトを書いてみました。
3 行目は、namazu をインストールしたディレクトリに合わせて、変更
してください。

オプション '-h' でヘルプが出ます。

    Usage: nmzview.pl [options] <dir>...
      -h     show this help and exit.
      -f     show file informations.
      -w     show word informations.
      -p     show phrase informations.

オプションを何もつけないと、情報は出ません。

-- 
Rei FURUKAWA 
furukawa@xxxxxxxxxxxx
#! /usr/local/bin/perl5 -w

push(@INC, "/usr/local/share/namazu/pl");
require 'nmzidx.pl';

my $opt_file = 0;
my $opt_word = 0;
my $opt_phrase = 0;

while (@ARGV && $ARGV[0] =~ s/^\-//){
    my $argv = shift(@ARGV);
    while ($argv =~ s/^(.)//){
        my $opt = $1;
        $opt_word = 1 if $opt eq 'w';
        $opt_file = 1 if $opt eq 'f';
        $opt_phrase = 1 if $opt eq 'p';
        &usage, exit if $opt eq 'h';
    }
}

push(@ARGV, '.') unless @ARGV;

while (@ARGV){
    my $dir = shift(@ARGV);

    my $nmz = new nmzidx($dir, 'r');

    print "dir=$dir\n";

    if ($opt_file){
        my $ndx = 0;
        my $nmz_file = $nmz->open_flist;
        if (defined $nmz_file){
            print "-- file information\n";
            while (defined $nmz_file->read(\%list)){
                print "$list{'r'}\n";
                print "  timestamp=$list{'t'}\n";
                for my $key (sort keys %{$list{'field'}}){
                    print "  field.$key=$list{'field'}{$key}\n";
                }
                print "\n";
            }
        }
    }

    if ($opt_word){
        my $word;
        my %list;
        my $ndx = 0;
        my $nmz_word = $nmz->open_word;
        if (defined $nmz_word){
            print "-- word information\n";
            while (defined $nmz_word->read(\$word, \%list)){
                print "$word\n";
                for my $fileno (sort {$a <=> $b} keys %list){
                    print "  file=$fileno, score=$list{$fileno}\n";
                }
                print "\n";
                $ndx++;
            }
        }
    }

    if ($opt_phrase){
        my $phrase;
        my @list;
        my $nmz_phrase = $nmz->open_phrase;
        if (defined $nmz_phrase){
            print "-- phrase information\n";
            for (my $ndx = 0; $ndx < 0x10000; $ndx++){
                next unless defined $nmz_phrase->read(\@list);
                if (@list){
                    printf("%04X:\n", $ndx);
                    for my $fileno (@list){
                        print "  file=$fileno\n";
                    }
                    print "\n";
                }
            }
        }
    }

    $nmz->close;
}

sub usage{
    print(  "Usage: nmzview.pl [options] <dir>...\n"
          . "  -h     show this help and exit.\n"
          . "  -f     show file informations.\n"
          . "  -w     show word informations.\n"
          . "  -p     show phrase informations.\n"
          );
}