Programm für Textvergleich

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Programm für Textvergleich

Beitrag von crishi_crd (ForumUser / 12 / 14 / 0 ) »
Hallo liebe Abapler,

ich bin zurzeit in der Ausbildung zum FiAe und lerne auch die Sprache Abap.
Mein Ausbilder hat mir nun folgende Aufgabe gegeben:
****************************************************************************
In dieser Aufgabe sollen verschiedene Texte von Johann Wolfgang von Goethe mit Texten von Karl May verglichen werden. Der Vergleich soll mit Hilfe eines Programms geschehen, welches für einen bestimmten Text ausgibt:
• aus wievielen Wörtern der Text besteht
• welches die 20 Wörter sind, die am häufigsten verwendet wurden
• wie viele unterschiedliche Wörter benutzt wurden

Es soll eine *.txt - Datei eingelesen werden, in der der Text steht.
****************************************************************************

Meine bisherige Vorgehensweise:

ich habe eine *.txt Datei erstellt und mir ein beliebiges Gedicht von Goethe ausgesucht.
Diese Datei habe ich dann via "GUI_UPLOAD" hochgeladen und in eine itab geschrieben.

Soweit so gut...
Jetzt weiß ich nicht mehr so recht wie ich weiter vorgehen soll.
Arbeite ich jetzt am Besten mit Strings weiter oder doch mit itabs?


Würde mich über ein paar Denkansätze freuen.


LG

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


Re: Programm für Textvergleich

Beitrag von Szel (ForumUser / 5 / 2 / 1 ) »
Ich nehme mal an, dass du pro eingelesenem Wort eine Zeile deiner itab füllst. In diesem Fall würde ich so vorgehen:

1. aus wievielen Wörtern der Text besteht
--> Anzahl der Zeilen der itab (auf Satzzeichen achten)

2. welches die 20 Wörter sind, die am häufigsten verwendet wurden
--> zweite Tabelle mit dem Aufbau: Wort | Anzahl
und diese entsprechend füllen und auswerten (doppelte Einträge vermeiden)

3. wie viele unterschiedliche Wörter benutzt wurden
--> Tabelle aus 2. verwenden

Gruß

Folgende Benutzer bedankten sich beim Autor Szel für den Beitrag:
crishi_crd


Re: Programm für Textvergleich

Beitrag von a-dead-trousers (Top Expert / 4483 / 231 / 1205 ) »
Einen Text anhand eines oder mehrerer Trennzeichen aufzutrennen ist in ABAP auch möglich (nicht das du die einzulesende Datei vorher "speziell" formatieren musst):

Code: Alles auswählen.

REPLACE ALL OCCOURRENCES (OF REGEX ...) IN ... WITH ...
SPLIT ... AT ... INTO TABLE ...
Das sind die beiden Befehle die du dafür nutzen musst. Du fragst jetzt sicher wie, aber das musst du schon selbst herausfinden (damit du auch was lernst :wink: )
Ach ja, das REGEX ist optional, hilft aber ungemein bei der Lösung, sodass man wirklich nur mit zwei Befehlen auskommt.

lg ADT

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

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: Programm für Textvergleich

Beitrag von crishi_crd (ForumUser / 12 / 14 / 0 ) »
Moin,

erstmal Danke für die Antworten.
Sie war bis jetzt sehr hilfreich. :)

Mein Coding bis jetzt:
text_vergleich_001.jpg
Allerdings komme ich jetzt nicht weiter.
Ich möchte jetzt die Einträge die öfter vorkommen in eine itab speichern. (ls_twenty_words).

Das zuweisen ist ja erstmal kein Problem. Ich muss mir nur jetzt den eingetragenen ersten Wert merken und den neuen Wert mit dem alten vergleichen.
Z.B. ist das erste Wort beim 1. Loop Durchgang "Hallo". Das wird nun weggeschrieben in ls_twenty_words.
Beim zweiten Durchgang muss ich ja dann schauen ob das neue Wort mit Hallo übereinstimmt.
Wenn ja:
erhöhe die Anzahl von "Hallo" in ls_twenty_words um 1.
wenn nicht....

wie kann ich das am Besten umsetzen?
kleiner Anstoß wäre ganz nett :)

LG

Re: Programm für Textvergleich

Beitrag von JHM (Top Expert / 1225 / 2 / 204 ) »
crishi_crd hat geschrieben:wie kann ich das am Besten umsetzen?
Ich würde das mittels "COLLECT ... INTO ..." lösen. (Mehr dazu in der Hilfe zum selber lernen).

Mir fehlt aktuell noch das REPLACE von ADT in deinem Code. Dies wirst du benötigen um Satzzeichen (.,!?) aus dem Text zu entfernen. Ansonsten stehen die Satzzeichen nach dem Split hinter dem Wort und du hast beim Zählen ungleiche Wörter: Beispiel: "Haus" <> "Haus."

Anbei bemerkt es gibt hier im Forum ein Tag um Code formatiert einzufügen, ist dann einfacher zu lesen und zitierbar als dein Bild vom ScourceCode.

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
crishi_crd

Gruß Hendrik

Re: Programm für Textvergleich

Beitrag von crishi_crd (ForumUser / 12 / 14 / 0 ) »
habe das mit den Satzzeichen jetzt so vesucht:

Code: Alles auswählen.

*Text formatieren
  LOOP AT itab.                                     "lv_replace value ',;.:?!'
    REPLACE ALL OCCURRENCES OF REGEX lv_replace IN itab WITH space.    

    SPLIT itab AT space INTO TABLE itab_lines.

    APPEND LINES OF itab_lines TO itab_res.

  ENDLOOP.
