Levenshtein-Distanz: wie man besser behandeln Wörter swapping Positionen?

Hatte, habe ich einige Erfolge vergleichen von strings unter Verwendung des PHP - die levenshtein - Funktion.

Jedoch, für zwei Zeichenfolgen, die Teilstrings enthalten, die Positionen getauscht haben, zählt der Algorithmus diejenigen, die als ganz neue Teilstrings.

Beispiel:

levenshtein("The quick brown fox", "brown quick The fox"); //10 differences

werden behandelt, als hätte er weniger in gemeinsamen als:

levenshtein("The quick brown fox", "The quiet swine flu"); //9 differences

Ich würde lieber ein Algorithmus, der sah, dass der ersten beiden wurden mehr ähnlich.

Wie könnte ich mich über die kommenden up mit einem Vergleich-Funktion, die identifizieren können Teilstrings, die gewechselt haben, die position als getrennte zu-Bearbeitungen?

Einen möglichen Ansatz habe ich schon gedacht ist, um alle Wörter in der Zeichenfolge in alphabetischer Reihenfolge, bevor der Vergleich. Dass die ursprüngliche Reihenfolge der Wörter völlig aus dem Vergleich. Ein Nachteil jedoch ist, dass eine änderung nur den ersten Buchstaben eines Wortes können eine viel grössere Störung als eine änderung eines einzigen Buchstaben führen sollte.

Was ich versuche zu erreichen, ist ein Vergleich der beiden Tatsachen über Menschen, die frei sind text-strings, und zu entscheiden, wie wahrscheinlich es ist, diese Fakten zu zeigen die gleiche Tatsache. Die Fakten könnte die Schule jemand besucht, der name von Ihrem Arbeitgeber oder Verleger zum Beispiel. Zwei Datensätze haben die gleiche Schule unterschiedlich geschrieben, Wörter in einer anderen Reihenfolge, zusätzliche Wörter usw., also das matching ist ein wenig unscharf, wenn wir eine gute Vermutung, dass Sie auf die gleiche Schule. So weit es funktioniert sehr gut für die Rechtschreibfehler (ich bin mit einem phoenetic Algorithmus ähnlich metaphone auf der Oberseite von diesem), aber sehr schlecht, wenn Sie wechseln Sie die Reihenfolge der Wörter um, die offenbar gemeinsam in einer Schule: "xxx college" vs "college of xxx".

  • Was ist das Ziel, das Sie erreichen wollen? Levenshtein hat eine theoretisch einfache Methode, zu sagen, kleine Unterschiede und bestimmt zu erkennen, zum Beispiel Tippfehler. Wenn Ihr Ziel anders ist, müssen Sie zuerst finden Sie heraus, eine theoretische Möglichkeit zu sagen, die "Differenz" in Ihrer Bedeutung zwischen den beiden string, dann ist die Umsetzung nur noch eine Frage der Verarbeitung.
InformationsquelleAutor thomasrutter | 2009-05-06
Schreibe einen Kommentar