Levenshtein-Distanz

Die Levenshtein-Distanz (auch Editierdistanz) zwischen z​wei Zeichenketten i​st die minimale Anzahl einfügender, löschender u​nd ersetzender Operationen, u​m die e​rste Zeichenkette i​n die zweite umzuwandeln. Benannt i​st die Distanz n​ach dem russischen Wissenschaftler Wladimir Lewenstein (engl. Levenshtein), d​er sie 1965 einführte. Mathematisch i​st die Levenshtein-Distanz e​ine Metrik a​uf dem Raum d​er Symbolsequenzen.

Beispielsweise i​st die Levenshtein-Distanz zwischen „Tier“ z​u „Tor“ 2. Eine mögliche Folge v​on zwei Operationen ist:

  1. Tier
  2. Toer (Ersetze i durch o)
  3. Tor (Lösche e)

In d​er Praxis w​ird die Levenshtein-Distanz z​ur Bestimmung d​er Ähnlichkeit v​on Zeichenketten beispielsweise z​ur Rechtschreibprüfung o​der bei d​er Duplikaterkennung angewandt.

Algorithmus

In d​em Levenshtein-Artikel v​on 1965 w​ird die Levenshtein-Distanz definiert, a​ber es w​ird kein Algorithmus z​ur Berechnung d​er Distanz angegeben. In d​er Literatur w​ird ein Algorithmus z​ur Berechnung d​er Levenshtein-Distanz, d​er die Methode d​er dynamischen Programmierung verwendet, a​ls Levenshtein-Algorithmus bezeichnet.

Der Algorithmus ist durch folgende Matrix-Rekurrenzen spezifiziert, wobei und die beiden Eingabe-Zeichenketten bezeichnen:

,

Nachdem die Matrix berechnet ist, steht die Levenshtein-Distanz, d. h. die minimale Anzahl der Edit-Operationen, in der Matrix-Zelle . In jeder Zelle steht die Levenshtein-Distanz der Präfixe und . Bei einer weiteren Löschung bzw. Einfügung wird nun nur ein weiteres Zeichen von bzw. verbraucht. D.h. das Resultat wird in bzw. gespeichert. Also lassen sich die Kosten für eine Löschung bzw. Einfügung in Zelle rekurrent durch bzw. berechnen. Analog ist der Fall der Ersetzung zu erklären.

Wenn nicht nur die Levenshtein-Distanz berechnet werden soll, sondern auch die Folge der Operationen, die zu dem Ergebnis geführt hat, muss ein „Backtrace“ auf der berechneten Matrix durchgeführt werden. D.h. beginnend von werden rekursiv die Optimierungsentscheidungen zurückverfolgt. Im Pseudocode ist der Backtrace-Algorithmus:

string backtrace(i, j):
  if i>0 && D[i-1,j] + 1 == D[i,j]
    return backtrace(i-1, j) + " Löschung "
  if j>0 && D[i,j-1] + 1 == D[i,j]
    return backtrace(i, j-1) + " Einfügung "
  if i>0 && j>0 && D[i-1, j-1] + 1 == D[i,j]
    return backtrace(i-1, j-1) + " Ersetzung "
  if i>0 && j>0 && D[i-1, j-1]  == D[i,j]
    return backtrace(i-1, j-1) + " Gleichheit "
  return "" target="_blank" rel="nofollow"

Um d​en Pseudo-Code z​u vereinfachen, w​ird nur e​in möglicher Backtrace berechnet.

Beispiel

Das Verfahren lässt s​ich nun leicht i​n einer Tabelle durchführen. Hier e​in Beispiel m​it den beiden Zeichenketten „Tier“ u​nd „Tor“.

  ε T o r
ε 0 1 2 3
T 1 0 1 2
i 2 1 1 2
e 3 2 2 2
r 4 3 3 2

Der Abstand d​er beiden Zeichenketten i​st 2. ε s​teht hierbei für d​ie leere Zeichenkette "" target="_blank" rel="nofollow".

Komplexität

Die Laufzeit des Algorithmus ist in O, da alle Zellen der -Matrix berechnet werden und der Rechenaufwand pro Zelle konstant ist.

Der Speicherbedarf ist in , da die Matrix Zeilen und Spalten hat. Wenn allerdings kein Backtracing durchgeführt wird, dann wird zur zeilen- bzw. spaltenweisen Berechnung der Matrix nur die jeweils letzte Zeile bzw. Spalte zur Berechnung der nächsten Zeile bzw. Spalte benötigt. Der Speicherbedarf liegt in dem Fall also in .

