BeSch: Offline Suchmaschine für HTML-Paket

Hallo!

Ich möchte ein Tutorialpaket aus HTML-Seiten veröffentlichen, und der Benutzerfreundlichkeit halber eine offline Suchmaschine einbauen. Ich habe das Forum schon durchgesehen, aber keine Lösung gefunden. Hat irgendwer eine Idee wie ich eine VOLLTEXT Suchmaschine für den Endanwender einbauen kann, ohne keywords angeben zu müssen bzw. auf serverseitige Skripte wie cgi oder php zurückzugreifen?

So etwas ähnliches wie bei der Download-Version von SelfHTML wäre da hilfreich.

Danke im Vorhinein!

Bernhard

  1. Hi,

    Ich möchte ein Tutorialpaket aus HTML-Seiten veröffentlichen, und der Benutzerfreundlichkeit halber eine offline Suchmaschine einbauen.

    Ja, das ist löblich. Aber ...

    Ich habe das Forum schon durchgesehen, aber keine Lösung gefunden.

    Das wurde schon öfter diskutiert hier. Eine richtige Lösung wurde da nie gefunden. Deine Suche war also insofern durchaus erfolgreich. Leider.

    Hat irgendwer eine Idee wie ich eine VOLLTEXT Suchmaschine für den Endanwender einbauen kann, ohne keywords angeben zu müssen bzw. auf serverseitige Skripte wie cgi oder php zurückzugreifen?

    Per IFRAME alle Dateien einzeln laden und durchsuchen (in jede Datei muß dabei eine Suchefunktion rein, da das andersrum ja nicht funktioniert). Je nach Umfang des Paketes dürfte das einige Zeit dauern.

    So etwas ähnliches wie bei der Download-Version von SelfHTML wäre da hilfreich.

    Was gefällt Dir daran genau nicht? Nein, ernsthafte Frage! Ist es nur der Umstand, das dort mit einem Inverted Index gearbeitet wurde? Und wenn ja: warum? Was noch?

    so short

    Christoph Zurnieden

    1. Was gefällt Dir daran genau nicht? Nein, ernsthafte Frage! Ist es nur der Umstand, das dort mit einem Inverted Index gearbeitet wurde? Und wenn ja: warum? Was noch?

      Ich meinte damit nicht, dass mir die SelfHTML Suchmaschine in irgendeiner Weise nicht gefällt, sondern dass die für mich angepasste Suchengine wahrscheinlich etwas anders sein müsste (nur vom Erscheinungsbild).

      Was genau bedeutet das, dass mti Inverted Index gearbeitet wurde? Ich habe mir bereits das Javascript der SelfHTML offline Suche angesehen, nur noch nicht viel Zeit darin investiert, daher hab ich noch nicht wirklich den Überblick.

      1. Hi,

        Ich meinte damit nicht, dass mir die SelfHTML Suchmaschine in irgendeiner Weise nicht gefällt, sondern dass die für mich angepasste Suchengine wahrscheinlich etwas anders sein müsste (nur vom Erscheinungsbild).

        Naja, wie Du das Erscheinungsbild bastelst bleibt natürlich Dir überlassen, das hat jetzt nichts mit dem Problem zu tun, oder stört Dich die Lizenz?

        Was genau bedeutet das, dass mti Inverted Index gearbeitet wurde?

        Hört sich doll an, ist aber ganz simpel:
        Dur klapperst alles Dateien ab, sammelst die darin vorhandenen Wort (behandelst die etwas, z.B. durch tolower(), Stemming o.ä.) und packst alles in eine einzige Liste, in der für jedes Wort das Vorkommen aufgelistet wird. Beispiel:

        Datei eins:
        "Hallo Erde!"

        Datei zwei:
        "Hallo Mond?"

        Inverted-Index-Datei:
        erde: eins
        hallo: eins, zwei
        mond: zwei

        Wenn jetzt z.B. der Suchbegriff "Mond" eingegeben wurde, wird der Inverted-Index nach diesem Wort durchsucht (Das Wort muß natürlich genau so behandelt werden, wie der InvInd erstellt wurde! Hier: tolower()) und in der Spalte drei gefunden. Rechts neben dem Wort stehen alle Dateien, in denen das Wort vorkommt, hier ist es nur eine Datei:"zwei". Ausgabe also "zwei". Suchbegriff: "Hallo", Ausgabe: "eins, zwei". Suchbegriff: "Grmblfz", Ausgabe:"".

        Alles klar soweit?

        Diese Suche ist zwar sehr schnell, hat aber einige offensichtliche Einschränkungen. Nichts ist eben umsonst ;-)

        Es kommt ziemlich auf die Größe Deines Tutorials an, welche Methode (ja, es gibt da noch so einige) anzuwenden ist. Wieviele Dateien hat es denn und wie groß sind die im Schnitt?

        so short

        Christoph Zurnieden

        1. Hi Christoph,

          nur zur Ergänzung:

          Dur klapperst alles Dateien ab, sammelst die darin vorhandenen Wort (behandelst die etwas, z.B. durch tolower(), Stemming o.ä.) und packst alles in eine einzige Liste, in der für jedes Wort das Vorkommen aufgelistet wird.

          Mit dem Suchwort "tokenizer" findet der Ausgangsposter leicht vorgefertigte Tools zur Erzeugung der Wortlisten.

          Viele Grüße
          Mathias Bigge

          1. Danke für den Tip!

          2. Hi,

            Mit dem Suchwort "tokenizer" findet der Ausgangsposter leicht vorgefertigte Tools zur Erzeugung der Wortlisten.

            Naja, so ein Dingen hätte ich ihm auch noch geschenkt, wenn er nett gefragt hätte, sowas liegt hier immer rum ;-)

            Aber der Hinweis ist nicht schlecht und ich möchte ihn noch erweitern: Wenn man das für eine ganze CD/DVD mit verschiedensten Textformaten (HTML, Word, PDF, wwi) machen möchte (dann zwar eher in Java denn in Javascript, klar, aber die Wortlisten muß man ja trotzdem haben) sollte man eine der gängigen regulären Suchmaschinen bemühen. Nein, nicht Google, Yahoo oder wie sie alle heißen mögen, sondern die dahinterstehende Technik. Einfach mal bei http://freshmeat.net oder http://sourceforge.net/ nachschauen (estraier, swish-e ...). Die schreiben zwar meist in eine DB, aber das sollte ja kein Hinderungsgrund sein.

            so short

            Christoph Zurnieden

            1. Hi Christoph,

              Naja, so ein Dingen hätte ich ihm auch noch geschenkt, wenn er nett gefragt hätte, sowas liegt hier immer rum ;-)

              *g*

              Die schreiben zwar meist in eine DB, aber das sollte ja kein Hinderungsgrund sein.

              Nein, auch zur Bearbeitung der Wortlisten ist ein DBMS sehr hilfreich. Viele Datenbanksysteme liefern solche Tools sogar mit. Ich erinnere mich gern noch an den inkrementellen Tokenizer von Clipper, man, war der flott.

              Viele Grüße
              Mathias Bigge

              1. Hi,

                Nein, auch zur Bearbeitung der Wortlisten ist ein DBMS sehr hilfreich. Viele Datenbanksysteme liefern solche Tools sogar mit. Ich erinnere mich gern noch an den inkrementellen Tokenizer von Clipper, man, war der flott.

                Flott?

                (AMD Duron 1200 mit einem halbem Gig RAM und DMA-IDE-Platten)

                $ time find ~/selfhtml/selfhtml81/ -name '*htm'
                real    0m0.288s
                user    0m0.030s
                sys     0m0.010s
                $ time ./htmlindex find ~/selfhtml/selfhtml81/ -name '\*htm'
                real    0m3.119s
                user    0m2.090s
                sys     0m0.240s
                $ ls -l
                -rw-r--r--    1 cz       users      107003 Apr 10 14:47 fileresolve
                -rw-r--r--    1 cz       users      955688 Apr 10 14:47 tree
                $ cat fileresolve | wc -l
                   1446
                $ cat tree | wc -l
                  24563
                $ tail tree
                üblichen | 1431,1413,897,893,891,890,883,877,824,709,704,642,635,627,623,618,615,614,576,569,564,561,560,557,554,550,549,544,540,529,405,403,362,350,266,207,201,196,159,32,30,
                üblicher | 549,136,
                üblichere | 250,
                üblicherweise | 775,721,647,564,558,549,543,522,392,324,251,207,206,198,
                üblichste | 745,
                übrig | 892,566,552,539,391,
                übrige | 718,551,350,258,
                übrigen | 1446,1438,1433,900,881,813,755,724,709,643,580,577,570,569,567,561,555,551,543,454,406,322,271,207,201,195,189,186,37,29,
                übrigens | 1415,877,872,778,755,723,704,637,550,547,541,540,531,522,488,460,255,250,206,29,
                üppigen | 1443,

                Wie man sieht: kein Stemming. Das gibt es zwar schon fertig durch Snowball, jedoch nur für C und Java nicht für Javascript. Das hatte ich zwar mal angefangen, bin jedoch mittendrin hängengeblieben. Trotz guter Hilfe einiger Forumsmitglieder habe ich das nicht gebacken bekommen. Gut, ich gebe es zu: ich habe die Lust verloren, als ich eingesehen hatte, das ein richtiges Javascript-backend für Snowball sinnvoller wäre ;-)

                Imerhin scheint mir aber, das der Bedarf für eine reine Javascript-Suche für Offline-Dokumentation in letzter Zeit steigt. Das früher für solche Zwecke obligate kleine Javaapplet kann immer weniger eingesetzt werden: zum einen der Ärger mit den JVMs (Ja, Plural!) zum anderem das steigende Sicherheitsbewußtsein.

                Ich hatte das eigentlich nur als kleine Fingerübung angefangen, als Proof-of-Concept. Mittlerweile überkommt mich jedoch das dumpfe Gefühl, das die Nische groß genug wäre für ein Projekt bei Sourceforge. Aber alleine habe ich da keine Lust zu, da ich nur Programmierer im viertem Bildungsweg bin; mir fehlen einfach die Rezeptoren soziale Abgeschiedenheit genießen zu können ;-)

                so short

                Christoph Zurnieden

        2. Alles klar soweit?

          Diese Suche ist zwar sehr schnell, hat aber einige offensichtliche Einschränkungen. Nichts ist eben umsonst ;-)

          Es kommt ziemlich auf die Größe Deines Tutorials an, welche Methode (ja, es gibt da noch so einige) anzuwenden ist. Wieviele Dateien hat es denn und wie groß sind die im Schnitt?

          Und wiedermal hab ich mich nicht vollkommen korrekt ausgedrückt, es ist kein reines Tutorial, sondern eher eine Funktionsreferenz. Enthalten wird sie im Endeffekt so an die +- 50 Seiten, aber alle relativ klein.

          oder stört Dich die Lizenz?

          Das war das zweite worum ich fragen wollte, wie stehts mit der Lizenz auf das Skript in SelfHTML?

          Bzw. wenn man die Methode etwas simpler gestalten würde (hab jetzt die ganzen String-Tabellen der SelfHTML Suche angesehen, und die arbeiten wohl schon etwas forgeschrittener), also so wie du oben erwähnt hast, sollte es nicht zu schwer zu realisieren sein denke ich.

          1. Hi,

            Und wiedermal hab ich mich nicht vollkommen korrekt ausgedrückt, es ist kein reines Tutorial, sondern eher eine Funktionsreferenz.

            Das macht keinen Unterschied.

            Enthalten wird sie im Endeffekt so an die +- 50 Seiten, aber alle relativ klein.

            Was heißt "relativ klein" genau? Ich bräuchte da schon etwas genauere Zahlen keine subjektive Einschätzung für ein Beurteilung und somit für die Empfehlung einer Vorgehensweise.

            oder stört Dich die Lizenz?

            Das war das zweite worum ich fragen wollte, wie stehts mit der Lizenz auf das Skript in SelfHTML?

            Meines Wissens sind nur nichtkommerziele Anwendungen erlaubt

            Bzw. wenn man die Methode etwas simpler gestalten würde (hab jetzt die ganzen String-Tabellen der SelfHTML Suche angesehen, und die arbeiten wohl schon etwas forgeschrittener),

            Nein, das ist ein simpler Inverted Index.

            also so wie du oben erwähnt hast, sollte es nicht zu schwer zu realisieren sein denke ich.

            Ja, aber der Teufel steckt mal wieder in den Details:
            Du kannst nur das schnell finden, was Du im Index wörtlich drin stehen hast, keine Teilzeichenketten oder gar reguläre Ausdrücke, dazu müßtest Du dann wieder jeden Eintrag im Index einzeln anfassen (geht zwar schneller als "echte" Volltextsuche, aber nicht sehr viel). Du kannst mit einem Index Phrasen (Wortfolgen mit vorgegebener Reihenfolge) überhaupt nicht finden, falls Du sie nicht vorher indiziert hast (das ist nicht ganz korrekt. Man kann neben "kommt in Datei XYZ vor" natürlich auch die genaue Wortposition in Datei XYZ mit in den Index einbauen und dann daraus eine Phrase basteln, man muß also nicht wirklich jede Kombination erfassen. Wäre dann aber ein ganz schöner Aufwand.)

            Aber normalerweise reicht für Deinen Zweck eine normale Indizierung mit tolower(), Stopwortliste (hatte ich oben vergessen. Da stehen solche Worte wie "und, oder, ist, sein, haben ..." drin) und primitivem Stemming (nur Suffix-Flexionen und auch nur die regelmäßigen). Dazu dann noch eine Volltextsuche im Index (also lineare Suche mit RegExen) falls die normale nichts ergeben hat. Würde ich aber trennen mit Hinweis: "Die normale Suche hat nichts gefunden, möchten sie die erweiterte Suche nutzen (kann einige Sekunden länger dauern)?" o.ä. Vielleicht sogar ein richtige Volltextsuche über die Dateien. Das kann dann bei 50 Dateien mittlerer Größe und schwächerem Rechner jedoch durchaus ein bis zwei Minuten dauern.

            so short

            Christoph Zurnieden

            1. Hallo Christoph,

              Du kannst nur das schnell finden, was Du im Index wörtlich drin stehen hast, keine Teilzeichenketten oder gar reguläre Ausdrücke, dazu müßtest Du dann wieder jeden Eintrag im Index einzeln anfassen

              man kann aber diese Teilzeichenketten auch alle einzeln indizieren. Wenn man eh schon dabei ist - man wird ja wohl maschinell indizieren - macht das nicht mehr so'n Unterschied. Der Index wird halt nur groß.

              Gruß, Andreas

              --
              SELFFORUM - hier werden Sie geholfen,
              auch in Fragen zu richtiges Deutsch
              1. Hi,

                Du kannst nur das schnell finden, was Du im Index wörtlich drin stehen hast, keine Teilzeichenketten oder gar reguläre Ausdrücke, dazu müßtest Du dann wieder jeden Eintrag im Index einzeln anfassen

                man kann aber diese Teilzeichenketten auch alle einzeln indizieren.

                Welche möchtest Du denn indizieren? Das weiß man nicht vorher, oder? Also müßte man Buchstabenweise indizieren (Speicherung dann z.B. mit einem Suffix-Tree o.ä.). Klar geht das, aber ich finde nicht, das es sich lohnen würde.

                Wenn man eh schon dabei ist - man wird ja wohl maschinell indizieren - macht das nicht mehr so'n Unterschied. Der Index wird halt nur groß.

                Ich kenne ja nicht die durchschnittliche Länge eines deutschen Wortes (oder in welcher Sprache auch immer das Tutorial da geschrieben wurde und bei Silbenschrift ist's eh Essig) aber ich würde da mindestens auf 5-6 tippen. Das wird für Javascript einfach zu viel, da bekommen einige Browser schon ob der schieren Menge Schwierigkeiten. Man müßte also aufteilen und/oder probabilistisch arbeiten (z.B. mit Bloomfiltern vorsortieren). Das dürfte dann aber so komplex werden, das die Kosten dafür einfach zu hoch würden. Das kann man bei einer regulären Suchmaschine machen und sollte es da auch, aber nicht für das hier beschriebene Problem.

                so short

                Christoph Zurnieden

                1. man kann aber diese Teilzeichenketten auch alle einzeln indizieren.

                  Welche möchtest Du denn indizieren? Das weiß man nicht vorher, oder? Also müßte man Buchstabenweise indizieren

                  genau. Das meinte ich auch.

                  Das wird für Javascript einfach zu viel,

                  kann sein.

                  Man müßte also aufteilen

                  aber wird das denn nicht bei der offline-Selfsuche auch gemacht? die Index-Dateien sind doch nach Buchstaben sortiert.

                  Gruß, Andreas

                  --
                  SELFFORUM - hier werden Sie geholfen,
                  auch in Fragen zu richtiges Deutsch
                  1. Hi,

                    Man müßte also aufteilen

                    aber wird das denn nicht bei der offline-Selfsuche auch gemacht?

                    Ja. Und jetzt stell' Dir mal vor wieviel das wird, wenn man das nicht wort- sondern buchstabenweise machen würde. Richtig teuer sind I/O-Vorgänge. Für jedes eingesparte Dateieinlesen kannst Du in der Zeit so einiges an Rechenarbeit leisten. Evt sogar eine lineare Suche im Wort-Index mit regulären Ausdrücken.

                    die Index-Dateien sind doch nach Buchstaben sortiert.

                    Etwas geschickter ist das schon gelöst, aber im Grunde hast Du Recht, ja.

                    so short

                    Christoph Zurnieden

            2. Hallo Christoph,

              Meines Wissens sind nur nichtkommerziele Anwendungen erlaubt

              Die Lizenz der Offlinesuchmaschine sieht so aus:
              // Dieses Programm ist urheberrechtlich geschützt. Falls Sie Interesse
              // haben, eine auf Ihre Datenbestände angepaßte Version dieser Suchmaschine
              // in Lizenz zu erwerben, erhalten Sie unter mailto:suchmaschine@ogu.de
              // mehr Informationen

              Gruß,

              Dieter

              1. Hi,

                Meines Wissens sind nur nichtkommerziele Anwendungen erlaubt
                Die Lizenz der Offlinesuchmaschine sieht so aus:

                [...]

                Also ist strenggenommen noch nicht einmal Verbreitung erlaubt. Eine ausreichende Schöpfungshöhe natürlich vorausgesetzt, aber das kann man in diesem Fall wohl durchaus und guten Gewissens.

                so short

                Christoph Zurnieden

          2. Hallo,

            oder stört Dich die Lizenz?

            Das war das zweite worum ich fragen wollte, wie stehts mit der Lizenz auf das Skript in SelfHTML?

            Du hättest dir zumindest die Mühe machen sollen, den Script anzuschauen:
            -------------------
            // Javascript-Suchmaschine, Version SH-8-5 (15.3.05)
            // angepaßt für Selfhtml 8.1
            // Autor: Oliver García
            //
            // Dieses Programm ist urheberrechtlich geschützt. Falls Sie Interesse
            // haben, eine auf Ihre Datenbestände angepaßte Version dieser Suchmaschine
            // in Lizenz zu erwerben, erhalten Sie unter mailto:suchmaschine@ogu.de
            // mehr Informationen
            -------------------

            Grüße
            Thomas

            --
            Surftip: kennen Sie schon Pipolino's Clowntheater?
            http://www.clowntheater-pipolino.net/
            1. Hi Thomas,

              sind Scripte überhaupt schützbar?

              Viele Grüße
              Mathias Bigge

              1. Hallo Mathias,

                sind Scripte überhaupt schützbar?

                Korinthen kackend würde ich sagen, dass sie im Gegenteil nur „entschützbar“ sind. Bei ausreichend hoher Schöpfungshöhe fallen sie automatisch unter das Urheberrecht. Auf die Einschränkung des Nutzungsrechts kann man als Autor natürlich verzichten, das ist aber hier nicht per se der Fall.

                Grüße
                Roland

                1. Hi Orlando,

                  sind Scripte überhaupt schützbar?
                  Korinthen kackend würde ich sagen, dass sie im Gegenteil nur „entschützbar“ sind. Bei ausreichend hoher Schöpfungshöhe fallen sie automatisch unter das Urheberrecht.

                  Theoretisch ist das richtig, tatsächlich wird doch fast alles, was es an JS-Scripten im Netz gibt quasi als Freeware behandelt. Es würde mich interessieren, wie es hier in der rechtlichen Praxis aussieht, etwa, ob ein Programmierer oder eine Firma erfolgreich gegen die unerlaubte Kopie eines Scripts vorgegangen ist. Das schließt natürlich nicht aus, dass man die Vorgaben des Entwicklers respektiert, was ich durchaus begrüßenswert finde. Ganz so korinthenkackerisch finde ich die Frage nicht, denn es kann ja durchaus eine relevante Frage für Entwickler sein, wie man aufgrund der Gegebenheiten vorgehen sollte, etwa von vornherein solche Programme nur auf Compilerbasis entwickelt.

                  Viele Grüße
                  Mathias Bigge

                  1. Hallo Mathias,

                    sind Scripte überhaupt schützbar?
                    Korinthen kackend würde ich sagen, dass sie im Gegenteil nur „entschützbar“ sind. Bei ausreichend hoher Schöpfungshöhe fallen sie automatisch unter das Urheberrecht.
                    Theoretisch ist das richtig,

                    Praktisch ist es auch richtig.

                    »»tatsächlich wird doch fast alles, was es an JS-Scripten im Netz gibt quasi als Freeware behandelt.

                    Und? Es gibt jede Menge Scripte die man entweder als Freeware oder als Kaufversion totzdem lizenzieren muss.

                    »»Es würde mich interessieren, wie es hier in der rechtlichen Praxis aussieht, etwa, ob ein Programmierer oder eine Firma erfolgreich gegen die unerlaubte Kopie eines Scripts vorgegangen ist.

                    Konkret weiss ich das nicht, aber mit den Softwarepatenten kannst du dir sogar eine 1*1=1 schützen lassen.

                    Grüße
                    Thomas

                    --
                    Surftip: kennen Sie schon Pipolino's Clowntheater?
                    http://www.clowntheater-pipolino.net/
  2. Hi BeSch,

    Ich möchte ein Tutorialpaket aus HTML-Seiten veröffentlichen, und der Benutzerfreundlichkeit halber eine offline Suchmaschine einbauen.

    Da sich der Datenbestand bei einer Offline Dokumentation nicht ändert, könntest Du vor der Auslieferung einen vollständigen Index erzeugen und dieser mitleifern. Dazu müsstest Du dann mit JS eine entsprechende Oberfläche bauen.

    So etwas ähnliches wie bei der Download-Version von SelfHTML wäre da hilfreich.

    .chm wäre dann ein Weg, aber nur für die Windows-Welt.

    Viele Grüße
    Mathias Bigge

    1. Hallo Mathias,

      .chm wäre dann ein Weg, aber nur für die Windows-Welt.

      CHM laeuft auch unter Linux
      http://www.herdsoft.com/linux/themen/chmviewer.html
      Daneben gibt es noch die Moeglichkeit, Mozillabook zu nutzen, aber das setzt eine Gecko-Engine voraus und ist auch etwas komplizierter herzustellen (fand ich zumindest)

      Gruß,

      Dieter

  3. Hallo Bernhard,

    hier noch einige Anmerkungen zu den im Thread schon angesprochenen Punkten:

    Ich plane schon länger, das Programm in einer Version anzubieten, in der es ohne größeren Aufwand
    in die verschiedensten (Offline- und Online-)Projekte eingebunden werden kann. Bislang habe ich einfach
    die Zeit hierfür noch nicht gefunden. Vor allem muß der Indizierer so umgestaltet werden, daß
    er simpel zu bedienen ist. Die Verwendung der Suchmaschine soll für private Projekte kostenlos sein.

    Die optische Einbindung in die vorhandene HTML-Umgebung bleibt in diesem Fall dem Projektautor
    überlassen. Das schöne an einer Javascript-Lösung gegenüber einer Java-Lösung ist ja, daß
    sich die Suchfunktion besonders einfach nahtlos in die Seitendarstellung einbauen läßt.

    Die Selfhtml-Suchmaschine unterstützt übrigens auch Phrasensuche, sogar in erweiterter Form, Beispiele
    stehen auf der Startseite der Suchfunktion. Eine Stoppwortliste kommt nicht zum Einsatz. Nach meiner
    Erfahrung ist eine solche aus Geschwindigkeitsgründen nicht erforderlich, jedenfalls nicht bei
    Projekten bis etwa dem 10fachen Umfang von Selfhtml.

    Grüße,
    Oliver