Avatar billede le_bon Nybegynder
21. maj 2004 - 11:53 Der er 1 løsning

Fjerne bestemte ord i søgeresultat?

Hola!

Jeg har en søgefunktion (sådan en cgi-søgemaskine der indexerer sitet).

Søgeresultaterne vises med et udsnit af den fundne side, altså de første 30 ord eller lign. Problemet er, at i blandt de første ord er ord som "Print", "Back", "mmLoadMenus();", som jo ikke har noget med indholdet af siden at gøre. Herunder er cgi-scriptet, er der en der kan knuse problemet?

#!/usr/bin/perl

#################################################################
# DO NOT EDIT THIS FILE - SEE README.TXT FOR SETUP INSTRUCTIONS #
#################################################################

print "Content-type: text/html\n\n";

$len  = $ENV{'CONTENT_LENGTH'};

if ($ENV{'REQUEST_METHOD'} eq "POST") {
  read(STDIN, $query, $len);

} else {
  $query = $ENV{'QUERY_STRING'};

}

for (split(/\&/, $query)) {
  next if (!$_);
  tr/+/ /;
  s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  s/\r//g;
  ($a, $b) = split(/=/);
  $FORM{$a} = $b;

}

open (FILE, "searchindex.dat") or &medie ("Can't open searchindex.dat - reason: $!");
@index = <FILE>;
close (FILE);

$searchwords = $FORM{'Q'};

$searchwords =~ s/[\|\\\/\!\@\#\$\%\^\&\*\(\)\[\]\{\}\;\:\'\"\+\=\-\_\?\.\,]//isg;

if (!$FORM{'X'}) {
  $searchwords =~ s/\s+/\|/sg;
}

for ($i = 0; $i < @index; $i++) {

  next if (!$index[$i]);
  $ok = 0;
  ($URL, $title, $description, $keywords) = split (/\|\%\%\|/, $index[$i]);

  if ($searchwords) {
      if ($FORM{'E'}) {
        $ok = 1 if ($keywords =~ /\b(?:$searchwords)\b/i);
      }

      $ok = 1 if ($title =~ /\b(?:$searchwords)\b/i);

  }

  if ($ok) {
      $found++;

      if (($FORM{'S'} < $found) and ($found <= $FORM{'S'} + 10)) {
        $description =~ s/\b($searchwords)\b/<b>$1<\/b>/isg;
        $title =~ s/\b($searchwords)\b/<b>$1<\/b>/isg;
        $result .= "<H5>$found - <a href=\"$URL\">$title</H5></a> - $description\n<br><br>\n";

      }

  }

  if ($found == $FORM{'S'} + 11) {
      $next = $FORM{'S'} + 10;
      $found--;
      last;
  }

}

$start = $FORM{'S'} + 1;

if (!$found) {
  $result = "No results found.\n<br><br>\n";

} else {
  $result = "Showing results $start through $found\n<br><br>\n$result";

}

if ($FORM{'S'}) {
  $prev = $FORM{'S'} - 10;
  $prev = 0 if ($prev < 0);
  $link = qq(<a href="search.cgi?Q=$FORM{'Q'}&E=$FORM{'E'}&X=$FORM{'X'}&S=$prev">&lt; &lt; Prev</a>);

}

$link .= " | " if (($FORM{'S'}) and ($next));

$link .= qq(<a href="search.cgi?Q=$FORM{'Q'}&E=$FORM{'E'}&X=$FORM{'X'}&S=$next">Next &gt; &gt;</a>\n) if ($next);

open (TEMP, "results.html") or &medie ("Can't open results.html - reason: $!");
$template = join ('', <TEMP>);
close (TEMP);




$template =~ s#<!-- KEYWORDS -->#$FORM{'Q'}#sg;
$template =~ s#<!-- RESULTS -->#$result$copy#sg;
$template =~ s#<!-- LINK -->#$link#sg;

print "$template";

sub medie {

my $message = shift;
print <<DEATH;
<html>
<head>
<title>Script Error</title>
</head>
<body>
<ul><b>Script Error</b>
<br><br>
$message
<br><br>
Make sure the required files are in the same directory as this script and are accessible by
the script.
</ul>
</body>
</html>
DEATH

}

exit 1;
Avatar billede le_bon Nybegynder
03. juni 2004 - 13:44 #1
buhu...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester