Liebes Forum, hallo,
ich möchte mein Posting v. 07. Januar 2008, 18:46 erläutern dürfen, wo ich
anhand eines Beispiels mir 3 Punkte angedacht hatte bzgl. der gegebenen
Fragestellung "Volltextsuche: Diskussion zur Relevanz von Suchergebnissen":
Ich schrieb ca. folgendes, jetzt leicht verbessert, wie ich finde:
GESUCHT WIRD DER "Affe":
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
Ich teile das Problem zunächst auf in seine Teilprobleme: Der Volltext wird
gesplittet in "Wörter". Trivial wäre z.B. anhand der Leerzeichen, mgl. wäre also
"Alles, was zwischen 2 Leerzeichen steht", oder auch "Die ununterbrochene Menge
von Zeichen, die im Alphabet enthalten sind". Oder einfach "So viele
Nicht-Leerzeichen wie möglich". Der Volltext ist jetzt schon mal eine Folge von
Wörtern. Wenn wir schon mal da sind, streichen wir gleich die
"Ich-sage-eigentlich-nie-was-wichtiges-aus-Wörter", also diese "der, die, das,
einer, eine, warum, weshalb, darum" oder ähnliche( o.ä. ). Dbzgl. empfiehlt sich
die Führung einer Bannliste von "Unwörtern", am besten in einer Text-Datei, die
leichter zu pflegen ist. Bis jetzt könnte das Ganze als kleines C-Programm
geschrieben werden, in Form einer Schleife, die solange läuft, bis der Volltext
"aufgegessen" ist: Suche nächstes Leerzeichen, pack' in der Folge alle
Nichtleerzeichen in die Variable "Wort", und wenn ein Leerzeichen kommt, schieb'
den aktuellen Inhalt der Variablen "Wort" in die Liste der bisher gefundenen
Wörter. Ich glaube, das ist mithilfe von Zeigern und C schnell genug. Zu prüfen
wäre noch die Möglichkeit eines sogenannten Parsers, wg. der Schnelligkeit.
Schön wäre auch die Möglichkeit, den Volltext schon hier weiter unterteilen zu
können, ich will Teiltextblöcke. In einem Forumstext böte sich hier an der
Thread. In einem HTML-Quelltext böte sich hier an der HTML-Quelltext. Zu
letzterem:
1\. Wenn der HTML-Text NICHT geparst wird, verliert man, meines Erachtens( m.E. )
unnötigerweise, vielleicht später doch noch wichtige "Information". Ich meine damit
folgendes: In HTML sollte der Text hierarchisch strukturiert sein, und er ist es in
der Regel( i.d.R. ) auch. Wenn wir uns diese Hierarchien erhalten, können
wir später z.B. von der Hierarchiestufe des "höchsten" Treffers nach unten hin
wandernd alles das ausgeben, was drunter ist. Sozusagen, und( & ) besser m.E:
Vom Allgemeinen ins Spezifischere. Erlaubt sei bitte folgendes, bevor ich's
vergess' wieder mal, ein Beispiel( also ein Beispiel im Beispiel, grmpf.( ?! ) ):
Gesucht wird "DIV-Layout". Gemeint ist aber vielleicht eher float-Layout, und das
Kernproblem, welches beim Auffinden einen qualitativ wertvollen Treffer
darstellen würde, bestünde für den User im Hinweis auf ein nötiges
Clear:[left/right/both], "wann?" und "wo?" und "etc.?" ... . Also der User hat
sich verrannt, im Tunnel, und da ist kein Licht. Da muß dann halt gebohrt
werden, m.E., und es TUT weh. Deswegen fände ich an dieser Stelle
"Schlagwortlinks" eine sehr gute Idee: Die gäben schon mal die Himmelsrichtung
des Lichts( jaja, der Erkenntnis, nein, ich will's mir nicht immer verkneifen
müssen, bitte ) an.
Oder aber: Gemeint ist vielleicht eher 3-col-Layout( Der heilige Gral ): Das
Kernproblem, welches beim Auffinden einen qualitativ wertvollen Treffer
darstellen würde, bestünde für den User im Hinweis auf eine Komplettlösung, die
in der Hierarchie nicht unterhalb seines eingegebenen "DIV-Layouts" liegt,
sondern drüber.
Ingesamt sollte es also in dem Text sowas wie oben, unten, Norden, Süden, Osten
geben. Und das ist schön. Das gibt es ja auf einer Website. Man müßte diese
Struktur also abbilden, und wir hätten ein baumartiges Gebilde. Ich denke jetzt
an Wurzeln, Stämme, Zweige und Blätter im Wald( jaja, nein, es ging, danke ).
Tragfähig wäre auch das Bild eines Bergwerkgebietes, dort wird gediggert, soll
heißen "nach Treffern geschürft". Es gibt in diesem Gebiet Schatzkammern, und da
müssen breite Tunnel gebohrt werden, insgesamt ein richtiges Netzgeflecht von
Schatzkammern und Tunneln. Also richtiger Wahnsinn an totaldurchlöchertem
Ruhrgebiet erstmal. Von jeder Schatzkammer zu jeder Schatzkammer einen
Direktdurchgang. Jetzt könnte man zählen: Welche Tunnel haben wieviele
Kreuzungen. Je mehr Kreuzungen, umso autobahnähnlicher sollte der Tunnel
ausgebaut werden. Es ergibt sich u.U. sowas wie die allergrößte Autobahn( A0 ).
Und vielleicht sowas wie A0-0, A0-1, A0-2, .., A0-n. Und seien die Kreuzungen K,
und die Schatzkammern S, und in den Schatzkammern jeweils die Menge aller
stetigen Folgen von Nicht-Leerzeichen, nämlich W. Und danns seien diese "W"s
doch bitte auch noch in den richtigen Schatzkammern "S"s. Also packen wir doch
diese Wortfolgen einfach gleich in diese Schatzkammern, wo sie gefunden wurden.
Was? Ja genau, nur die "Goldenen Worte", also die oben ja schon geparsten. Also
ich denke langsam an die 7 Zwerge, und Schneewittchen ist auch noch nicht
gefunden, also weiter jetzt.
Nehmen wir jetzt mal an, wir könnten das ganze Ruhrgebiet so stauchen und
zerren, daß diese ganzen Tunnel entweder parallel oder rechtwinklig zueinander
verlaufen. Wir haben dann eine Tabelle von Schatzkammern, und nicht nur eine,
sondern in die Tiefe gestaffelt, viele, sozusagen eine 3D-Tabelle. Eisen & Kohle
... . Desgleichen( =dito, also dto., grmpf;( ) eine 3D-Tabelle von den
Autobahnen. Wir hätten also, wenn wir jetzt mal noch mehr basteln würden, in
unserem Text ein Oben, Unten, und die Himmelsrichtungen, meines, vielleicht
vorschnellen, Erachtens. Und wir hätten das Erz geschmolzen, die Kohle
gereinigt. Das Ruhrgebiet ist jetzt quadratisch, praktisch gut, & die Briketts
sind sauber gestapelt. Im Tunnelsystem brennt noch kein Licht, wofür auch, es
gibt ja, - noch - , keine Hinweisschilder, und dbzgl. kriegen die Schatzkamern
jetzt mal Namen?
OK, wir machen extremes TF-IDF. Soll heißen wir denken mal nach, was suchen wir
eigentlich? Eisen, Kohle, Kobalt, Nickel, Kupfer, Zinn, arghs, nein. Vielleicht
steht das schon irgendwo? Also m.E. evtl. schon im Schlagwortindex, den wir aber
noch nicht haben. Also stop, und ich glaube jetzt müssen wirklich WIR denken, &
nicht der Computer. Wir müssen uns eine Liste der Wörter erarbeiten, die wichtig
sind, also VIP-Wörter. Das sind, bei wie immer gebotener Userzentriertheit, DIE
Worte, die die Menge aller User jemals eingegeben hat, und die keine "Unworte"
sind, siehe oben( s.o. ). Also wir rennen jetzt einfach mal los. PAUUUUTZ! Wir
sind mit dem Kopf gegen die Wand gerannt, totzdem, wir haben was gelernt. Wir
sind jetzt bescheiden und werten nur noch Fragen aus, die von wenigen
Auserwählten gestellt werden. Sozusagen Volksvertretern. Das sind dann schon mal
weniger, und dann klappt das auch, selbst wenn alle dureinanderreden wie an der
Börse ja auch. Zumindest ein Anfang wäre gemacht, der ja dann ergänzt werden
könnte ... . Wir haben also jetzt also eine ganze Menge an möglichen
Suchwörtern. Und jetzt? TF-IDF( ->WIKIpedia ). Also kurz: Wir zählen bzgl. jedes
Suchwortes in jeder Schatzkammer, wie oft wir an die dortigen Briketts ein
Schild "Treffer" hängen könnten. Machen wir das einfach mal. Und nochmal und
nochmal. Am Ende hängen meinetwegen an jedem Brikett 100 Schilder, egal erstmal.
Und meinetwegen werden die Hauptbriketts vergoldet, per Grammatik, später das
auch noch, aber erstmal wird verglichen. Die Menge aller Briketts mit dem
gleichen Schild wird jeweils pro Schatzkammer gezählt. Wovon am meisten drin ist
das schreiben wir an eine Eingangstafel, die wir an den Höhleneingang hängen.
Selbstverständlich, als ordentliche Wichtel, gewichten wir noch rum, und wägen
ab. In den anderen Schatzkammern ist von derselben Sorte Briketts auch ein
Haufen. Also die Schatzkammer mit dem größten Brikettstapel hat sich ein Schild
verdient, sozusagen einen Wegweiser: "Hier sind die meisten DIVs". Weil es gibt
DIVs zwar überall, die lauern zwar an jeder Ecke, aber DA kommen die scheinbar
her, wir haben das Nest entdeckt, wovon die Plage ausgeht. Wir hängen gleich ein
Schild hin: "Achtung! DIVS!", an den Eingang, und an jeden Eingang eins, so in
der Art: "Also hier liegt zwar alles mögliche, aber in der Hauptsache eher DIVS".
Fertig? Schön wär's. Und Schneewittchen? Also weiter.
Wir geben uns mehr Mühe jetzt mit den Schildern. Wenn 118 DIVs in der Höhle
sind, ist die Tafel 118x118, und die Höhle "Layout" z.B. hat 212x212. Simsalabim
und voodoo, Quadratabweichung und eine Fehlertoleranz, wir wichteln weiter und
hängen an jede Tür eine ganze Menge Schilder. Die grossen Schilder nach oben,
die Kleinen nach unten. Und wir katalogisieren alle diese Schilder, in der
Zentrale. Wir führen dort Listen. Z.B. eine Liste "DIV"s und eine Liste
"Layout"s. Alarm in der Zentrale: Gefragt ist nach "DIV-Layout: Probleme beim
Clearing. Hilfe!". Und, klappt's?
Also: "DIV"s in den Schatzkammer S17, S23, S45, .. Sn, schön. "Layout"s in
S18, S4711 und S69, auch schön. Schön für sich ist garnix, es muss harmonieren.
Also wo sind zusammengezählt die "DIV"s und "Layouts"s am meisten. Schicken wir
mal jemanden hin, kucken, ob dort auch noch "Clearing" zu finden ist. Wir finden
"Clear", "Clearing", "Clear-Bug", "unclear". Wir bewerten die Treffer: "Clear"
kriegt eine Eins+, "unclear" imerhin noch eine 4. Wir müssen gerecht sein. in
"Clearing" ist zwar alles nötige gesagt worden, aber leider auch viel Falsches.
Fehlerabzug. In "unclear" finden sich 4 Totalübereinstimmungen bzgl. der
Buchstaben, aber das kleine c gilt nur halb. Oder alt gewichtet. Wir wichteln
uns einen Wert von 0.75 für ein "OK, nur die Gross- & Kleinschreibung stimmt
nicht". Also Trefferqualitat insgesamt 4,75 IdentischEinheiten( IE ). Aber
ausserdem steht der Suchbegriff nicht am Wortanfang. 2 Punkte Abzug, 3? Also
kurz gesagt: Fuzzy-Matching, die Qualität des Matchings wird gemapt auf eine
normierte Skala, warum nicht [ 0, 0.25, 0.5, 0.75 .. 1 ]?
Wir geben unsere Ergebnisse an die Zentrale. Die Zentrale sammelt die Ergebnisse
der anderen Trupps. Und rechnet.
S1: 4.75\*( (118x118) + (212x212) ) = soviel,
S2: 4.75\*( (218x218) + (212x212) ) = soviel,
S3: 3.75\*( (118x118) + (212x212) ) = soviel.
Und der beste Treffer ist in S2. Wir machen Licht, und der Kunde fährt los.
\-------------------------------------------------
Phfftt, das war's. Lang geworden. Und grob, schnell, überfliegermäßig. Bin
dankbar für jedes bischen Kritik am Text. Vielleicht a la "Käse\_Käse\_Käse" sollte
besser heißen "So\_So\_So". Und schlagt mich nicht tot. Ich bin zwar ein alter
Knochen, aber, was Foren angeht, ein junger Hund. Mit großen Pfoten.
Und müde jetzt mal wieder. Darf ich das jetzt einfach mal so abschicken?
Best regards
Christian