Sandra: HTML-Anwendung mit Suche auf CD-Rom

Hallo liebes Forum.

Ich habe eine kleine Frage zu einem Projekt, das ich für die Uni abzugeben habe. Es geht darum, dass ich im Rahmen des englischsprachigen Studiengangs ein Wörterbuch auf CD-Rom mit den wichtigen englischen Begriffen und entsprechenden Übersetzungen samt Definitionen für meine Mitstudenten erstellen darf.
Ich denke, ein "Wörterbuch" auf HTML-Ebene bietet sich an, da dies ja doch bestimmt die einfachste Lösung ist und ich mich mit Webprogrammierung ein wenig auskenne.
Sollte ich dieses Projekt auf einen Server stellen dürfen, wäre mir alles klar. Ich würde je nach Server die PHP, Perl, JSP oder sonstigen Skripte online laufen lassen. Ich frage mich jetzt aber, wie ich dies auf einer CD-Rom funktionieren könnte. Ein Freund erzählte mir etwas von der Möglichkeit, MYSQL als Anwendung auf der CD-Rom laufen zu lassen. Ich verstehe aber nicht, wie das gemeint ist und konnte auch nichts dazu finden.
Die Datenstruktur ist natürlich sehr einfach. Theoretisch könnten alle 3 Informationen (Deutsch, Englisch, Definition) in eine Tabelle gepackt werden, da eine Übersetzung ausreicht.
Hat jemand eine Idee, wie dies auf CD-Rom zu realisieren wäre?

Vielen Dank schon einmal im Voraus!

Lieber Gruß

