möglichkeit für warscheinlichstes Suchergebnis

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
OldBoy
User
Beiträge: 41
Registriert: Samstag 12. Januar 2008, 20:39

Hier 2 Loesungen in Standard-Python:

Code: Alles auswählen

def dist_lev(a, b):
    """
    Calculates the Levenshtein distance between a and b.
    Written by Magnus Lie Hetland (hetland.org)
    """
    n, m = len(a), len(b)
    if n > m:
        a,b = b,a
        n,m = m,n

    current = range(n+1)
    dummy = [n] * (n+1)
    for i in range(1,m+1):
        previous =  current
        current = dummy[:]
        current[0] = i
        for j in range(1, n+1):
            add = previous[j]+1
            delete = current[j-1]+1
            change = previous[j-1]
            if a[j-1] != b[i-1]: change += 1
            current[j] = min(add, delete, change)
            
    return current[n]

def dist_ratio(a, b):
    s = difflib.SequenceMatcher(None, a, b)
    return s.ratio()
z.B.

Code: Alles auswählen

>>> a = 'Meier'
>>> b = 'Mayer'
>>> dist_lev(a,b)
2
>>> dist_ratio(a,b)
0.59999999999999998
>>> dist_lev(a,a)
0
>>> dist_ratio(a,a)
1.0

Noch ein paar Tipps:
  • - vor dem Vergleich die Texte normalisieren
    (Gross-/Kleinschreibung, Sonderzeichen, Vereinheitlichung ( St/Str/Strasse))
    - bei langen Namen duerfen auch die Abweichungen groesser sein
    - anwendungsspezifische Sonderfaelle pruefen
    (z.B: Alleestr./Allerstr. in Essen, Iran/Irak bei Laendern)
Wer konkrete Hilfe braucht, kann sich gerne per PN an mich wenden. Ich habe dies Aufgabenstellung in den letzten Jahren intensiv im Bereich Laenderangabe/Region/Telefongesellschaft bearbeitet.

Gruss

OldBoy
Antworten