1 |
#!/usr/bin/perl -w |
2 |
# -*- Mode: Perl -*- |
3 |
# $Basename: sman $ |
4 |
# $Revision: 1.2 $ |
5 |
# Author : Ulrich Pfeifer |
6 |
# Created On : Fri Aug 30 15:52:25 1996 |
7 |
# Last Modified By: Ulrich Pfeifer |
8 |
# Last Modified On: Fri Dec 29 18:12:57 2000 |
9 |
# Language : CPerl |
10 |
# |
11 |
# (C) Copyright 1996-2000, Ulrich Pfeifer |
12 |
# |
13 |
|
14 |
use strict; |
15 |
|
16 |
use Getopt::Long; |
17 |
use Fcntl; |
18 |
use Config; |
19 |
|
20 |
require WAIT::Config; |
21 |
require WAIT::Database; |
22 |
require WAIT::Query::Base; |
23 |
require WAIT::Query::Wais; |
24 |
|
25 |
my %OPT = (database => 'DB', |
26 |
dir => $WAIT::Config->{WAIT_home} || '/tmp', |
27 |
table => 'mail', |
28 |
pager => $WAIT::Config->{'pager'} || 'more', |
29 |
filter => 0, |
30 |
# max => 60, |
31 |
); |
32 |
|
33 |
GetOptions(\%OPT, |
34 |
'database=s', |
35 |
'dir=s', |
36 |
'table=s', |
37 |
'filter=i', |
38 |
'max=i', |
39 |
'pager:s') || die "Usage: ...\n"; |
40 |
|
41 |
my $db = WAIT::Database->open(name => $OPT{database}, |
42 |
mode => O_RDONLY, |
43 |
directory => $OPT{dir}) |
44 |
or die "Could not open database $OPT{database}: $@"; |
45 |
|
46 |
my $tb = $db->table(name => $OPT{table}) |
47 |
or die "Could not open table $OPT{table}: $@"; |
48 |
|
49 |
# not used: my $layout = $tb->layout; # a WAIT::Parse::Nroff object |
50 |
|
51 |
my($query, @did); |
52 |
|
53 |
my(%hits, $query_text); |
54 |
$query_text = join ' ',@ARGV; |
55 |
eval {$query = WAIT::Query::Wais::query($tb, $query_text)}; |
56 |
if ($@ ne '') { |
57 |
print "$_ => $query\n\$\@='$@'\n"; |
58 |
} elsif (ref($query)) { |
59 |
%hits = $query->execute(top => $OPT{max}, picky => 1); |
60 |
# the hash %hits has as keys document numbers and as values |
61 |
# quality figures. The doc numbers are not what we have as docid |
62 |
# to find the item in the access class, they are WAIT's private |
63 |
# numbers. |
64 |
} |
65 |
|
66 |
exit 1 unless %hits; |
67 |
my $no = 1; # numbering the hits for the result table that is |
68 |
# presented to the user |
69 |
|
70 |
for my $did (sort {$hits{$b} <=> $hits{$a}} keys %hits) { |
71 |
|
72 |
my %tattr = $tb->fetch($did); |
73 |
# the hash %tattr contains several attributes of the item we are |
74 |
# referring to, namely the attributes that we named in the "attr" |
75 |
# argument of the create_table statement in smakewhatis |
76 |
|
77 |
#printf "%2d %6.3f %s\n", $no, $hits{$did}, |
78 |
# substr($tattr{headline} ||'',0,68); |
79 |
#$did[$no] = $did; |
80 |
$tattr{docid} =~ /(.*)\/.overview \d+ \d+$/; |
81 |
printf "Score: %d '%d %s/'\n", |
82 |
$hits{$did} * 100, $tattr{article}, $1; |
83 |
last if $OPT{max} and $no++ >= $OPT{max}; |
84 |
} |
85 |
|
86 |
|
87 |
$tb->close; |
88 |
$db->close; |
89 |
|