Sandra

  1. Moin,

    Hat jemand eine Idee, wie dies auf CD-Rom zu realisieren wäre?

    Zu diesem Thema gab es neulich schonmal einen Thread. Vielleicht findest du da auch was:
    http://forum.de.selfhtml.org/archiv/2005/1/t98825/#m602818

    Grüße aus Hamburg
    Michel

    --
    Ein Problem ist halb gelöst, wenn es klar formuliert ist. (John Dewey)
  2. Moin,

    viele Wege führen nach Rom, zwei mögliche wären :

    Pack deine Daten in eine dreispaltige csv-Datei, die du mit dem Tabular Data Control des MSIE darstelltst und durchsuchst.

    http://de.selfhtml.org/dhtml/modelle/datenanbindung.htm#tdc

    Funktioniert sehr schön bis zu einigen hundert Datensätzen. Nachteil: nur Lesezugriff, MSIE-only

    Oder schau dir offline Suchmaschinen an z.B.

    http://www.wrensoft.com/zoom/index.html

    gruß mipu

    1. Vielen Dank für die Tips! Zoom scheint ja ein gutes Tool zu sein. Wobei das Tool ja eher dafür gedacht ist, eine Website zu indexieren und diesen Inhalt dann zu durchsuchen, oder? Die MSIE Lösung ist natürlich auch schön, aber etwas sehr eingeschränkt.
      Hmm, hat jemand noch mehr Tips oder habe ich noch nicht alle Möglichkeiten von Zoom erkannt?

  3. Hi,

    Ich habe eine kleine Frage zu einem Projekt, das ich für die Uni abzugeben habe. Es geht darum, dass ich im Rahmen des englischsprachigen Studiengangs ein Wörterbuch auf CD-Rom mit den wichtigen englischen Begriffen und entsprechenden Übersetzungen samt Definitionen für meine Mitstudenten erstellen darf.

    Frage: wieviel ist das?
    Wenn das nur die Fachwörter sind: lade einfach eine CSV-Datei als Javascript bzw statt CSV gleich ein fertiges JS-Array.

    Wenn es ein mehr oder weniger vollständiger Wortschatz mit über 100.000 Stichworten ist wird es etwas aufwendiger, aber nicht viel. Du kannst immer noch wie oben angeführt verfahren, jedoch nach vorheriger Siebung des Suchwortes, meinetwegen alphabetisch, und entspr. Teilung der JS-Dateien.
    Bei einem Wort mit Anfang 'a' halt a.js laden, bei Anfang 'b' b.js laden usw.

    Das gleiche ohne Javascript:
    Bastel einen Frame, der eine alphabtische Liste mit Silbenanfängen/Anfangsbuchstaben enthält und verlinke sie entspr auf die Teillisten des Wörterbuches (die hier als HTML ausgeführt sind). Suche erfolgt dann über die eingebaute Browsersuche

    Das gleiche ohne Javascript und ohne Frames:
    Ist wie oben nur ohne Frames. Haha, ja schon gut, blöd formuliert ;-) Der Sucher muß dann halt immer zurück gehen, wenn er neu suchen möchte.

    Oder Du bastelst Dir eine Kleinigkeit in Java.

    Wenn Deine Kommilitonen alle Windows fahren, würde ich die erste Variante vorziehen, da dann davon auszugehen ist, das alle Javascript eingeschaltet haben. Beim Mac würde ich vorher nachschauen, ob auch alle MacOS-X fahren, denn nur beim eingebautem Browser da funktioniert DOM gut.

    so short

    Christoph Zurnieden

    1. Es handelt sich nur um 300 bis 400 Wörter. Da dürfte das Aufsplitten nicht nötig sein.
      Kannst du mir noch sagen, was du meinst mit

      Wenn das nur die Fachwörter sind: lade einfach eine CSV-Datei als >>Javascript bzw statt CSV gleich ein fertiges JS-Array.

      ?
      Ich habe für das Studium schon einige Sachen mit Javascript gebastelt, kann mich aber nicht an das Laden von CSV-Dateien erinnern. Wie funktioniert das? Gibt es gute Dokumentationen darüber?

      Vielen Dank schon einmal für deine Hilfe!

      Gruß
      Sandra

      1. Hi,

        Es handelt sich nur um 300 bis 400 Wörter. Da dürfte das Aufsplitten nicht nötig sein.

        Es geht hier nicht um die Wortanzahl, Herr Kollege, sondern um die Masse insgesamt. Das mögen zwar nur 300 Worte sein, aber wenn die Definitionen lang sind und auch dort gesucht werden soll kann man da auf die Schnauze fallen. Man kann modernen Browsern zwar viel zumuten, aber bei mehr als ca 500 kib könnte der eine oder andere schlapp machen (möcht' hier keine Namen nennen ;-); selbst wenn nicht würde der Rechner stark belastet. Fällt bei bei den modernen GHz-Boliden wahrscheinlich nicht auf, aber ich weiß ja nicht, wie Deine Kommilitonen ausgestattet sind.

        Kannst du mir noch sagen, was du meinst mit

        Wenn das nur die Fachwörter sind: lade einfach eine CSV-Datei als >>Javascript bzw statt CSV gleich ein fertiges JS-Array.

        ?
        Ich habe für das Studium schon einige Sachen mit Javascript gebastelt, kann mich aber nicht an das Laden von CSV-Dateien erinnern. Wie funktioniert das?

        Einfach in ein IFrame laden und per Javascript parsen.

        Gibt es gute Dokumentationen darüber?

        Ähh ... ah, doch:http://developer.apple.com/internet/webcontent/iframe.html

        Hier im Archiv dürfte darüber aber auch einiges zu finden sein, das habe ich schon des öfteren einmal diskutiert gesehen.

        Wenn es wirklich so wenig, wie oben angegeben sind, würde ich das aber direkt in ein Javascript-Array laden:

        myArray = new Array(
          "wort1|wort2|definition",
        );

        Du kannst auch mehrdimensionale Arrays benutzen (ist einfacher und läßt sich etwas schneller durchsuchen), die kannst Du aber leider nicht direkt erzeugen, sondern mußt das nach und nach machen:

        myArray    = newArray(Anzahl); // Anzahl muß nicht mitgegeben werden, ist dann aber leichter für den JS-Interpreter.

        myArray[0] = new Array("wort1","wort2","definition1");
        myArray[1] = new Array("wort3","wort4","definition2");
        myArray[2] = new Array("wort5","wort6","definition3");
        ...

        Es gibt hier einen Featureartikel darüber. Etwas anders gelöst aber im Grunde doch ziemlich gleich. Vor allem in der Problemstellung.

        Was Du wahrscheinlich noch brauchst ist eine binäre Suche in Javascript.

        Die Variable "lang" stellt hier den Zähler für das dreiteilige Unterarray:"Wort1,Wort2,Definition". Nicht vergessen: Arrays zählen ab 0, also ist "Wort1" auch Nummer 0!

        function binSearch(needle, haystack, lang){

        var low          = 0;
          var middle       = 0;
          var high         = haystack.length -1;

        var round        = 0;

        while(low <= high){
            round++;
            middle = Math.floor((low + high)/2);
            if(needle < haystack[middle][lang])
              high = middle - 1;
            else if (needle > haystack[middle][lang])
              low = mid + 1;
            else
               return middle;
          }
          return -1;
        }

        Vorsicht: ungetestet! (Aber in C hat's zumindest so funtkioniert ;-)

        Wenn Du das Array derart gestaltest mußt Du da im schlimmstem Falle dreimal durch, wenn auch jedesmal nur mit O(log(n)). Du kannst auch ein assoziatives Array nehmen, aber da müßtest Du Dich entscheiden, welche Abteilung am meisten gesucht wird. Da in den Definitionen wohl eher selten gesucht wird, dürfte das "wort1" bzw "wort2" sein. Wenn es insgesamt jedoch _wirklich_ wenig Masse ist, könntest Du auch einfach zwei assoziative Arrays anbieten. Bezweifele aber einen deutlich spürbaren Effekt, da müßte die Kiste schon ziemlich lahm sein.

        Ein Problem gibt es bei all dem noch: falsch geschriebene Worte und Suche mit regulären Ausdrücken (nein, ist im Endeffekt wirklich nur _ein_ Probem ;-). Das dürfte schwierig einzubauen sein wenn man auf die binäre Suche nicht verzichten möchte.

        so short

        Christoph Zurnieden

        1. Ich werde wohl den Weg mit dem mehrdimensionalen Array versuchen. Das Unklarheiten hätte ich aber noch:
          Gibt es eine einfache Möglichkeit, aus der Excel-Datei mit den Vokabeln die benötigten Arrays
          myArray[0] = new Array("wort1","wort2","definition1");
          myArray[1] = new Array("wort3","wort4","definition2");
          myArray[2] = new Array("wort5","wort6","definition3");

          automatisch erstellen zu lassen? Händisch wird das ja etwas aufwändig.

          2. Frage:
          Kannst du mir gerade noch die Funktion binSearch erklären? Ich werde nicht ganz schlau aus der. Was sollen die drei Parameter, die an die Funktion zu übergeben sind? Ist der Haystack einfach der Array myArray?

          Gruß
          Sandra

          1. Hi,

            Ich werde wohl den Weg mit dem mehrdimensionalen Array versuchen.

            Ja, wäre auch mein Weg, ist am einfachsten zu implementieren.
            (das ist natürlich meine Meinung, die nicht unbedingt jeder teilen mag ;-)

            Das Unklarheiten hätte ich aber noch:
            Gibt es eine einfache Möglichkeit, aus der Excel-Datei mit den Vokabeln die benötigten Arrays
            myArray[0] = new Array("wort1","wort2","definition1");
            myArray[1] = new Array("wort3","wort4","definition2");
            myArray[2] = new Array("wort5","wort6","definition3");

            automatisch erstellen zu lassen? Händisch wird das ja etwas aufwändig.

            Mit Sicherheit via VB, aber da bin ich kein Spezialist drin.
            Wenn Du Zugriff auf Perl hast (gibt's ja schließlich auch für Windows, also bist Du nur entschuldigt, wenn Du nur maximal ein Modem hast und keine Flatrate. Aber normalerweise ist der Admin eures Uni-Netzes so nett und brennt Dir Activeperl auf CD wenn Du ihn freundlich fragst.) exportiere die Excel-Datei nach CSV (Vorsicht bei Kommas z.B. in der Definition!)

            (Das ist _eine_ Zeile!)
            perl -F',' -lane 'print "myArray[] = new Array(".
                               ""$F[0]",".
                               ""$F[1]",".
                               ""$F[2]");"."\n"' datei.csv >> array.js

            Die Nummern in myArray[] dann selber eintragen oder den Perlcode oben entspr ändern. Vielleicht hast Du ja Glück und es liest jemand hier mit, der sich in VB auskennt oder Perl so gut beherrscht, das er das Dateihandling einfach so runterschreibt (ich habe erst heute Abend wieder Zeit. Wenn Dir das reicht und sonst keiner da war, liefere ich das dann noch nach.).

            1. Frage:
              Kannst du mir gerade noch die Funktion binSearch erklären? Ich werde nicht ganz schlau aus der. Was sollen die drei Parameter, die an die Funktion zu übergeben sind? Ist der Haystack einfach der Array myArray?

            Ja. Und zwar der vollständige. "needle" ist das Wort, das Du suchst und "lang" die Position im Subarray: wenn Du z.B. das Subarray derartig hast ("englisches Wort","deutsches Wort", "Definition"), dann sucht binSearch("waffle",myArray,1) nach dem englischem Wort "waffle" und spuckt die erste gefundene Position aus. Steht da ("waffle","Waffel","Gebäck;wird gerne mit Sahne und heißen Kirschen gegessen") dann hast Du nach
            found = myArray[binSearch("waffle",myArray,1)];
            diese Zeile (als Array!) in der Variable found bzw -1 falls nix gefunden wurde.

            Hast Du das einmal laufen, ist es kein Problem es zu erweitern.

            so short

            Christroph Zurnieden

            1. Hi,

              Die Nummern in myArray[] dann selber eintragen oder den Perlcode oben entspr ändern. Vielleicht hast Du ja Glück und es liest jemand hier mit, der sich in VB auskennt oder Perl so gut beherrscht, das er das Dateihandling einfach so runterschreibt (ich habe erst heute Abend wieder Zeit. Wenn Dir das reicht und sonst keiner da war, liefere ich das dann noch nach.).

              Da der Termin flach fiel:

              (Auch hier wieder : alles _eine_ Zeile! Oder halt in eine Datei als "richtiges" Perlscript, da die Kommandozeile bei Windows eher besch...eiden ist)
                perl -e
                  'my $cvsfile = shift;
                   my $output  = shift;
                  open(FILE, $cvsfile);
                  open(OUT, ">>$output");
                  $i = 0;
                  while(defined (my $line = <FILE>)){
                  $line =~ y/\n//d;
                  @ar=split(/::/,$line);
                  printf OUT "dict[".$i++."] = new Array(".""$ar[0]",".
                                              ""$ar[1]",".
                  ""$ar[2]");"."\n"}'
               datei.csv output.js

              so short

              Christroph Zurnieden

              1. Besten Dank für die Hilfe!
                Nach 2 Stunden Rumprobieren klappt das jetzt alles vorzüglich!

                Viele Grüße

                Sandra