Einzelne Wörter aus einem Text in einer Tabelle suchen und im Text ersetzen

ben9016

Mitglied
Thread Starter
Dabei seit
28.10.2016
Beiträge
6
Reaktionspunkte
0
Moin Moin!

Ich bin ein kompletter Newbie in Sachen Automatisierungen in OSX, habe mir allerdings sagen lassen, dass mir da etwas entgeht. Nach Tagen des googlens möchte ich daher auf geübtere Skripter zurückgreifen ;-)

Zum eigentlichen Problem: Ich habe einen Text und eine Tabelle mit zwei Spalten. Ich möchte gerne ein Skript schreiben, dass jedes einzelne Wort des Textes dahingehend überprüft, ob es in Spalte 1 der Tabelle auftaucht. Wenn das der Fall ist, soll das Wort im Text mit dem entsprechenden Wort in Spalte 2 ausgetauscht werden. Wenn keine Übereinstimmung gefunden wird, wird mit dem nächsten Wort weitergemacht. Zum Schluss erfolgt eine Ausgabe des Textes mit den Ersetzungen.

Entweder ich Suche mit den falschen Keywords oder ich habe ein Brett vor dem Kopf, aber ich finde im Netz keinen brauchbaren Ansatz, den ich modifizieren kann. Kann mit jemand mit einem heißen Tipp weiterhelfen?

Vielen Dank im Voraus!

Benny
 
Dein Text ist in welchem Format? und in welchem Format ist die Tabelle?
 
Danke für deine Antwort!
Wahlweise .txt, .docx. oder .pages, da bin ich frei. Die Tabelle sollte eine .csv sein.

Im Großen und Ganzen geht es darum, dass in einem Text nach Anglizismen gesucht werden soll und diese mit den deutschen Äquivalenten ersetzt werden, oder umgekehrt. Auf "Knopfdruck" soll so der Text mit bzw. ohne Anglizismen erscheinen. Die Tabelle mit den deutschen Begriffen und den Anglizismen soll hierbei flexibel erweiterbar sein.
Das nur am Rande, damit der Verwendungszweck klarer wird.
 
Zuerst einmal, nimm am besten ein reines Textformat, damit bist du am flexibelsten, .docx oder andere Formate sind ein Graus, wenn beispielsweise die Textverarbeitung deiner Wahl deine Manipulationen nicht unterstützt. Dann darfst du nämlich die Datei selbst parsen. Reinen Text kann man hingegen mit fast jedem Programm mit relativ geringem Aufwand verarbeiten.
Womit soll der Text denn verarbeitet werden? Ich persönlich würde die Shell nehmen.
 
Danke für den Hinweis!
Wie konkret der Text verarbeitet werden soll ist mir bisher noch schleierhaft. Wie gesagt, ich bin gerade dabei dir verschiedenen Tools zu erkunden und habe aktuell noch jede Menge "Aha"-Effekte, komme bei meinem "Learning by doing"-Projekt jedoch nicht voran.
Ich bin da keineswegs faul und habe schon allerhand konsumiert, mir fehlt aber ein entscheidender "Wink mit dem Zaunpfahl" in Form eines ähnlichen Projektes, damit ich die Befehlsstrukturen nachvollziehen kann.

Edit: Mein Grundgedanke ist, dass es ja quasi nichts anderes ist, als ein Übersetzer und mein Laiendenken sagt mir, dass es da doch schon was ähnliches geben muss, dass umbauen und mit meinen Daten füttern kann.
 
Also das Programm sollte deine Liste von Woertern durchgehen, und in dem Text ein "Suchen und Ersetzen" durchfuehren fuer alle Eintraege, oder?
 
Genau, mal ganz knapp als Beispiel:
Ursprungstext: "Heutzutage nutzt fast jeder ein Handy."

Tabelle:
tricky | kompliziert
chillen | ausruhen
Handy | Mobiltelefon

Das Script soll nun "heutzutage" nehmen und die erste Spalte hiernach durchsuchen. Kein Treffer, also bleibt es so. Dann dasselbe bei "nutzt" usw. Dann "Handy", Treffer, im Text wird "Handy" mit "Mobiltelefon" ersetzt.

Textausgabe am Ende: "Heutzutage nutzt fast jeder ein Mobiltelefon."

