Levenshtein Distanz

Getting started ... Alles für einen gelungenen Start.
10 Beiträge • Seite 1 von 1
10 Beiträge Seite 1 von 1

Levenshtein Distanz

Beitrag von pohlmann-schwarza (ForumUser / 91 / 0 / 0 ) »
Hallo Leute,

gibt es eine fertige Funktion in ABAP die mir die Levenshein-Distanz zweier Zeichenketten zurückgibt?

Ich benötige ein Maß für die Ähnlichkeit von Zeichenketten. Wenn jemand eine andere Idee hat, wäre ich auch sehr dankbar.

Viele Grüße
Michael

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
Meine Gütte!
Ich hab erstmal nachgoogeln müssen, um zu wissen was du willst.

Aber die grössere Frage ist eher, für was brauchst du das?
Ich wüsste jetzt spontan keine einzige Situation wo das in einem Betriebswirschaftlichen System (was ja SAP ist) von nöten wäre.

Beitrag von uh (Specialist / 158 / 0 / 1 ) »
Hi,

willst du eine Suchhilfe auf Namen/Texte implementieren, die auch mit der Distanz arbeitet?

Beitrag von black_adept (Top Expert / 4134 / 131 / 956 ) »
Ist zwar nicht die Levenshtein-Distanz - aber ich hab mal vor Jahren um einen Abgleich von diversen Daten durchgeführt indem mich mir eine Funktion der ABAP-Syntaxanalyse geschnappt habe.


FuBau: RS_COMPARE_WORDS_SIMILAR


@Deathguardian: Abgleich von Debitoren/Kreditoren o.ä. wäre ein Punkt wo man sowas gebrauchen kann ( s.o.)
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von pohlmann-schwarza (ForumUser / 91 / 0 / 0 ) »
Hallo zusammen, ich habe die Aufgabe den Inhalt einer Datenbank mit dem Inhalt einer Excel-Datei abzugleichen. Die Excel-Datei wurde 3 Jahre lang parallel zur Datenbank gepflegt und enthält zusätzliche wichtige Informationen. Da die Excel Tabelle nun abgeschafft werden soll, ist es notwendig die Informationen mit Bezug auf die bestehende Datenbank zu speichern. Ziel ist es eine zweite Datenbank anzulegen die die bestehende ergänzt und über ihren Schlüssel eindeutig zuordenbar ist.

Für den Vergleich gibt es 5 ?in etwa gleiche? Spalten. Das ?in etwa? bereitet mir nun Schwierigkeiten. Es können sich beispielsweise Tippfehler eingeschlichen haben, womit kein direkter Vergleich mehr möglich ist.
Nun ist die Idee über eine Gewichtung der Ähnlichkeit der Einträge die Zugehörigkeit einzugrenzen.

RS_COMPARE_WORDS_SIMILAR
Schau ich mir gleich mal an. Danke für den Tipp.

Viele Grüße
Michael

Beitrag von pohlmann-schwarza (ForumUser / 91 / 0 / 0 ) »
Also RS_COMPARE_WORDS_SIMILAR sieht auf den ersten Blick ganz gut aus.
Weis jemand was für ein Vergleichs-Verfahren dabei verwendet wird.

Viele Grüße
Michael

Beitrag von black_adept (Top Expert / 4134 / 131 / 956 ) »
Hallo Michael,

hab grad mal in den Code geschaut - und das Verfahren sieht mir ganz übel nach Levenshtein aus. Allerding gibt SAP nur einen gewichteten Wert heraus, aus dem du dir eigentlich die Levenshtein-Distanz einfach zurückrechnen kannst.

Hab mal kurz ein Demoprog geschrieben und mit der Seite hier
http://odur.let.rug.nl/~kleiweg/lev/ verglichen und es kommt bei meinen 3 Beispielen dasselbe raus.

Code: Alles auswählen.

REPORT LINE-SIZE 1000.

DATA: levenshtein TYPE i.

