Frage

Für niederländisch sprechende Leute werden die beiden Charaktere "ij" als ein einzelner Buchstaben angesehen, der leicht mit "Y" ausgetauscht wird.

Für ein Projekt, an dem ich arbeite, möchte ich eine Variante der Damerau -Levenshtein -Entfernung Das berechnet den Abstand zwischen "ij" und "y" als 1 anstelle des aktuellen Wertes von 2.

Ich habe das selbst ausprobiert, aber gescheitert. Mein Problem ist, dass ich keine Ahnung habe, wie ich mit der Tatsache umgehen soll, dass beide Texte unterschiedliche Längen haben. Hat jemand einen Vorschlag/Code -Fragment, wie man dies lösen kann?

Vielen Dank.

War es hilfreich?

Lösung

Der Wikipedia -Artikel ist ziemlich locker mit Terminologie. Es gibt keine Dinge wie "Saiten" in "natürlicher Sprache". Es gibt Phoneme in der natürlichen Sprache, die durch geschriebene Zeichen und Charakterkombinationen dargestellt werden können.

Einige Charakterkombinationen sind Überreste historischer Konventionen, die bis in die Neuzeit überlebt haben, wie im modernen englischen "rauen", bei dem das "GH" nach -F- oder überhaupt keinen Ton machen kann. Es scheint mir, dass der Algorithmus bei der Konzentration auf rohe "Strings" in Bezug auf die historische Beziehung der Sprache und der orthografischen Konvention zu einigen willkürlichen Metriken, wenn die Charakterkombinationen zu einem einzelnen Phonem korrelieren, zu einigen willkürlichen Metriken führen. Wie würde es "rau" zu "RUF" messen? Oder "durch" zu "durch"? Oder deutsches O-umlaut zu "OE"?

In Ihrem Fall kann das -y- und orthografisch mit -IJ- ausgetauscht werden. Was ist das nach dem Algorithmus, zwei Deletionen, gefolgt von einer Einfügung oder einer einzigen Löschung des -j- oder der -i -I -, gefolgt von einer Transposition des verbleibenden Charakters zu -y-? Oder ist es zusammengesucht und auf die Koaleszenz folgt eine Transposition?

Ich würde empfehlen, dass Sie einen anderen nicht verwendeten Comnbining -Charakter für -Ij- verwenden, bevor Sie den Algorithmus anwenden, vielleicht U00EC, lateinischer kleiner Buchstaben I mit schwerem Akzent.

Wie handelt der Algorithmus mit mehrkennbaren Körpern?

Andere Tipps

Nun, die DL -Entfernung selbst wird sie nicht für Sie behandeln, da sie Entfernungen misst.

Da hier kein Code (oder eine Sprache) vorhanden ist, kann ich Sie nur einen Vorschlag lassen, um sicherzustellen, dass alle Zeichenfolgen an derselben Struktur haften.

Um die Situation zu klären, seit Sie allgemein gefragt haben, sind

Denken Sie daran, dass die DL -Distanz den Charakter für den Charakter vergleicht und Ihre Saiten nicht in sich selbst liest. Als solche müssen Sie vor dem Vergleichen analysieren, da Fälle, in denen IJ nicht mit Y ausgetauscht werden sollte, stattdessen andere Probleme verursachen.

Eine Idee ist es, jede Saite in eine Art konstruierte orthographemische Darstellung zu übersetzen, bei der Digraphen wie "IJ" und das englische "GH" "Th" und Freunde nur ein Charakter lang sind. Die Entfernungsmetrik muss bei Damerau-Levenshtein nicht gleich für alle Arten von Replikationen sein .

Dies bricht jedoch, wenn der "IJ" nicht als "IJ" gedacht war, sondern als Rechtschreibfehler oder an einer Wortsegmentierungsgrenze (ich weiß nicht, ob dies auf Niederländisch passieren kann) oder in jeder anderen Situation nicht tatsächlich (gemeint als) ein Digraph.

Andernfalls müssen Sie etwas aussehen, dies wird die Dinge erschweren, sollte jedoch die Wachstumsreihenfolge des Algorithmus (glaube ich) nicht ändern, vorausgesetzt, Sie betrachten nur die ständige Anzahl von Zellen. Die ständigen Faktoren werden jedoch immer noch viel größer sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top