Christoph Zurnieden: Suchscript: Gewichtung der Fundstellen

Beitrag lesen

Hi,

Wenn Suchbegriff = "Programm", dann muss die Fundstelle "Programm" besser bewertet werden als "Programmierer" oder als "gramm"

nee, Levenstein-Verschiebung wäre da viel besser?

Was ist eine Levenshtein-_Verschiebung_?

Na, die Verschiebungen, die nötig sind, um das Zielwort genau zu treffen.

Achso, nein, das schimpft sich "Distanz".

Es war ja u.a. gefragt, wie man es hinbekommt, daß bei der Suche nach "programm" der Treffer "progamm" besser als "programmierer" oder "gramm" gewichtet werden soll.

Nein, war nicht (ich hab's aber auch zuerst so wie Du gelesen ;-). Jetzt verstehe ich Dich aber auch erst.
Es ging ihm laut Beschriebung wirklich nur um die Unterscheidung "als alleinstehendes Wort" (Programm), "als Wortbestandteil" (assemblerprogrammerfriendly) und "longest common substring" (Progress, Grammatik) und das dann in eben dieser Reihenfolge gewichtet.

Nun RegExpr ist der 1. Schritt, um überhaupt eine Worttabelle aufzubauen, aber wie stellst Du jetzt die Vergleiche an?

Zum Beispiel so (Pseudocode)

if(!searchExakt(Suchwort))
  if(!searchAsPartOfWord(Suchwort))
    if(!searchLongestCommonSubString(Suchwort))
      return NothingFound

Dazu würde ich Levenshtein (von mir aus auch mit "h" :-))

Nun, Eigennamen sollte schon immer korrekt geschrieben sein, das gebietet schon die Höflichkeit. Der Mann heißt übrigens im Ganzem: Wladimir Iossifowitsch Levenshtein

empfehlen-am besten noch mit einer Kombination aus Soundex und Levenshtein.

Ich bin mittlerweile, wie auch in meinem Artikel beschrieben  (*hint-hint* ;-) zu der Erkenntnis gekommen, das die Kosten für die Edit Distanz nicht für grobe Suchen lohnen und selbst im Feinbetrieb (z.B. im Kollisionsfeld vom Soundexergebnis) ist es auch nicht immer ergiebig genug die Kosten wieder einzuspielen.

Anders natürlich beider Gewichtung der so ermittelten Fundstellen an sich, das ist es in diesem Fall wohl eher nötig einen etwas ausgefuchsteren Algorithmus als nur
[latex]
\left(\sqrt{\log\left(\frac{N}{n_t}}\right)\right)\left(\log\left(1+f_t\right)\right)
[/latex][1]
zu benutzen.

Ok, aber das ist noch keine unscharfe Suche.

Nein, da es nicht um eine unscharfe Suche geht (Kann mich natürlich irren, nur hat sich der OP bis jetzt nicht wieder gemeldet). Es wird lediglich nach einer Möglichkeit gesucht die Fundstellen zu bewerten. Das das nicht so einfach ist sieht man ja schon bei Google.

so short

Christoph Zurnieden