ich hab mal versucht das mit einem string zu lösen, funktioniert aber nicht.
wenn ich anstatt des Strings einfach ... REGEX ',' IN... schreibe dann macht er das.
kann man mehrere Zeichen in das Regex "Suchfeld" eingeben?


Das mit den Wörtern zählen hat sich für mich schwieriger als erwartet herausgestellt:

Code: Alles auswählen.


*-----------------------------------------------
*doppelte itab Einträge suchen.
*-----------------------------------------------
  LOOP AT itab_res INTO wa1.


    LOOP AT itab_res INTO wa2
    WHERE values = wa1-values.

*------------------------------------------------
*Werte zuweisen
      IF wa1-values = wa3-values.

        ls_twenty_words-anzahl = ls_twenty_words-anzahl + 1.

      ELSE.

        ls_twenty_words-wort = wa1-values.
        ls_twenty_words-anzahl = ls_twenty_words-anzahl + 1.
      ENDIF.
    ENDLOOP.
    COLLECT wa1 INTO wa3.

  ENDLOOP.
klappt alles nicht so recht, wie ich mir das vorstelle und ja, ich bin mir bewusst, dass ich bestimmt Denkfehler bei der IF-Anweisung habe -.-

LG

Re: Programm für Textvergleich

Beitrag von JHM (Top Expert / 1225 / 2 / 204 ) »
crishi_crd hat geschrieben:klappt alles nicht so recht, wie ich mir das vorstelle und ja, ich bin mir bewusst, dass ich bestimmt Denkfehler bei der IF-Anweisung habe -.-
eigentlich macht COLLECT alles was du willst. Der Textvergleich wird durchgeführt und auch automatisch "gezählt".

Code: Alles auswählen.


* Für jedes Wort des Textes
LOOP AT itab_res INTO wa1.

* Einen neuen Satz aufbauen
  ls_twenty_words-wort = wa1-values.       "Das Wort ist der Key
  ls_twenty_words-anzahl =  1.                  "und kommt genau einmal vor

* Verdichtete ITAB je Wort inkl Anzahl erstellen:
  COLLECT ls_twenty_words INTO lt_twenty_words.
ENDLOOP.
COLLECT schaut beim einfügen in die itab lt_twenty_words ob es schon einen Eintrag für das Wort gibt:
wenn ja, dann wird die Anzahl des neuen Satzes auf den vorhenden Satz addiert
wenn nein, wird ein neuer Satz in die itab eingefügt

Über Performence kann man sich dann später noch Gedanken machen. Wenn der Text sehr groß wird, also die Anzahl der einzelnen Worte sehr groß wird, sollte lt_twenty_words zu einer HASHED TABEL gemacht werden. Das reduziert die Laufzeit (steht aber auch in der Hilfe).

Beim Regex-Ausdruck fehlen die [] um die Zeichen, und das Fluchsymbol \ vor dem Punkt (sonst wird der Punkt nicht als Punkt sondern als Platzhalter angesehen).

Code: Alles auswählen.

REPLACE ALL OCCURRENCES OF REGEX [,;\.:?!] IN itab WITH space. 

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
crishi_crd

Gruß Hendrik

Re: Programm für Textvergleich

Beitrag von ewx (Top Expert / 4916 / 332 / 653 ) »
a-dead-trousers hat geschrieben:Ach ja, das REGEX ist optional, hilft aber ungemein bei der Lösung, sodass man wirklich nur mit zwei Befehlen auskommt.
Auch dahin gehend, dass es "unbekannte" Zeichen gibt, die im Text vorkommen können: »« " () ... „ “
Und wenn man andere Sprachen analysieren möchte, geht's noch weiter mit: ¡¿

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
crishi_crd


Re: Programm für Textvergleich

Beitrag von JHM (Top Expert / 1225 / 2 / 204 ) »
ewx hat geschrieben:Auch dahin gehend, dass es "unbekannte" Zeichen gibt, die im Text vorkommen können: »« " () ... „ “
Und wenn man andere Sprachen analysieren möchte, geht's noch weiter mit: ¡¿
Man könnte auch die Suchlogik ändern und alles was kein Buchstabe ist ersetzten. Bin mir nur gerade nicht sicher, wie das mit RegEx geht und wie man die Sonderbuchstaben aus anderen Sprachen sinnvoll mit einbaut.

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
crishi_crd

Gruß Hendrik

Re: Programm für Textvergleich

Beitrag von crishi_crd (ForumUser / 12 / 14 / 0 ) »
vielen Dank!!

Habe den Rest dann auch noch hinbekommen.
Waren ein paar sehr gute Denkanstöße dabei.


LG

Seite 1 von 1

Vergleichbare Themen

0
Antw.
4111
Views
LSMW Programm in ABAP Programm überführen
von mherke » 07.02.2007 15:02 • Verfasst in ABAP® für Anfänger
3
Antw.
2260
Views
FTP per Programm
von fawkes » 19.10.2007 09:45 • Verfasst in ABAP® Core
2
Antw.
2754
Views
Programm Transportieren
von robin1at » 28.06.2006 11:04 • Verfasst in ABAP® für Anfänger
1
Antw.
6031
Views
Programm RS_CI_DELETE
von commolus » 17.10.2012 16:11 • Verfasst in ABAP® für Anfänger
6
Antw.
11890
Views
Programm Dokumentation
von An Dy » 07.02.2012 15:10 • Verfasst in ABAP® Core

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

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.