Wörter mit Umlauten aus Textdatei entfernen

Goya

Mitglied
Thread Starter
Dabei seit
18.07.2011
Beiträge
87
Reaktionspunkte
0
Hallo.

Ich habe eine Textdatei aus der ich sämtliche Wörter die Umlaute (ä,ö,ü) enthalten entfernen möchte. Wie kann ich das am besten lösen?
 
suchen - ersetzen :noplan:


/edit: ach die ganzen Wörter? :kopfkratz:
Mit welchem Sinn? Die werden ersatzlos gelöscht?
 
Genau. Einfach ersatzlos löschen. Mit suchen und ersetzen komme ich an dieser Stelle nicht wirklich weiter denke ich.
 
PS: Wobei es noch viel besser wäre wenn er die Wörter aus der ersten Datei entfernt und in eine zweite schreibt. Also alle Wörter die Umlaute enthalten aus Datei A ersatzlos entfernen und in eine neue Datei B schreiben.
 
Ein Versuch

Hier ein wilder Versuch (für den Anfang, und nur löschen):

Code:
set txt to "Hier stört ein Text mit einigen Ümläuten."


set w_list to every word of txt
copy w_list to w_list_2
set have_diacriticals to {"ä", "ë", "ï", "ö", "ü", "ÿ"}
set od to AppleScript's text item delimiters
repeat with J from 1 to count w_list_2
	set AppleScript's text item delimiters to have_diacriticals
	set w to item J of w_list_2
	considering diacriticals
		set l to every text item of w
	end considering
	set AppleScript's text item delimiters to "ᚄ"
	set w to l as text
	set item J of w_list_2 to w
end repeat
set word_list to {}
repeat with J from 1 to count w_list_2
	set w to item J of w_list_2
	if w contains "ᚄ" then
		copy item J of w_list to end of word_list
	end if
end repeat
set AppleScript's text item delimiters to word_list
considering diacriticals
	set l to every text item of txt
end considering
set AppleScript's text item delimiters to ""
set r to l as text
set AppleScript's text item delimiters to od
r

Gruß, Jürgen

Ich vergaß zu erwähnen: »ᚄ« ist der Buchstabe Sail aus dem Ogham-Skript. Ich hab einfach mal unterstellt, dass der in Deinen Texten nie vorkommt.
 
Korrektur

Es war spät gestern und ich war müde. Ich hab zwar noch gemerkt, dass irgendwas am Code schräg ist, aber nicht mehr, was. Hier die weniger dumme Fassung:

Code:
set txt to "Hier stört ein Text mit einigen Ümläuten."


set w_list to every word of txt
set have_diacriticals to {"ä", "ë", "ï", "ö", "ü", "ÿ"}
set od to AppleScript's text item delimiters
set AppleScript's text item delimiters to have_diacriticals
set word_list to {}
-- variant for smarter handling of spaces
(*
set word_list_l to {}
set word_list_r to {}
*)

-- find all words with “forbidden” characters
-- and copy them to a new list
repeat with J from 1 to count w_list
	set w to item J of w_list
	considering diacriticals
		set l to every text item of w
	end considering
	if (count l) > 1 then
		set c to item J of w_list
		copy c to end of word_list
		-- variant for smarter handling of spaces
		(*
		copy " " & c to end of word_list_l
		copy c & " " to end of word_list_r
			*)
	end if
end repeat

-- remove forbidden words
considering diacriticals
	
	-- variant for smarter handling of spaces
	(*
	set AppleScript's text item delimiters to word_list_l
	set l to every text item of txt
	set AppleScript's text item delimiters to ""
	set txt to l as text
	set AppleScript's text item delimiters to word_list_r
	set l to every text item of txt
	set AppleScript's text item delimiters to ""
	set txt to l as text
		*)
	set AppleScript's text item delimiters to word_list
	set l to every text item of txt
	set AppleScript's text item delimiters to ""
	set r to l as text
end considering

set AppleScript's text item delimiters to od
r

Jürgen
 
Mit der Shell:

Text mit Satzzeichen:

Code:
echo "Hier stört ein dämlicher, aber schöner Text mit einigen Ümläuten." | sed 's/[A-Za-zäöüÄÖÜß]*[Ä|Ö|Ü|ä|ö|ü][A-Za-zäöüÄÖÜß]*[^,|^\.|^\ ]//g;s/\ \ /\ /g;s/\ \././g;s/\ ,/,/g;'

