codus-levenshtein algorithmus, der fuzzy job

es erfreut nicht nur die marketing abteilung, sondern auch den werten besucher, wenn er themenrelevante vorschläge oder fehlertolerante suchfunktionen genießen darf und kann. denn anders als im realen ladengeschäft, muss die seite bringen, was sonst ein umtriebiger verkäufer leistet. warum funktioniert die suchmaschine und warum ist sie so beliebt?
die üblichen ansätze sind meist ein ziemlicher kauderwelsch aus script und datenbank queries. genug der erklärung, was hier nur teilweise ausgeführt wird ( mal ehrlich, damit kann man wohl ein oder zwei mark machen ) .

der erste und wohl niederste ansatz war ein gern genutztes hash prinzip. ich habe den gedanken recht schnell verworfen, da diese vorgehensweise einen nicht überschaubaren datenmüll aufbauen würde. also betrachtete ich mir die möglichkeiten, die mir in diversen sprachen geboten wurden. wäre da eine weitere funktion “soundex” – ein phonetischer algo. und wie man phonetisch entnehmen kann – für den deutschen sprachraum absolut ungeeignet. kommt man dem jetzt ein stück näher, stößt man auf die weiterentwicklung “metaphone” – aber auch das hilft kein stück weiter. es wurde wärmer mit “similar text”. ja, ich wollte gerade noch darauf eingehen, allerdings konnte man das ganze auch vor wikileaks schon finden. levenshtein, ein feiner und funktionierender algorithmus. ich machte meine ersten gehversuche  im benchen. zuerst php, dann perl und dann c#. recht klar und auch ohne bench vorher schon sieger war und ist natürlich c#. ich schrieb also die erste mysql udf und reizte erstmal aus. 10.000 datensätze â 500 zeichen brauchten maximal 0,2sec. jetzt gibt es an der levenshtein geschichte ein paar kleine, aber sehr relevante fehler.

  • da wären zum einen die umlaute und sonderzeichen
  • suche nach wortketten liefert im ur-levenshtein ergebnisse, die keiner verwenden kann
  • die suche von “klaus im haus muss raus” gegen “klaus raus” ist für das menschliche auge eine option
  • der aktuelle datenbestand sollte durchsucht werden ohne überhänge zu erzeugen / migration auf bestehende systeme
  • man sollte schon die fehlbarkeit einstellen (wortmenge + treffferquote = aussagekräftiger prozentsatz) können bzw. sollte dem eine gewisse rangordnung zugrunde liegen
  • das ganze muss oder sollte im idealfall schneller als forest laufen
  • die datenquelle sollte später keine rolle spielen ( db, literale, whatever )

das sind und waren meine “must haves” bevor ich damit zur kasse und somit online gehen kann. eigentlich – sollte das hier überhaupt jemandem dienlich oder wenigstens interessant erscheinen – ist es lediglich mathematik. also kinder, immer schön aufpassen in der schule. und bevor paul mir zum 8ten mal erklärt wo mein heim ist, mach ich meine arbeit.

24.02.2011