Python :: Aufgabe #104
1 Lösung

Zeichensatz zu Umlauten
Fortgeschrittener - Python
von J_U_B
- 16.03.2016 um 10:03 Uhr
Es soll ein Programm geschrieben werden, welches Zeichensätze aus einem String - wie zum Beispiel "AE", "OE", "UE" oder "SS" - in die Entsprechenden Umlaute umwandelt - "AE" zu "Ä", "OE" zu "Ö" u.s.w.
Hierbei sollte auf die Korrekte Umsetzung der Wörter geachtet werden, hierfür einige Beispiele:
STOSSDAEMPFER = STOßDÄMPFER
STEUERKETTE = STEUERKETTE
KASSE = KASSE
HUELSE = HÜLSE
u.s.w.
Hierbei sollte auf die Korrekte Umsetzung der Wörter geachtet werden, hierfür einige Beispiele:
STOSSDAEMPFER = STOßDÄMPFER
STEUERKETTE = STEUERKETTE
KASSE = KASSE
HUELSE = HÜLSE
u.s.w.
Lösungen:
Die Lösung verwendet das PyEnchant-Modul für einen Wörterbuchabgleich.
Die Funktion "umlaut_variants" generiert alle möglichen - auch unsinnigen - Varianten eines Wortes durch Ersetzen der Umlaute.
Die so erzeugte Variantenliste wird gegen das Wörterbuch abgeglichen (Funktion "replace_umlauts"), der erste Treffer gewinnt.
Beispiele:
Nicht immer findet sich ein passender Begriff im Wörterbuch:
Python-Code
Die Funktion "umlaut_variants" generiert alle möglichen - auch unsinnigen - Varianten eines Wortes durch Ersetzen der Umlaute.
Die so erzeugte Variantenliste wird gegen das Wörterbuch abgeglichen (Funktion "replace_umlauts"), der erste Treffer gewinnt.
Beispiele:
Konsolenausgabe:
Geben Sie einen Satz oder ein Wort ein: Stossdaempfer
Stoßdämpfer
Geben Sie einen Satz oder ein Wort ein: Steuerduese
Steuerdüse
Geben Sie einen Satz oder ein Wort ein: Kasse
Kasse
Geben Sie einen Satz oder ein Wort ein: Huelse
Hülse
Geben Sie einen Satz oder ein Wort ein: Guenther schoepft Gemuesebruehe mit dem Schoepfloeffel.
Günther schöpft Gemüsebrühe mit dem Schöpflöffel.
Geben Sie einen Satz oder ein Wort ein: Der Hoehlenbaer liebt die Fruehlingsbluemchen.
Der Höhlenbär liebt die Frühlingsblümchen.
Nicht immer findet sich ein passender Begriff im Wörterbuch:
Konsolenausgabe:
Geben Sie einen Satz oder ein Wort ein: Fruehblueher
Fruehblueher
Geben Sie einen Satz oder ein Wort ein: Schoepfgefaess
Schoepfgefaess

#!/usr/bin/python3 # import enchant umlauts = { 'ae':'ä', 'Ae':'Ä', 'oe':'ö', 'Oe':'Ö', 'ue':'ü', 'Ue':'Ü', 'ss':'ß' } def next_umlaut(word): findres = [ (word.find(uml), uml) for uml in umlauts.keys() ] umlpos = [ (p, u) for (p, u) in findres if p >= 0 ] if len(umlpos) > 0: return min(umlpos) else: return (-1, '') def umlaut_variants(word, wlist): wlen = len(wlist) (pos, uml) = next_umlaut(word) if pos >= 0: wslice = word[:pos+len(uml)] rslice = wslice.replace(uml, umlauts[uml], 1) if wlen == 0: wlist.append(wslice) wlist.append(rslice) else: for i in range(0, wlen): wlist.append(wlist[i] + rslice) wlist[i] += wslice umlaut_variants(word[pos+len(uml):], wlist) else: if wlen == 0: wlist.append(word) else: for i in range(0, wlen): wlist[i] += word def replace_umlauts(word, dictionary): word_list = [] umlaut_variants(word, word_list) for variant in word_list: if dictionary.check(variant) == True: return variant return word #main if enchant.dict_exists("de_DE"): dict_ger = enchant.Dict("de_DE") while True: instring = input("Geben Sie einen Satz oder ein Wort ein: ") if instring == "": break for word in instring.split(): new_word = replace_umlauts(word, dict_ger) print(new_word, end=" ") print("") else: print("Deutsches Wörterbuch nicht verfügbar!")