Text ohne Satzzeichen:

Code:
echo "Hier stört ein dämlicher, aber schöner Text mit einigen Ümläuten." | sed 's/[A-Za-zäöüÄÖÜß]*[Ä|Ö|Ü|ä|ö|ü][A-Za-zäöüÄÖÜß]*[,|\.|\ ]*//g'

Wörter mit Umlauten:

Code:
echo "Hier stört ein dämlicher, aber schöner Text mit einigen Ümläuten." | grep -o '[A-Za-zäöüÄÖÜß]*[Ä|Ö|Ü|ä|ö|ü][A-Za-zäöüÄÖÜß]*'
 
Hallo.

Erstmal vielen Dank für Eure Hilfe.

Noch verstehe ich das nicht ganz.

Ich habe es jetzt gerade mal hiermit getestet:

echo "Hier stört ein dämlicher, aber schöner Text mit einigen Ümläuten." | grep -o '[A-Za-zäöüÄÖÜß]*[Ä|Ö|Ü|ä|ö|ü][A-Za-zäöüÄÖÜß]*'

Dadurch werden mir die Wörter mit Umlauten ausgegeben. Allerdings müssen sie aus einer Quelldatei eingelesen werden, aus dieser entfernt und in eine Zieldatei geschrieben werden.

Wie genau kann ich das mit diesem Code erreichen?

Schönen 1. April Sonntag noch Euch allen!
 
Code:
grep -o '[A-Za-zäöüÄÖÜß]*[Ä|Ö|Ü|ä|ö|ü][A-Za-zäöüÄÖÜß]*' Datei1.txt > Datei2.txt

Analog sollte das auch bei den anderen Sachen funktionieren. Infos zu den Befehlen findest du übrigens immer, wenn du man + Befehl eingibst. Für "man grep" hättest du dann z.B. gefunden:

Code:
SYNOPSIS
       grep [options] PATTERN [FILE...]

options ist im Beispiel -o, dadurch wird nur der Teil ausgegeben, auf den der PATTERN zutrifft. Für den PATTERN, also das Muster, nach dem gesucht werden soll, werden Regular Expressions verwendet (Infos dazu gibt's im Web). Für File wird schlicht der Dateipfad angegeben der zu durchsuchenden Datei. Mit ">" wird die Ausgabe umgeleitet in die danach stehende Datei.

Der Syntax funktioniert bei den meisten Programmen sehr ähnlich, wenn nicht, dann hilft ein Blick ins Manual. Grundsätzliche Befehle wie cat, grep oder sed kennst du ja schon.
 
Leider bin ich immer noch viel zuwenig fit mit shell-scripts... :rolleyes:
Daher habe ich einfach mal Pills "Werkzeuge" in ein AppleScript eingewickelt ;)

Die zu behandelnde Datei heisst hier text.txt und liegt in einem Ordner namens "test" auf dem Desktop.

Code:
set InputDatei to "~/Desktop/test/text.txt"
set OutputDatei_1 to "output1.txt"
set OutputDatei_2 to "output2.txt"

set Pfad to (path to "desk" as string) & "test:"

set Output_1 to (open for access file (Pfad & OutputDatei_1) with write permission)
set Output_2 to (open for access file (Pfad & OutputDatei_2) with write permission)

try
	set txt1 to do shell script "sed 's/[A-Za-zäöüÄÖÜß]*[Ä|Ö|Ü|ä|ö|ü][A-Za-zäöüÄÖÜß]*//g''' " & InputDatei
	set txt2 to do shell script "grep -o '[A-Za-zäöüÄÖÜß]*[Ä|Ö|Ü|ä|ö|ü][A-Za-zäöüÄÖÜß]*' " & InputDatei
	
	write txt1 to Output_1
	close access Output_1
	write txt2 to Output_2
	close access Output_2
	
on error
	close access Output_1
	close access Output_2
end try

PS: ich weiss, das ist quick&dirty, aber es erfüllt den gewünschten Zweck ;)
 
Unter Umständen könnte auch folgendes hilfreich sein:

tell application "TextEdit"
set listeB to every word of text 1 of document 1 where it contains "ä" or it contains "ö"
set listeA to every word of text 1 of document 1 where it does not contain "ä" and it does not contain "ö"
end tell
 
Zurück
Oben Unten