Levenshtein zählt die Anzahl der Änderungen (Einfügungen, Löschungen oder Ersetzungen), die erforderlich sind, um eine Zeichenfolge in die andere zu konvertieren. Damerau-Levenshtein ist eine modifizierte Version, die Transpositionen auch als Einzelbearbeitungen betrachtet. Obwohl die Ausgabe die ganzzahlige Anzahl von Änderungen ist, kann dies normalisiert werden, um einen Ähnlichkeitswert durch die Formel zu erhalten
1 - (edit distance / length of the larger of the two strings)
Der Jaro-Algorithmus ist ein Maß für gemeinsame Zeichen und beträgt unter Berücksichtigung von Transpositionen nicht mehr als die Hälfte der Länge der längeren Zeichenfolge in der Entfernung. Winkler hat diesen Algorithmus modifiziert, um die Idee zu unterstützen, dass Unterschiede am Anfang der Zeichenfolge signifikanter sind als Unterschiede am Ende der Zeichenfolge. Jaro und Jaro-Winkler eignen sich zum Vergleich kleinerer Zeichenfolgen wie Wörter und Namen.
Die Entscheidung, welche verwendet werden soll, ist nicht nur eine Frage der Leistung. Es ist wichtig, eine Methode auszuwählen, die der Art der zu vergleichenden Zeichenfolgen entspricht. Im Allgemeinen können beide von Ihnen erwähnten Algorithmen jedoch teuer sein, da jede Zeichenfolge mit jeder anderen Zeichenfolge verglichen werden muss. Mit Millionen von Zeichenfolgen in Ihrem Datensatz ist dies eine enorme Anzahl von Vergleichen. Das ist viel teurer als das Berechnen einer phonetischen Codierung für jede Zeichenfolge und das einfache Gruppieren von Zeichenfolgen mit identischen Codierungen.
Es gibt eine Fülle detaillierter Informationen zu diesen Algorithmen und anderen Fuzzy-String-Matching-Algorithmen im Internet. Dieser wird Ihnen einen Anfang geben:
Ein Vergleich der persönlichen Namensübereinstimmung: Techniken und praktische Probleme
Demnach ist die Geschwindigkeit der vier von mir erwähnten Jaro- und Levenshtein-Algorithmen von der schnellsten zur langsamsten:
- Jaro
- Jaro-Winkler
- Levenshtein
- Damerau-Levenshtein
Das langsamste dauert zwei- bis dreimal so lange wie das schnellste. Natürlich hängen diese Zeiten von der Länge der Zeichenfolgen und der Implementierungen ab, und es gibt Möglichkeiten, diese Algorithmen zu optimieren, die möglicherweise nicht verwendet wurden.