Im Idealfall soll die Tabelle dann, nach Monaten der Ergänzungen, ein paar 100 Begriffe erhalten und vollautomatisch diese Ersetzungen bei Texten vornehmen können.
 
Damn, ein WIN-Programm haett ich dir jetzt evtl. nennen koennen :D
Sitze momentan nicht am Mac um was zu testen, melde mich nochmal. Denn dieser Ansatz hier laesst sich schonmal weiterverfolgen finde ich ...
 
Geht klar, ich harre aus und schau mir das schon mal an. Habt vielen dank für die Antworten bisher, top Forum!
 
Sorry ich bin leider nicht bei meinem Mac ... :( komm erst am Sonntag wieder heim. Kam heute zu nix mehr und bin auf Heimataufenthalt.
 
Im Großen und Ganzen geht es darum, dass in einem Text nach Anglizismen gesucht werden soll und diese mit den deutschen Äquivalenten ersetzt werden, oder umgekehrt.
:kopfkratz: Mal was anderes: Wie soll das bei einfachen Prüfalgorithmen funktionieren?
Du gelangst doch tief in den Bereich der Semantik. Wie willst du beim automatischen Austausch sicherstellen, dass der Ersatz im Kontext ideomatisch ist?

Steht im deutschen Satz »Handy« (eine deutsche Erfindung auf Basis eines englischen Adjektivs, so gesehen gar kein »richtiger« Anglizismus), kommt noch »Mobiltelefon« infrage, was aber nun auch wieder ein lateinisch-griechisches Gemisch ist. Und »Taschenfernsprechgerät« (o.ä.) sagt ja wohl niemand.
Ein »Jet« ist mal ein »Strahltriebwerk«, mal ein »Luftstrom«. Ein »Fan« mal ein »Vereinsanhänger«, mal ein »Ventilator«, ähem, ein »Lüfter«.

Wie also sollen bei einem einfachen Listenabgleich Sätze wie folgende verhindert werden?

Der Triebwerkstechniker reparierte den angeflanschten Fan problemlos.
Der Triebwerkstechniker reparierte den angeflanschten Vereinsanhänger problemlos.

Die Unterstützung durch die Fans war überwältigend.
Die Unterstützung durch die Lüfter war überwältigend.
 
Zuletzt bearbeitet:
So, hier mal eine Lösung für die Shell. Zunächst einmal das Skript:

Code:
#!/bin/bash

rm Ausgabe.txt

while read linie; do
    while IFS=',' read -r suche ersetze; do
        linie=${linie//$suche/$ersetze}
    done < Tabelle.csv
    echo $linie >> Ausgabe.txt
done < Eingabe.txt

Dieses Skript kann man beispielsweise als Skript.sh in einem ansonsten leeren Ordner anlegen. In diesen Ordner kopiert man nun die beiden Dateien Eingabe.txt und Tabelle.csv. Die erste Datei enthält den Text als reinen Text, letztere die Tabelle mit den zu ersetzenden Worten im CSV Format. Zum Ausführen navigiert man im Terminal zunächst per "cd" in den Ordner mit dem Skript und den beiden Dateien und führt das Skript beispielsweise per "sh Skript.sh" aus. Wichtig, die Ausgabe (d.h. der geänderte Text) wird in einer Datei Ausgabe.txt abgelegt. Eine bereits existente Datei in dem Ordner mit dem Namen Ausgabe.txt wird vom Skript gelöscht.

Kleine Anmerkung: Man muss bei der Anwendung vorsichtig sein, denn es wird in dem Textstring aus der Eingabe jeder Teilstring ersetzt, der in Tabelle.csv in der ersten Spalte vorkommt. Wenn man also beispielsweise "den" durch "das" ersetzt, passiert das nicht nur beim Wort "den", sondern beispielsweise auch im Wort "denken", denn das Wort enthält den Teilstring "den". Aus "denken" wird also "dasken". Das sollte man also immer bedenken.
 
word boundaries (regex) gehen mit '\bsuche\b' oder '[[:<:]]suche[[:>:]]'.

lustiger wäre es sicher auch googles translate api anzuzapfen und auf die texte loszulassen. :p
 
Zurück
Oben Unten