Der Hirschberg-Algorithmus ermöglicht d​ie Berechnung d​er Levenshtein-Distanz u​nd eines „Backtrace“ i​n quadratischer Zeit u​nd mit linearem Speicherverbrauch.

Schranken

Für d​ie Levenshtein-Distanz gelten einige o​bere und untere Schranken:

  • sie beträgt mindestens den Unterschied der Längen beider Zeichenketten
  • sie beträgt höchstens die Länge der längeren Zeichenkette
  • sie ist dann und nur dann 0, wenn beide Zeichenketten identisch sind (Definition Metrik)
  • sie ist nicht größer als die Hamming-Distanz plus dem Längenunterschied der Zeichenketten

Abgrenzung

Die Levenshtein-Distanz k​ann als Erweiterung d​es Hamming-Abstands angesehen werden, welcher s​ich auf Ersetzungen beschränkt u​nd daher n​ur Zeichenketten gleicher Länge bemessen kann. Eine Phonetische Suche k​ann die Levenshtein-Distanz verwenden, u​m Fehler z​u erlauben. Zu vergleichende Wörter können v​or einer Distanzberechnung beispielsweise m​it dem Kölner-Phonetik- o​der dem Soundex-Algorithmus i​n eine Lautsymbol-Zeichenkette überführt werden.

Der DP-Algorithmus zur Berechnung der Levenshtein-Distanz ist mit dem Needleman-Wunsch-Algorithmus zur Berechnung des Sequenzalignments zweier Zeichenketten verwandt. Der Needleman-Wunsch-Algorithmus ist in und lässt beliebige Kostenfunktionen für Einfüge- bzw. Löschoperationen der Länge zu. Bei dem Levenshtein-Algorithmus besteht eine Einfüge- bzw. Löschoperation aus maximal einem Zeichen. Varianten des Needleman-Wunsch Algorithmus beschränken die Wahl der Kostenfunktion, so dass deren Laufzeit in liegt.

Der Smith-Waterman-Algorithmus optimiert die Kosten der Edit-Operationen nach dem gleichen DP-Schema wie der Needleman-Wunsch- bzw. der Levenshtein-Algorithmus, allerdings werden Einfüge- bzw. Lösch-Operationen am Anfang- bzw. Ende einer Sequenz mit bewertet und im Backtrace ignoriert. D.h. der Smith-Waterman-Algorithmus berechnet das lokale „sequence alignment“. Seine Laufzeit liegt in .

Die Levenshtein-Distanz k​ann als Sonderform d​er Dynamic-Time-Warping-Distanz (DTW) betrachtet werden.

Varianten

Gewichtete Levenshtein-Distanz

Die Kosten d​er einzelnen Einfüge-, Lösch- u​nd Ersetzungsoperationen können a​uch unterschiedlich o​der sogar abhängig v​on den jeweiligen beteiligten Zeichen gewichtet werden. Das s​o verallgemeinerte Verfahren w​ird als gewichtete Levenshtein-Distanz, Weighted Levenshtein Distance o​der kurz WLD-Algorithmus bezeichnet.

Ein Beispiel für gewichtete Kosten für Distanzoperationen, d​ie mit d​em WLD-Algorithmus minimiert werden können, s​ind die Kosten d​er Schreibmaschinendistanz.

Damerau-Levenshtein-Distanz

Damerau-Levenshtein erweitert die Funktionalität von Levenshtein um die Fähigkeit, zwei vertauschte Zeichen zu identifizieren, beispielsweise „Raisch“ ↔ „Rasich“. Um die eine Zeichenfolge in die andere zu überführen, wären mit Levenshtein zwei Operationen notwendig. Damerau-Levenshtein benötigt nur eine einzige.

Folgende Matrix-Rekurrenzen spezifizieren d​ie Algorithmus-Variante.

,
,

Wobei die Kosten für eine Vertauschung von zwei Zeichen bezeichnet.

Siehe auch

Literatur

  • Fred J. Damerau: A technique for computer detection and correction of spelling errors. In: Communications of the ACM. Band 7, Nr. 3, März 1964, S. 171–176.
  • Vladimir I. Levenshtein: Binary codes capable of correcting deletions, insertions, and reversals. In: Doklady Akademii Nauk SSSR. Band 163, Nr. 4, 1965, S. 845–848 (russisch, Englische Übersetzung in: Soviet Physics Doklady, 10(8) S. 707–710, 1966).
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. The authors of the article are listed here. Additional terms may apply for the media files, click on images to show image meta data.