Die Levenshtein-Distanz, auch bekannt als Bearbeitungsdistanz, ist eine grundlegende Metrik zur Bewertung der Ähnlichkeit zwischen zwei Zeichenfolgen. Es berechnet die Mindestanzahl von Operationen, die erforderlich sind, um eine Zeichenfolge in eine andere umzuwandeln. Zu diesen Vorgängen gehören:
Dieses Konzept ist für viele moderne Anwendungen von zentraler Bedeutung, beispielsweise für die Rechtschreibprüfung, die Fuzzy-Suche und den Vergleich von DNA-Sequenzen.
Der Levenshtein-Abstand zwischen zwei Strings (A) und (B) mit den Längen (n) bzw. (m) kann mithilfe eines dynamischen Programmieransatzes berechnet werden. Wir definieren eine Matrix (D) der Größe ((n 1) mal (m 1)), wobei jeder Eintrag (D[i][j]) den Mindestaufwand für die Transformation der ersten (i) Zeichen von (A) darstellt die ersten (j) Zeichen von (B).
Die Wiederholungsbeziehung ist wie folgt:
Hier ist eine einfache Python-Implementierung zur Berechnung der Levenshtein-Distanz:
def levenshtein_distance(a, b): n, m = len(a), len(b) dp = [[0] * (m + 1) for _ in range(n + 1)] for i in range(n + 1): for j in range(m + 1): if i == 0: dp[i][j] = j elif j == 0: dp[i][j] = i elif a[i - 1] == b[j - 1]: dp[i][j] = dp[i - 1][j - 1] else: dp[i][j] = 1 + min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) return dp[n][m] # Example usage print(levenshtein_distance("kitten", "sitting")) # Output: 3
Rechtschreibprüfungen verwenden die Levenshtein-Distanz, um Korrekturen für Tippfehler vorzuschlagen. Wenn Sie beispielsweise „helo“ eingeben, wird möglicherweise „Hallo“ oder „Held“ vorgeschlagen.
In Suchmaschinen hilft Levenshtein dabei, Ergebnisse zurückzugeben, selbst wenn Benutzer Tipp- oder Rechtschreibfehler machen.
In der Bioinformatik hilft dieser Abstand dabei, die Ähnlichkeit zwischen zwei DNA-Sequenzen zu messen, wobei jede Operation eine potenzielle Mutation darstellt.
Systeme, die Identitätsbetrug erkennen, können Benutzereingaben mit vorhandenen Datensätzen vergleichen und dabei kleine Textunterschiede berücksichtigen.
Der klassische Algorithmus verwendet eine vollständige Matrix, die speicherintensiv sein kann. Glücklicherweise kann es so optimiert werden, dass nur zwei Speicherzeilen verwendet werden, da jede ( D[i][j] ) nur von ( D[i-1][j] ), ( D[i][j-1] abhängt. ) und ( D[i-1][j-1] ).
def optimized_levenshtein(a, b): n, m = len(a), len(b) prev = list(range(m + 1)) curr = [0] * (m + 1) for i in range(1, n + 1): curr[0] = i for j in range(1, m + 1): insert = curr[j - 1] + 1 delete = prev[j] + 1 substitute = prev[j - 1] + (0 if a[i - 1] == b[j - 1] else 1) curr[j] = min(insert, delete, substitute) prev, curr = curr, prev return prev[m] # Example usage print(optimized_levenshtein("kitten", "sitting")) # Output: 3
Die Levenshtein-Distanz ist ein leistungsstarkes, vielseitiges Werkzeug, das in verschiedenen Bereichen weit verbreitet ist. Obwohl es einfach zu verstehen ist, unterstreichen seine Optimierungen und komplexen Anwendungen seinen Wert in modernen Systemen.
Berücksichtigen Sie zur weiteren Untersuchung Varianten wie den Damerau-Levenshtein-Abstand, der Transpositionen berücksichtigt. Jetzt sind Sie in der Lage, dieses Tool in Ihre Projekte zu integrieren oder Ihre Kollegen mit Ihrem tiefen Verständnis zu beeindrucken!
Das obige ist der detaillierte Inhalt vonLevenshtein-Distanz: Der ultimative Leitfaden zur Messung der Textähnlichkeit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!