Beispiel - Textverarbeitung
"Drei Chinesen ..."
Kennst du das Lied "Drei Chinesen mit dem Kontrabass ..."?
Bei diesem Lied werden die weiteren Strophen aus der ersten Strophe gebildet, indem alle vorkommenden Vokale durch einen einzigen (z.B. ein "a") ersetzt werden.
Drei Chinesen mit dem Kontrabass saßen auf der Straße und erzählten sich was. Da kam die Polizei, fragt ‚Was ist denn das?‘ Drei Chinesen mit dem Kontrabass. Dra Chanasan mat dam Kantrabass saßan af dar Straßa and arzahltan sach was. Da kam da Palaza, fragt ‚Was ast dann das?‘ Dra Chanasan mat dam Kantrabass ...
Bei der Bestimmung der weiteren Strophen kommt eine typische Textverarbeitungsoperation ins Spiel: Ersetze in einem gegebenen Text ein bestimmtes Zeichen jeweils durch ein anderes Zeichen.
Wie werden im Folgenden diese und weitere Textverarbeitungsoperationen mit geeigneten Programmen automatisieren. Wir beginnen mit ganz einfachen Operationen.
Eine vordefinierte Funktion zur Längenbestimmung bei Texten
Zur Längenbestimmung von Zeichenketten gibt es in Python eine vordefinierte Funktion len
.
Der folgende Python-Dialog zeigt seine Verwendung:
>>> len('Abrakadara')
10
>>> len('''Drei Chinesen mit dem Kontrabass
sassen auf der Strasse und erzaehlten sich was.
Da kam die Polizei, fragt ‚Was ist denn das?‘
Drei Chinesen mit dem Kontrabass.''')
160
>>> len('''
Drei Chinesen mit dem Kontrabass
sassen auf der Strasse und erzaehlten sich was.
Da kam die Polizei, fragt ‚Was ist denn das?‘
Drei Chinesen mit dem Kontrabass.
''')
162
Aufgabe 2
(a) Führe selbst entsprechende Testaufrufe durch.
(b) Warum unterscheiden sich die beiden letzten Ergebnisse oben im Python-Dialog? Was genau zählt
die Funktion len
?
Eine selbstdefinierte Funktion zur Längenbestimmung bei Texten
Man kann auch selbst eine Funktion zur Bestimmung der Länge einer Zeichenkette definieren:
def laenge(text):
zaehler = 0
for z in text:
zaehler = zaehler + 1
return zaehler
Aufgabe 3
(a) Gib diesen Quelltext in ein neues Programmfenster ein, speichere ihn unter einem geeigneten Namen in einer Datei ab und führe ihn einmal aus. Aber Achtung, im Ausführfenster gibt es zunächst keine Ergebnisse. Diese erhält man erst, wenn die neue Funktion aufgerufen wird. Probiere das selbst aus, z.B. so:
>>> laenge('Abrakadara')
10
>>> laenge('''Drei Chinesen mit dem Kontrabass
sassen auf der Strasse und erzaehlten sich was.
Da kam die Polizei, fragt ‚Was ist denn das?‘
Drei Chinesen mit dem Kontrabass.''')
160
>>> laenge('''
Drei Chinesen mit dem Kontrabass
sassen auf der Strasse und erzaehlten sich was.
Da kam die Polizei, fragt ‚Was ist denn das?‘
Drei Chinesen mit dem Kontrabass.
''')
162
(b) Alternativ hierzu kannst du die Funktionsaufrufe auch als Testprogramm nach der Funktionsdefinition in den Quelltext schreiben. Teste auch diese Version.
# Funktionsdefinition
def laenge(text):
zaehler = 0
for z in text:
zaehler = zaehler + 1
return zaehler
# Funktionsaufruf
text = """
Drei Chinesen mit dem Kontrabass
sassen auf der Strasse und erzaehlten sich was.
Da kam die Polizei, fragt ‚Was ist denn das?‘
Drei Chinesen mit dem Kontrabass.
"""
print(laenge(text))
Eine Funktion zur Bestimmung der Zeichenhäufigkeit in Texten
Wie oft kommt der Buchstabe "i" im Text "Drei Chinesen ..." vor? Mit Hilfe einer selbstdefinierten Funktion soll das ermittelt werden.
Bevor man eine Funktionsdefinition erstellt, sollte man sich das Verhalten der Funktion klarmachen - z.B. mit einem Black-Box-Diagramm.
Die Funktion soll 2 übergebene Daten - das Zeichen, das gezählt werden soll, sowie der vorgegebene Text - verarbeiten und als Ergebnis die zu bestimmende Anzahl zurückgeben.
Aufgabe 4
(a) Ergänze zunächst die Funktionsdefinition. Orientiere dich an der Definition der Funktion
laenge
.
# Funktionsdefinition
def anzahl(zeichen, text):
...
return ...
(b) Teste anschließend die Funktion anzahl
. Du kannst das im Ausführfenster machen,
sofern du vorher die Funktionsdefinition einmal ausgeführt hast - z.B. so:
>>> anzahl('A', 'ABRAKADABRA')
5
>>> lied = """
Drei Chinesen mit dem Kontrabass
sassen auf der Strasse und erzaehlten sich was.
Da kam die Polizei, fragt ‚Was ist denn das?‘
Drei Chinesen mit dem Kontrabass.
"""
>>> anzahl('i', lied)
11
Du kannst aber auch ein Testprogramm hierfür schreiben (vgl. Aufgabe 3).
Eine Funktion zur Ersetzung von Zeichen in Texten
Jetzt soll die eingangs erläuterte Zeichenersetzung in Texten mit einer Funktion realisiert werden.
Der folgende Quelltext zeigt eine Möglichkeit, wie man bei der Textersetzung vorgehen könnte.
# Initialisierung
zeichenAlt = 'i'
zeichenNeu = 'a'
text = """
Drei Chinesen mit dem Kontrabass
sassen auf der Strasse und erzaehlten sich was.
Da kam die Polizei, fragt ‚Was ist denn das?‘
Drei Chinesen mit dem Kontrabass.
"""
# Verarbeitung
textNeu = ''
for z in text:
if z == zeichenAlt:
textNeu = textNeu + zeichenNeu
else:
textNeu = textNeu + z
# Ausgabe
print(textNeu)
Aufgabe 5
(a) Teste das Programm. Analysiere den Quelltext und beschreibe möglichst genau, wie der neue Text erzeugt wird.
(b) Entwickle eine Funktion zur Textersetzung. Beginne mit einem Black-Box-Diagramm. Entwickle anschließend eine Funktionsdefinition. Du kannst Teile des gezeigten Programm hierfür übernehmen. Teste anschließend die entwickelte Funktion.
Quellen
- [1]: Drei Chinesen - Urheber: Bottomline - Lizenz: Creative Commons BY-SA 3.0