Current Path : /usr/local/bin/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //usr/local/bin/adnmz |
#! /usr/local/bin/perl -w # -*- Perl -*- # adnmz.pl - make NMZ.field.adjacency # $Id: adnmz.in,v 1.1.4.4 2005/09/24 12:25:07 opengl2772 Exp $ # # Copyright (C) 2001 Hajime BABA All rights reserved. # Copyright (C) 2001-2005 Namazu Project All rights reserved. # This is free software with ABSOLUTELY NO WARRANTY. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either versions 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA # # This file must be encoded in EUC-JP encoding # package adnmz; use strict; use Cwd; use File::Spec; my $PKGDATADIR = $ENV{'pkgdatadir'} || "/usr/local/share/namazu"; push(@INC, $PKGDATADIR . "/pl"); require 'nmzidx.pl'; my $backup; while (@ARGV && $ARGV[0] =~ s/^\-//){ my $argv = shift; &usage, exit if $argv eq '-help'; $backup = 0, next if $argv eq '-no-backup'; while ($argv =~ s/^(.)//){ $backup = 0 if $1 eq 'b'; } } if (@ARGV){ for my $argv (@ARGV){ $argv =~ s/NMZ$// unless -d $argv; $argv = '.' if $argv eq ''; &adnmz($argv, $backup); } }else{ &adnmz('.', $backup); } exit(0); # read NMZ.field.link, and make NMZ.field.adjacency sub adnmz { my ($dir, $backup) = @_; if (! -f "$dir/NMZ.i") { print "Cannot open index. : $dir\n"; return; } # pretreatment: read NMZ.r, then make %docid and $ndoc. my (%docid, $ndoc); my $nmzr = new nmzidx($dir, 'r'); my $fr = $nmzr->open_flist; my %list_f; $ndoc = 0; while (defined $fr->read(\%list_f)){ my $file_name = $list_f{'r'}; $docid{$file_name} = $ndoc + 1; # NOTE: DocID begins with 1. $ndoc++; } $nmzr->close; # Body: read NMZ.field.link, pick up of destination IDs using %docid, # then write IDs list to NMZ.field.adjacency. my $nmzi = new nmzidx($dir, 'r'); my $fi = $nmzi->open_field('link'); my $nmzo = new nmzidx($dir, 'w'); my $fo = $nmzo->open_field('adjacency'); while (defined (my $line = $fi->{'link'}->getline())){ chop($line); # important !!! # print "@@ $line\n"; my @destid; # destination IDs from page_i to page_j my @href = split(/ /, $line); foreach my $h (@href) { next if ($h =~ /^http:/); # consider with internal link only if (defined $docid{$h}) { push(@destid, $docid{$h}); next; } } { # uniq and numerical sort my %count; @destid = grep(!$count{$_}++, @destid); @destid = sort {$a <=> $b} @destid; } my $links = join(" ", @destid); $fo->{'adjacency'}->putline("$links\n"); } $nmzo->replace_db($backup); $nmzi->close; } sub usage{ print ("Usage: adnmz [options] <target(s)>\n" . " --help show this help and exit.\n" . " -b, --no-backup do not backup original file.\n" ); } # EOF