String-Match Algorithmen

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

String-Match Algorithmen

Beitrag von ServantOfSonata (ForumUser / 40 / 12 / 0 ) »
Hallo Leute,

ich steh derzeit vor der Frage ob es möglich ist in ABAP String-Matching Algorithmen einzubetten.
Da ich im Endeffekt mit einer riesigen Menge an Daten arbeiten muss, wollte ich zumindest etwas
Performance im Vergleich zur SEARCH Anweisung einsparen und hab mich ein wenig in die String-Matching Algorithmen
Boyer-Moore und KPM eingelesen, wobei ich mir halt nicht sicher bin ob das in ABAP umsetzbar ist.

Gruß
Chris

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


Re: String-Match Algorithmen

Beitrag von black_adept (Top Expert / 4159 / 136 / 960 ) »
Hallo Chris,

evtl. reicht dir ja Levenshtein. Das wurde hier schon mal diskutiert.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: String-Match Algorithmen

Beitrag von ServantOfSonata (ForumUser / 40 / 12 / 0 ) »
Hallo Stefan,

danke erst einmal für die Antwort, allerdings wird Levenshtein wohl nicht reichen.
Um genauer zu werden:

Ich müsste 2 Tabellen (eine ca. 400 Datensätze, die andere 2,5 Mio. Datensätze) miteinander vergleichen
und alle Matches die gefunden werden sollen in einer seperaten Tabelle gespeichert werden.
Sobald ein Teilstring aus der großen Tabelle gefunden wurde der mit dem String aus der kleinen übereinstimmt, soll er
diesem zugeordnet werden.

Beispiel:
Tabelle 1
1; Testname1
2; Testname2
3; Testname4
...
400; Testname450

Tabelle 2
1;name1
2;name2
3;name3 (kein treffer)
...
50000;name450


Neue Tabelle
1;Testname1;name1
2;Testname2;name2
...
400; Testname450;name450



Da ich doch denke, dass es Performance sparen würde hatte ich gerade Boyer für interessant gehalten.

Viele Grüße
Christoph

Re: String-Match Algorithmen

Beitrag von black_adept (Top Expert / 4159 / 136 / 960 ) »
Hallo Christoph,

Levenshtein sucht aber keine Teilstrings sondern gibt einen Ähnlichkeitswert zurück.
Du bemerkst im 1. Posting dass du den ( veralteten Befehl) SEARCH verwenden willst und im 2. Posting, dass du "nur" Teilstrings suchst.
hast du eigentlich mal probiert diese Aufgabe ganz schnöde der DB zu überlassen und deine Suchstrings vorn und hinten mit "*" anzureichern und dann direkt via "SELECT... WHERE IN" zu probieren? Oder im Hauptspeicher halten und Blockweise vergleichen. 4 Millionen Sätze ist doch nicht die Welt und "Teilstring" ist nichts wirklich kompliziertes. Vielleicht ist die Geschwindigkeit ja hinreichend, so dass du gar nix groß programmieren musst.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: String-Match Algorithmen

Beitrag von ServantOfSonata (ForumUser / 40 / 12 / 0 ) »
Naja, also die Anforderungen sind schon so, dass ich im Gegensatz zur normalen Teilstringsuche Performance sparen soll.

Vielleicht hab ich Levenshtein auch nicht korrekt verstanden, meines Erachtens spricht man doch bei Levenshtein von der Distanz und die gibt den Wert zurück, inwiefern sich die Strings unterscheiden. Das würde auf mein Problem aber nicht passen, weil der String zu 100% passen sollte. Dann werden wahrscheinlich noch weitere Treffer gefunden (z.B. Aral, hARALd) die dann aber später rausgefiltert werden. Außerdem hab ich vergessen anzumerken, dass die zweite Tabelle mehrfach durchlaufen werden muss, weil es da drei Namensspalten gibt.

Klar hab ich schon darüber nachgedacht einfach drüberlaufen zu lassen, aber aus den Anforderungen geht klar hervor, dass es performanceoptimiert sein
soll. Daher die Frage ob das möglich ist mit den Algorithmen.

Viele Grüße
Christoph

Re: String-Match Algorithmen

Beitrag von a-dead-trousers (Top Expert / 4484 / 231 / 1205 ) »
HUIII!!! 100% = Gleichheit!
Das wirft meines Erachtens ein gaaanz anderes Licht auf die Sache.

Tabelle X (ein Feld)
Tabelle Y (drei Felder)

