K@rl: gesucht: JavaScript Suchmaschine (für CD)

Eine Suchmaschine für eine Site im Internet - kein Problem: das baut man sich mit Perl oder PHP3 oder kauft es sich für eine Hand voll Dollar.

Was aber, wenn eine CD "suchbar" gemacht werden soll? Teure Plugins? -> nicht mein Fall.
Da Ladezeiten bei einer CD kaum eine Rolle spielen ist doch eine Lösung, die Indices und die Sprungziele und das eigentliche Suchprogramm in JavaScript zu implementieren.

Kennt da jemand eine gute Lösung (Produkt, Shareware, Freeware oder gnu wird auch gerne genommen)? Die Lösung müßte halt auch den Aufbau der Indices beinhalten (z.B. durch Parsen des HTML Codes - entweder über Metatags oder speziell ausgezeichnete Textteile).

Ciao
  K@rl

PS: falls jemand eine gute / brauchbare Java Applet Lösung kennt: nur her damit! :-)

  1. Eine Suchmaschine für eine Site im Internet - kein Problem: das baut man sich mit Perl oder PHP3 oder kauft es sich für eine Hand voll Dollar.

    Was aber, wenn eine CD "suchbar" gemacht werden soll? Teure Plugins? -> nicht mein Fall.
    Da Ladezeiten bei einer CD kaum eine Rolle spielen ist doch eine Lösung, die Indices und die Sprungziele und das eigentliche Suchprogramm in JavaScript zu implementieren.

    Kennt da jemand eine gute Lösung (Produkt, Shareware, Freeware oder gnu wird auch gerne genommen)? Die Lösung müßte halt auch den Aufbau der Indices beinhalten (z.B. durch Parsen des HTML Codes - entweder über Metatags oder speziell ausgezeichnete Textteile).

    Es gibt eine JavaScript-Lösung für die vierer Versionen. Mir ist es mittlerweile gelungen auch den Navi davon zu überzeugen eine Volltextsuche über mehrere Seiten durchzuführen.
    Allerdings ist das Script noch nicht offiziell online. Ich bastele noch an der Seite. Für Testzwecke einfach den oben stehenden Link verwenden. Online dauert es aber eine Weile und eventuell klappt erst der zweite Suchvorgang richtig.
    Wenn Interesse besteht, melde dich einfach.

    Viele Grüße

    Antje

    1. Es gibt eine JavaScript-Lösung für die vierer Versionen. Mir ist es mittlerweile gelungen auch den Navi davon zu überzeugen eine Volltextsuche über mehrere Seiten durchzuführen.

      Danke, ich sehe es mir gerade an (das Script werkelt noch .. bin mal auf das Ergebnis gespannt .. ;-)

      Auf die Idee einer °Voll°textsuche bin ich garnicht gekommen. Meine Vorstellung ging eher dahin, daß ich bestimmte daten in HTML speziell auszeichne, also z.B.

      <suchbegriff-xyz>Das kommt in den xyz Index</suchbegriff-xyz>
      <suchbegriff-hugo>Das kommt in den hugo Index</suchbegriff-hugo>
      ... etc.

      und dann ein Programm über die HTML Seiten geht und ein Array zusammenbastelt, in dem dann die Suche Stattfindet - ohne daß die HTML-Seiten selbst angefaßt werden. Quasi mehr eine Verschlagwortung .. oder so ..

      Aber: danke - ich werde mir Deine Lösung mal ansehen.

  2. Hallo K@rl

    Kennt da jemand eine gute Lösung (Produkt, Shareware, Freeware oder gnu wird auch gerne genommen)?

    Wenn du gerne etwas bastelst, dann kannst du dir ja das Folgende mal als Ausgangspunkt nehmen. Ist ein Perlscript, mit dem ich Javascript-basierte Suchen anfertigen kann. Das Script erzeugt die komplette JS-Datei. In der HTML-Datei mit dem Suchformular muss die dann mit <script src...> eingebunden werden. Das Formular muss <form name="Such"> haben, das Eingabefeld fuer den Suchbegriff <input name="Ausdruck"> und der Button zum Starten der Suche <input type="button" ... onClick="Search()">. Wichtig ist bei der hier verwendeten Loesung allerdings, dass die Projektdateien *.htm einem einheitlichen Namensschema folgen, und dass die Inhalte von Tags, die indexiert werden sollen, immer in einer Zeile stehen innerhalb der HTML-Dateien. Aber mit etwas Programmiererei kannst du das alles natuerlich auch anders machen.
    Das Script ist kein CGI-Script, sondern laeuft ganz normal auf Betriebssystemebene, um seinen Dienst zu tun.

    viel Spass ;-)

    #! perl

    $Dir = "/der/pfad/zum/projekt/";
    $Mask = "t*.htm";  /* Dateien t*.htm */
    $Outputfile = "/der/pfad/zum/projekt/srch.js";
    @tags = ("<h1>","<h2>","<p>","<li>","<span>"); /* deren Inhalt wird indexiert */
    @endtags = ("</h1>","</h2>","</p>","</li>","</span>");
    $HTML_before = "<html><head><title>Suchergebnisse</title><link rel="stylesheet" href="style.css" type="text/css"></head><body bgcolor="#F4F4F4" text="#000000" link="#003366" vlink="#002244" alink="#000000"><h1>Suchergebnisse</h1><p><b>'+ j +' Treffer in '+ k +' Themen</b></p><p>";
    $HTML_after = "</p><br> <hr noshade size="1"><span class="footer"><a href="index.htm" target="_parent">Inhalt</a></span></body></html>";
    $pagegif = "<img src="xpage.gif" width="16" height="16" border="0" alt="Thema">";
    @Stoplist = ("[Dd]..","[Dd]ies","[Dd]ies.","[Dd]ies..","[Ee]in","[Ee]in.","[Ee]in..","[Kk]ein","[Kk]ein.","[Kk]ein..","nicht","und","aber","[Ss]ie","sein","ist","sind","werden","[Wwenn]","[Nn]ur","[Ff]ür","[ia][nm]","muß","bei.","[Vv]o[nm]","[Ee][rs]","nach","kann","[Aa]ndere","auch","wird","werden","mit","ohne","als","immer");

    opendir VERZEICHNIS, $Dir;
    @entries = readdir(VERZEICHNIS);
    closedir VERZEICHNIS;
    foreach $entry (@entries) {    
        if($entry =~ /$Mask/) {
             push(@files,$entry);
            }
    }

    open(OUT,">$Outputfile");

    $i = 0;
    $f = 1;
    $fx = 0;
    $x = @files;
    $ = 1;
    print OUT "var db = new Array(";
    foreach $file (@files) {
      if($i == 0) {
        print  OUT "\n"file:$file"";
        print  "verarbeite $file ($f von $x): ";
        $i++;  
      }
      else {
        print  OUT ",\n"file:$file"";
        print  "verarbeite $file ($f von $x): ";
        $i++;  
      }
      $f++;
      @lines = "";
      $pathfile = $Dir.$file;
      open(FILE,"<$pathfile") die "\n$pathfile nicht gefunden\n";
      @lines = <FILE>;
      close(FILE);
      @linewords = "";
      $fi = 0;
      foreach $line (@lines) {
        $openflag = 0;
        if($line =~ /<title>(.*)</title>/) {
            print  OUT ",\n"title:$1"";
        }
        $indexdata = "";
        for($i = 0; $i < @tags; $i++) {
          if($line =~ /$tags$i$endtags[$i]/) {
            $indexdata = $1;
          }
        }
        @linewords = split(/ . , ; /,$indexdata);
        foreach $word (@linewords) {
           $word =~ s/.*@.*//gi;
           $word =~ s/.*.htm//gi;
           $word =~ s/<.*//gi;
           $word =~ s/.*>//gi;
           $word =~ s/[\s(){}[]./":\]//gi;
           foreach $Stopexpr (@Stoplist) {
             $word =~ s/\b$Stopexpr\b//gi;
           }
           if($word ne "") {
              if($i == 0) {
                  print  OUT "\n"$word"";
                  
              }
              else {
                  print  OUT ",\n"$word"";
              }
              $i++;  
              $fi++;  
           }
        }
      }
    print  "$fi\n";
    $fx = $fx + $fi;

    $i = 0;

    }
    print "\n============================================\n$fx Array-Eintraege angelegt\n\n";

    print OUT ");\n\n";
    print OUT "function search() {\n";
    print OUT "j = 0; f = ""; t = "";\n";
    print OUT "var ff = new Array();\n";
    print OUT "var ft = new Array();\n";
    print OUT "var x = document.Such.Ausdruck.value;\n";
    print OUT "for(i=0;i<db.length;i++) {\n";
    print OUT "   if(db[i].indexOf("file:") != -1)\n";
    print OUT "        { f = db[i].substring(5,db[i].length); }\n";
    print OUT "   else if(db[i].indexOf("title:") != -1)\n";
    print OUT "        { t = db[i].substring(6,db[i].length); }\n";
    print OUT "   else if(db[i].indexOf(x) != -1)\n";
    print OUT "        { ff[j] = f; ft[j] = t; j++; }\n";
    print OUT "}\n";
    print OUT "var resultlinks = "";\n";
    print OUT "k = 0;\n";
    print OUT "m = 1;\n";
    print OUT "for(i=0; i<j; i++) { \n";
    print OUT "  if(ff[i+1] == ff[i]) m++;\n";
    print OUT "  else { resultlinks+= '$pagegif <a href="'+ff[i]+'">'+ft[i]+'</a> (<b>'+m+'</b> Treffer)<br>'; k++; m=1; }\n";
    print OUT "}\n";

    $HTML_before =~ s/"/\"/g;

    print OUT "var resulthead = '$HTML_before';\n";
    print OUT "document.clear();\n";
    print OUT "document.open();\n";
    print OUT "document.write(resulthead);\n";
    print OUT "document.write(resultlinks);\n";
    print OUT "document.write('";
    print OUT "$HTML_after');\n";
    print OUT "document.close();\n";
    print OUT "}\n";

    close(OUT);

    viele Gruesse
      Stefan Muenz

  3. Hi K@rl,

    eine weitere Möglichkeit gibts unter http://oase-shareware.org/salz/

    Ciao
        Horst

  4. Kennt da jemand eine gute Lösung (Produkt, Shareware, Freeware oder gnu wird auch gerne genommen)? Die Lösung müßte halt auch den Aufbau der Indices beinhalten (z.B. durch Parsen des HTML Codes - entweder über Metatags oder speziell ausgezeichnete Textteile).

    Hallo K@rl,
    ich verwende als lokale Suchmaschiene eine Lösung von Altavista. [url:http://discovery.altavista.com/] Altavia Discovery dursucht alle angebebenen Datenträger und Dateitypen. Durch ist eine Stichwortsuche können einzelne Dokumente gefunden werden. Leider beachtet Discovery keine Metatags und eignet sich nicht für den Einsatz auf einer CD.