Offline Suchmaschine für HTML-Paket
BeSch
- html
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
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
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.
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
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
Danke für den Tip!
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
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
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
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.
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
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
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
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
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
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
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
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
Hi Thomas,
sind Scripte überhaupt schützbar?
Viele Grüße
Mathias Bigge
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
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
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
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
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
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