Die Phrasen:
Der schnelle Braunfuchs springt über den faulen Hund [A]
und
Der schnelle braune Fuchs springt über den faulen Hund [B]
kann unter Verwendung des Levenshtein-Entfernungsalgorithmus verglichen werden, um die Ähnlichkeit zu bestimmen, indem die minimale Anzahl von Hinzufügungen, Löschungen oder Ersetzungen einzelner Zeichen berechnet wird, die erforderlich sind, um A in B umzuwandeln.
Ich bin interessiert zu wissen, ob es eine Zwischendarstellung oder möglicherweise ein Codierungsschema für die Levenshtein-Entfernung gibt. Nicht für die Verwendung zwischen zwei Phrasen, sondern nur für eine Codierung, die auf eine einzelne Phrase angewendet wird, sodass der Zeichenindex die Vergleiche nicht beeinflusst.
In B fehlt das 'q' im Vergleich zu A. Ein normaler Zeichenfolgenvergleich würde übereinstimmen 'The '
und dann 'uick brown fox...'
nur aufgrund eines einzelnen Zeichenversatzes fehlschlagen . Die Levenshtein-Entfernung könnte verwendet werden, um sie mit der ursprünglichen Phrase A zu vergleichen, um einen verzeihenderen Vergleich zu ermöglichen, aber in meinem Fall habe ich nicht zwei Phrasen, nur eine.
Also, ich bin für irgendeine Art von eindeutig Codierung einen Satzes in der Suche Pakete von Informationen, wenig Atome der Wahrheit (ich denke , ein Paket pro Charakter?) , Die eine lokale Ordnung halten und so weiter, aber wenn einige der Pakete falsch sind, wirkt sich dies nicht auf spätere Zeichen aus.
Jede eindeutige Phrase sollte einer und nur einer eindeutigen Codierung / Zwischendarstellung zugeordnet werden, Sets A'
und B'
. Die Berechnung des Levenshtein-Abstands von A und B wäre dann dasselbe wie die Berechnung des Schnittpunkts von Mengen A' = B'
.
Alternativ - wenn dieses Problem keine Lösung hat (und dies sicher einem ausgetretenen Forschungsbereich entspricht, wäre ich nicht überrascht), ein überzeugendes Argument / Beweis für seine Unlösbarkeit.
quelle
Antworten:
In diesem Sinne gibt es in der Tat einige Untersuchungen zur Bearbeitungsentfernung mit einigen positiven und einigen negativen Ergebnissen. (Ich verstehe die Frage möglicherweise nicht genau, daher werde ich versuchen, Fragen zu beantworten, die ich beantworten kann.)
Es gibt sicherlich mehr Literatur in diesem Sinne, aber lassen Sie mich zuerst wissen, ob dies irgendwo in der Nähe von dem ist, was Sie gemeint haben.
quelle
Wenn das einzige, was passieren kann, ist, dass Zeichen verschwinden, müssen Sie meines Erachtens nur das längste häufig auftretende Subsequenzproblem lösen . (Eine Teilsequenz ist eine Verallgemeinerung eines Teilstrings: Es kann mehrere Stellen in der Teilsequenz geben, an denen Material aus der größeren Sequenz entfernt wurde, nicht nur am Anfang und / oder Ende.)
Haben Sie darüber hinaus diese Liste von Metriken gesehen ?
Ich kann Ihre Problemstellung falsch verstehen, aber es scheint mir, dass es möglich sein sollte, nach dem Bezahlen einen ziemlich schnellen Algorithmus zu haben, wenn Sie genau definieren, wie Fehler auftreten können (Löschen, Umsetzen usw.) und dann einen Suffixbaum erstellen die Speicher- und Vorverarbeitungskosten für die Erstellung des Suffixbaums.
quelle
Dies ist nur ein Gedanke, keine Lösung, aber zu lang für einen Kommentar.
Könnte Ihre Menge / Darstellung ein alphabetisches Gebäude der Zeichenfolge sein?
Beispiel (für A):
und so weiter...
Ihre Darstellung wären die Schritte, die Sie unternommen haben, um die Zeichenfolge zu erstellen (in alphabetischer Reihenfolge):
Das Element {a, {1, ^}, {1, $}} repräsentiert Schritt 2, während {d, {1, b}, {1, a}} den 5. Schritt repräsentiert.
Vorausgesetzt, Sie tun dies in jedem Fall alphabetisch, haben Sie möglicherweise etwas, das Sie verwenden können.
Ein ergänzender Gedanke: Beginnen Sie mit genügend Kopien jedes Buchstabens "abcdd" (für die ersten 4) und verfolgen Sie dann Ihre Transpositionen, um die Zeichenfolge zu erstellen. Wir bewegen uns jetzt vage in die Permutationstheorie.
[Übrigens, es ist "Sprünge", nicht "Sprünge", sonst gibt es keine "s" - ja, mir ist klar, dass du nie gesagt hast, dass es ein Pangram ist]
quelle
Es klingt für mich so, als ob Ihre einfache Sache funktionieren sollte. Jedes Paket enthält die Position und das Zeichen, z
The = <1, T>, <2, h>, <3, e>
Dann vergleichen Sie das erste Paar von A mit dem ersten Paar von B usw. Dies sollte Ihnen Levenshtein geben.
quelle