Der Algorithmus von Levenstein basiert auf der Anzahl der Einfügungen, Löschungen und Ersetzungen in Zeichenfolgen.
Leider wird ein häufiger Rechtschreibfehler nicht berücksichtigt, der die Umsetzung von 2 Zeichen ist (z. B. Someawesome vs Someaewsome). Daher würde ich den robusteren Damerau-Levenstein-Algorithmus vorziehen .
Ich halte es nicht für eine gute Idee, den Abstand auf ganze Saiten anzuwenden, da die Zeit mit der Länge der verglichenen Saiten abrupt zunimmt. Aber noch schlimmer, wenn Adresskomponenten wie ZIP entfernt werden, stimmen möglicherweise ganz andere Adressen besser überein (gemessen mit dem Online-Levenshtein-Rechner ):
1 someawesome street, anytown, F100 211 (reference)
1 someawesome st.,anytown (difference of 15, same address)
1 otherplaces street,anytown,F100211 (difference of 13, different ddress)
1 sameawesome street, othertown, CA98200 (difference of 13, different ddress)
anytown, 1 someawesome street (28 different same address)
anytown, F100 211, 1 someawesome street (37 different same address)
Diese Effekte verschlechtern sich bei kürzeren Straßennamen.
Verwenden Sie daher besser intelligentere Algorithmen. Zum Beispiel hat Arthur Ratz auf CodeProject einen Algorithmus für den Vergleich intelligenter Texte veröffentlicht. Der Algorithmus gibt keinen Abstand aus (er kann durchaus entsprechend angereichert werden), identifiziert jedoch einige schwierige Dinge wie das Verschieben von Textblöcken (z. B. den Wechsel zwischen Stadt und Straße zwischen meinem ersten und meinem letzten Beispiel).
Wenn ein solcher Algorithmus für Ihren Fall zu allgemein ist, sollten Sie wirklich nach Komponenten arbeiten und nur vergleichbare Komponenten vergleichen. Dies ist keine einfache Sache, wenn Sie ein Adressformat auf der ganzen Welt analysieren möchten. Aber wenn das Ziel spezifischer ist, sagen wir mal US, ist es mit Sicherheit machbar. Zum Beispiel könnten "Straße", "Str.", "Ort", "Platz" und ihre üblichen Rechtschreibfehler den Straßenteil der Adresse enthüllen, dessen führender Teil im Prinzip die Nummer wäre. Die Postleitzahl würde helfen, die Stadt zu finden, oder alternativ ist es wahrscheinlich das letzte Element der Adresse, oder wenn Sie nicht raten möchten, könnten Sie nach einer Liste von Städtenamen suchen (z. B. Herunterladen einer kostenlosen Postleitzahl-Datenbank). Sie können dann Damerau-Levenshtein nur auf die relevanten Komponenten auftragen.