Hi
Du vergisst, dass hier viel Quelltext gepostet wird, dass hier jeden Tag
sich Leute verschreiben, etc, pp. -- ich halte die Wachstumsrate “neuer
Woerter” fuer groesser, ehrlich gesagt.Quelltext wäre auch perfekt weil das Vokabular ja standardisiert ist.
Falsch! Das Vokabular bei Quelltexten ist genau eben _nicht_
standardisiert. Ich kann meine Funktion benennen, wie ich lustig bin...
ja aber bitte ...
1. wieviele Leute benennen ihre Fkten iopiwejdiendkn(), statt getUpper().
2. wieviele Leute suchen dann auch iopiwejdiendkn()
3. im Falle 2., wie schnell soll die suche in diesem Sonderfall erfolgen?
4. Wieviel Prozent des Quellcodes machen selbstdefinierte Funktionennamen aus?
Wird ein Funktionenname hingegen oft gesucht, dann bildet er einen stehenden Begriff der günstig indiziert sein sollte, z.B. instr() findest du nicht im Duden gehört aber zu "Selfdeutsch" (~140 Archivtreffer)
Rechtschreibfehler habe ich ja auch angesprochen in dem die gängigen
Fehler eines Wortes idealerweise auf den gleichen Hashwert mappen
sollten. (fehlender Buchstabe, geswapte Buchstaben,...), [...]
Du hast Vorstellungen... eine wichtige Eigenschaft einer Hash-Funktion
ist es, dass kleine Aenderungen im Eingangswert grosse Aenderungen im
Ausgangswert verursachen. Sonst wird die Wahrscheinlichkeit fuer
Kollisionen zu gross (z. B. Maße und Masse muesste deiner Definition nach
die gleiche Hash-Summe ergeben, ist aber etwas anderes -- das Beispiel
ist jetzt konstruiert, ich bin mir aber sicher, im normalen Fach-Vokabular
treten bessere Beispiele auf).
Ja, hast recht, dass sollte eine Vorfunktion leisten, d.h. es wird H(k('Maße'))=H('Masse') gesucht, mit k der Korrekturfunktion.
Die "Korrekturkollisionen" werden dann auch nachträglich aufgelöst, d.h. sofern gewollt (das erlaubt ansonsten eine Ähnlichkeitssuche)
Beispiel:
|goggle(Rechtschreibfelher)| = 96
|goggle(Rechtschreibfehler)| = 403.000
Nochmal, mir gehts darum Eigenschaften der Sprache zur Optimierung zu nutzen, für seltene Rechtschreibfelher eigene Zellen im Index (unabhängig ob Hash oder DB) zu belegen rechnet sich IMHO nicht.
[...] außerdem sollten die Wörter gestämmt werden.
*g* also, jetzt faengst du an zu fantasieren. Wie willst du maschinell
das Wort auf seinen Stamm zurueckfuehren?
Algorithmisch natürlich nicht in 100% aller Fälle, aber bei den regelmäßigen Beugungen reicht es einfach bestimmte Endungen zu streichen. (e, en ,er,...)
Ansonsten mit Wörterbuch, falls es sich's von der Performance her rechnet. (???)
Und lange wörter sollten zerlegt werden.
Damit machst du die Eingangsmenge aber noch groesser.
Hä? Die Menge der Wörter im Index werden kleiner wenn die Zusammengesetzten wegfallen!
also |k(Selfdeutsch)| << |Selfdeutsch|
Um Akkurat zu arbeiten bräuchte man tatsächlich ein Wörterbuch, nicht bei jedem Wort lohnt die Trennung.
Bye
rolf