/[Semantic-Engine]/EPrints/search.cgi
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /EPrints/search.cgi

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1 by dpavlin, Fri Jun 29 09:08:58 2007 UTC revision 18 by dpavlin, Mon Jul 2 12:55:49 2007 UTC
# Line 11  Line 11 
11  use strict;  use strict;
12  use CGI::Carp qw(fatalsToBrowser);  use CGI::Carp qw(fatalsToBrowser);
13  use Semantic::API;  use Semantic::API;
 use DBI;  
14  use CGI;  use CGI;
15  use Data::Dump qw/dump/;  use Data::Dump qw/dump/;
16  use EPrints;  use EPrints;
17  use Cwd qw/abs_path/;  use Cwd qw/abs_path/;
18    use KinoSearch::Simple;
19    use lib '/home/dpavlin/stem-hr/';
20    use StemHR;
21    
22    my $debug = 1;
23    
24  my $abs_path = abs_path( $0 );  my $abs_path = abs_path( $0 );
25  $abs_path =~ s!/[^/]*$!/!;  #!fix-vim  $abs_path =~ s!/[^/]*$!/!;  #!fix-vim
# Line 23  $abs_path =~ s!/[^/]*$!/!;  #!fix-vim Line 27  $abs_path =~ s!/[^/]*$!/!;  #!fix-vim
27  #############################################################  #############################################################
28  my $COLLECTION = 'EPrints';  my $COLLECTION = 'EPrints';
29  my ( @TERMS, @RESULTS );  my ( @TERMS, @RESULTS );
30  my ( $RESULTS_TO_DISPLAY, $TERMS_TO_DISPLAY ) = ( 10, 10 );  my ( $RESULTS_TO_DISPLAY, $TERMS_TO_DISPLAY ) = ( 20, 20 );
31  #############################################################  #############################################################
32    
33    
# Line 34  my $cgi = new CGI; Line 38  my $cgi = new CGI;
38  my $start = $cgi->param( 'start' ) || 0;  my $start = $cgi->param( 'start' ) || 0;
39  my $query = $cgi->param( 'query' ) || '';  my $query = $cgi->param( 'query' ) || '';
40  my $similar = $cgi->param( 'similar' ) || '';  my $similar = $cgi->param( 'similar' ) || '';
41    my $slogovi = $cgi->param( 'slogovi' ) || '';
42    my $stem = $cgi->param( 'stem' ) || '';
43    my $kino = $cgi->param( 'kino' );
44    
45  my $charset='iso-8859-2';  my $charset='iso-8859-2';
46    
47    my $full_query = $query;
48    $full_query .= " " . EPrints->slogovi( $query ) if ($slogovi);
49    $full_query .= " " . StemHR->stem( $query ) if ($stem);
50    
51  ##############################  ##############################
52  #       Start the HTML output  #       Start the HTML output
# Line 53  print qq|<?xml version="1.0" encoding="$ Line 63  print qq|<?xml version="1.0" encoding="$
63  <body>  <body>
64    <form method="get" action="">    <form method="get" action="">
65      <p>      <p>
66        <input type="text" name="query" value="$query" />        Enter bunch of related terms to documents you are trying to find:
67        <input type="submit" />        <br/><input type="text" name="query" value="$query" size="80">
68          <br/><input type="submit" />
69              |, $cgi->checkbox( -name => 'stem' ), $cgi->checkbox( -name => 'slogovi' ), qq|
70      </p>\n|;      </p>\n|;
71    
72    
# Line 69  if( $query || $similar ) { Line 81  if( $query || $similar ) {
81                                                                     database => "$abs_path/eprints.db",                                                                     database => "$abs_path/eprints.db",
82                                                 collection => $COLLECTION );                                                 collection => $COLLECTION );
83    
84            my $score_ponder;
85    
86      my ($results, $terms);      my ($results, $terms);
87          if ( $query ) {          if ( $query ) {
88          ($results, $terms) = $semantic->semantic_search( $query );          ($results, $terms) = $semantic->semantic_search( $full_query );
89    
90                    my $kino = KinoSearch::Simple->new(
91                            path => 'kinoindex/',
92                            language => 'ru',
93                    );
94    
95                    my $total_hits = $kino->search(
96                            query      => $query,
97                            offset     => 0,
98                            num_wanted => 10,
99                    );
100    
101                    print qq|<div style="width:20%; float:right;">KinoSearch hits $total_hits for $query\n<ol>|;
102                    while ( my $hit = $kino->fetch_hit_hashref ) {
103                            print qq|<li><a href="#id_$hit->{id}">$hit->{title}</a> $hit->{score}</li>\n|;
104                            $score_ponder->{ $hit->{id} } = $hit->{score};
105                    }
106                    print qq|</ol></div>|;
107    
108          } else {          } else {
109          ($results, $terms) = $semantic->find_similar( $similar );          ($results, $terms) = $semantic->find_similar( $similar );
110          }          }
111    
112  warn "results = ",dump( $results );  warn "results = ",dump( $results ) if $debug;
113  warn "terms = ",dump( $terms );  warn "terms = ",dump( $terms ) if $debug;
114                    
115          ##################################          ##################################
116          #       TERM BASED CALCULATIONS          #       TERM BASED CALCULATIONS
117          ##################################          ##################################
118          my @sorted_terms = sort { $terms->{$b} <=> $terms->{$a} } keys %$terms;          my @sorted_terms = sort {
119                    my ( $sb, $sa ) = ( $terms->{$b}, $terms->{$a} );
120                    $sb *= $score_ponder->{$b} if $score_ponder->{$b};
121                    $sa *= $score_ponder->{$a} if $score_ponder->{$a};
122                    $sb <=> $sa;
123            } keys %$terms;
124          my @top_terms = splice( @sorted_terms, $start, $TERMS_TO_DISPLAY );          my @top_terms = splice( @sorted_terms, $start, $TERMS_TO_DISPLAY );
125            
126    warn "top_terms = ", dump( @top_terms ) if $debug;
127    
128            print "<p>Full query: $full_query</p>\n";
129          print "<p>Related Terms: ". ( join ", ", @top_terms ) ."</p>\n";          print "<p>Related Terms: ". ( join ", ", @top_terms ) ."</p>\n";
130          print "<hr />\n";          print "<hr />\n";
131    
# Line 98  warn "terms = ",dump( $terms ); Line 139  warn "terms = ",dump( $terms );
139      my @sorted_results = sort { $results->{$b} <=> $results->{$a} } keys %$results;      my @sorted_results = sort { $results->{$b} <=> $results->{$a} } keys %$results;
140          my @display_results = splice( @sorted_results, $start, $RESULTS_TO_DISPLAY );          my @display_results = splice( @sorted_results, $start, $RESULTS_TO_DISPLAY );
141                    
142  warn dump( @display_results );    warn "display results = ", dump( @display_results ) if $debug;
143                    
144          ##################################          ##################################
145          #       Access the storage engine to          #       Access the storage engine to
146          #       retrieve the title and text          #       retrieve the title and text
147          ##################################          ##################################
148          my $i = 1 + $start;          my $i = 1 + $start;
149          print $semantic->paginate( "?query=$query;similar=$similar", $start, scalar keys %$results, $RESULTS_TO_DISPLAY);          print $semantic->paginate( "?query=$query;similar=$similar;stem=$stem;slogovi=$slogovi", $start, scalar keys %$results, $RESULTS_TO_DISPLAY);
150          foreach my $id ( @display_results ){          foreach my $id ( @display_results ){
151                  EPrints->id( $id );                  EPrints->id( $id );
152          print "<p>$i. <b>", EPrints->lookup( 'title' ), "</b> <em>", sprintf("%.2f",$results->{$id}), "</em> <a href=\"?similar=$id\">similar</a></p>\n";                  print "<p><a name=\"id_$id\"/>$i. <b>", EPrints->lookup( 'title' ), "</b>";
153          print "<p>";                  print "| score: <em>", sprintf("%.2f",$results->{$id}), "</em> | id: $id | <a href=\"?similar=$id\">similar</a> | ";
154                    my ($type,$uri) = EPrints->fulltext;
155                    print qq|<a href="$uri">$type</a>|;
156                    print "</p>\n";
157                    print "<p>";
158  #               print $semantic->summarize($id);  #               print $semantic->summarize($id);
159                    print "</p><p>Keywords: ", EPrints->lookup('keywords'), "</p><p>";
160                  print "<small>", EPrints->lookup('abstract'), "</small>";                  print "<small>", EPrints->lookup('abstract'), "</small>";
161                  print "</p>\n";                  print "</p>\n";
162          $i++;                  $i++;
163          }          }
164    
165  }        }      

Legend:
Removed from v.1  
changed lines
  Added in v.18

  ViewVC Help
Powered by ViewVC 1.1.26