PARAMETERS: p1 TYPE text80 DEFAULT 'Bart Simpson',
            p2 TYPE text80 DEFAULT 'Homer Simpson'.

CALL FUNCTION 'RS_COMPARE_WORDS_SIMILAR'
  EXPORTING
    word1                     = p1
    word2                     = p2
*   WORD_DISTANCE_LIMIT       = 30
 IMPORTING
   word_distance             = levenshtein.

levenshtein = levenshtein * ( strlen( p1 ) + strlen( p2 ) ) / 100.
WRITE:/ p1,
      / p2,
      / levenshtein.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von pohlmann-schwarza (ForumUser / 91 / 0 / 0 ) »
Ja, dass sieht schon sehr nach Levenshtein aus. Allerdings sind die Kosten in der Demo deines Links nicht auf '1'. Wodurch meiner Meinung nach nicht wirklich die Levenstein-Distanz bestimmt wird. Bzw. nur in angepasster Form.

insert = 1
substitution = 2
swap = 1000

Um wirklich die Levenshtein Distanz zu bestimmen, müssen diese Werte alle auf 1 stehen. Die 'Kosten' für das ersetzen/swap wären in diesem Fall ja so hoch das es gar nicht möglich wäre eine Buchstaben zu ersetzen. Die Routine arbeitet somit nur mit den Operationen Einfügen und Löschen. Daraus folgt, dass sie automatisch mehr Schritte für die Distanz ermittelt.

Leider reichen meine Kenntnisse in ABAP nicht aus, bzw. bräuchte ich viel Zeit um den Code der Funktion 'RS_COMPARE_WORDS_SIMILAR' zu verstehen. Ich denke dass diese Distanzbestimmung ebenfalls nur die Operationen Einfügen und Löschen benutzt. Daher bekommt man auch die gleichen Ergebnisse wie auf der Webseite.

Bin weiterhin für alle Tipps oder Berichtigungen meiner Vermutungen dankbar.

Viele Grüße
Michael

Beitrag von black_adept (Top Expert / 4134 / 131 / 956 ) »
Hallo Michael,

was passiert denn, wenn nicht alles auf 1 sitzt sondern etwas anders so wie SAP das berechnet( oder der Link, den ich in der Wikipedia gefunden hatte)?
Die etwas anders gewichteten Parameter definieren zwar eine etwas andere Metrik - aber ich denke mal es ist völlig egal was für eine Topologie du verwendest, solange brauchbare Ergebnisse rauskommen.

Oder hast du dir schon Gedanken gemacht, warum Levenshtein deine Abstände besser beschreibt als die hier verwendete Metrik?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von uh (Specialist / 158 / 0 / 1 ) »
Hallo Michael,

wenn ich mir den Beispielcode in der Wikipedia so anschaue, ist eine Implementierung doch nicht wirklich schwierig. Schnell eine interne Tabelle type i mit Anzahl Zeilen (Länge Wort1+1) * (Länge Wort2 + 1). Get- und Set- Funktionen dazu und die paar Schleifen am Ende sind doch nicht wirklich die Welt. Klar, der Code sieht in ABAP deutlich uneleganter aus aber es soll ja nur tun...

Seite 1 von 1

Aktuelle Forenbeiträge

IBAN und BUT0BK
Gestern von GastX gelöst 4 / 2222
Gewährleistungsende im Equipment
vor 3 Tagen von Yourairld gelöst 8 / 24476
IF mit AND und OR
vor einer Woche von GastX 6 / 12761
Meine Inbox
vor einer Woche von Rabea1103 1 / 10231

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

IBAN und BUT0BK
Gestern von GastX gelöst 4 / 2222
Gewährleistungsende im Equipment
vor 3 Tagen von Yourairld gelöst 8 / 24476
IF mit AND und OR
vor einer Woche von GastX 6 / 12761
Meine Inbox
vor einer Woche von Rabea1103 1 / 10231