Entweder du baust dir eine interne Tabelle auf, wo jedes der drei Felder aus Y in einer eigenen Zeile landet und fragst dann die Tabelle X mit FOR ALL ENTRIES ab.
Oder du baust eine interne Tabelle auf, wo die Einträge der Tabelle X drinnen landen und fragst dann die Tabelle Y DREIMAL mit FOR ALL ENTRIES und jedesmal mit einem anderen Feld ab.

Je nachdem welche der beiden Tabellen weniger Einträge in der Suchtabelle ergeben.

Zumindest würde ich so vorgehen.

lg ADT

P.S.: Bei FOR ALL ENTRIES übrigens bitte immer vorher SORT und DELETE ADJACENT DUPLICATES machen!!!

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
ServantOfSonata

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: String-Match Algorithmen

Beitrag von black_adept (Top Expert / 4159 / 136 / 960 ) »
Hallo Christoph,

ich habe jetzt mal kurz über Boyer-Moore geschaut und mir überlegt wie du das in ABAP umsetzen willst. Aber schon wegen der nicht allzu komfortablen Vergleichsmöglichkeiten des SAP was Stringhandling angeht muss so ein Algorithmus schon richtig was bringen um den Mehraufwand aufzuwiegen. Denn der normale Teilstringvergleich ( IF lv_hauptstring CS lv_suchstring ) wird vom Kernel ausgeführt und deine Implementierung eines Algorithmus im ABAP. Und da du einen Teilstring suchst - wer sagt dir denn, dass SAP im Kernel nicht für den CS-Operator einen der von dir genannten oder einen noch viel tolleren Vergleichsalgorithmus verwendet?

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
ServantOfSonata

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: String-Match Algorithmen

Beitrag von ServantOfSonata (ForumUser / 40 / 12 / 0 ) »
Im Prinzip ist deine Aussage gar nicht mal so verkehrt. Ich hatte mir genau diese Vorgehensweise auch schon überlegt mit den CS, NS-Operatoren zu arbeiten. Bisher habe ich insofern gar nicht darüber nachgedacht, dass da ein erweiterter Algorithmus hinter stecken könnte. Das wäre zumindest eine leichtere Variante als das Pferd vielleicht von hinten aufzuzäumen.

Ich versuche das Ganze erst einmal nach deiner Variante auszuführen und hoffe mal die gewünschten Ergebnisse zu bekommen :)

Danke erst einmal

Re: String-Match Algorithmen

Beitrag von ServantOfSonata (ForumUser / 40 / 12 / 0 ) »
Hallo Leute,

ich bin gerade dabei das Ganze zu testen. Generell funktioniert das Ganze auch in erster Linie auch. Derzeit versuche ich erst einmal mit internen Tabellen und Dummydaten zu arbeiten. Der erste Vergleich mit den Tabellen läuft soweit glatt, nun brauche ich die Ergebnistabelle des ersten Suchlaufs und lasse die gegen eine weitere Tabelle abgleichen, wobei die getroffenen Datensätze rausfliegen sollen. Da ich das Ganze mit den logischen Operatoren versuche, kriege ich zwar mittels Operator "CP" genau die Menge angezeigt die rausfliegen soll, aber im Gegensatz dazu zeigt mir "NP" natürlich nicht genau die anderen Datensätze an.

Wie könnte man das einbinden? Wahrscheinlich markant einfach, aber finden konnte ich dazu iwie nichts :/

Code: Alles auswählen.

LOOP AT itab1.
  LOOP AT itab2.
    IF itab2-name2 CP itab1-name1 OR itab2-name3 CP itab1-name1.
      WRITE: /5 itab1-name1, itab2-name2, itab2-name3.    
    ENDIF.
  ENDLOOP.
ENDLOOP.

*edit* Ich habe meinen Fehler in der Logik mittlerweile gefunden und muss das Ganze ein wenig anders angehen. Falls ich dann nicht weiterkomme, versuche ich noch einmal konkreter zu fragen. :)

Seite 1 von 1

Vergleichbare Themen

12
Antw.
4779
Views
CSV String
von Django90 » 02.10.2017 08:58 • Verfasst in ABAP® für Anfänger
2
Antw.
2301
Views
dynamischer SQL-String
von marlboro_light » 20.08.2006 15:50 • Verfasst in ABAP® Core
5
Antw.
2762
Views
..als String aufbereiten
von supermario73 » 26.05.2008 19:44 • Verfasst in ABAP® für Anfänger
5
Antw.
6811
Views
String nach Hex
von wummy » 26.02.2007 09:11 • Verfasst in ABAP® Core
2
Antw.
2883
Views
# in String suchen
von Thanatos82 » 05.03.2013 13:31 • Verfasst in ABAP® für Anfänger

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.