Textverarbeitung mit Perl
Perl Praxis 4
In dieser Übung werden die while und if
Kontrollstrukturen weiter
thematisiert, wie auch mit foreach gearbeitet.
Listen werden weiter verwendet und der
tr/// Operator wird benutzt (mit ersten regulären Ausdrücken).
Der tr/// Operator erlaubt es, auf einfache Weise Texte zu
manipulieren. In dieser Übung greifen wir auf ein Programm aus der
3. Übung zurück. Das Programm durchläuft einen Text,
macht aus allen Grossbuchstaben Kleinbuchstaben und druckt dann den
Text Zeile für Zeile wieder aus.
Einfache while Kontrollstruktur mit tr/// Operator
#!/usr/local/bin/perl
#druckt einen kleingeschriebenen Text versehen mit Zeilennummern
#linenums.pl DATEI
while (<>) {
tr/A-Z/a-z/;
print "$.: $_";
}
print "\n$. Zeilen insgesamt\n\n";
|
Übung
4.1. Kopiere oder tippe das Programm in einen Editor und probiere es
mit hexe.txt oder emerald.txt aus. |
Übung 4.2. Ändere das Programm, so dass der Text ganz in
Grossbuchstaben ausgegeben wird.
|
Eine Frage, die Phonologen vielleicht interessieren könnte,
ist die mögliche Kombination von Konsonanten und Vokalen (CV
Mustern). Die foreach Kontrolstruktur zusammen mit
Listen/Arrays erlaubt es, die möglichen Muster sehr leicht zu
ermitteln.
CV
#!/usr/local/bin/perl
#cv.pl
#cv patterns via foreach
@consonant = qw/ b c d f g h j k l m n p q r s t v w x y z/;
@vowel = qw/ a e i o u/;
foreach $c (@consonant) {
foreach $v (@vowel) {
print "$c$v ";
}}
|
Übung
4.3. Kopiere oder tippe das Programm in einen Editor und probiere es
aus. Sei dir sicher, dass du es verstehst. |
Übung 4.4. Jetzt benutze (fast) denselben Algorithmus, um
mögliche Nomen-Verb-Nomen Sequenzen einer Sprache zu ermitteln.
Lege das cv.pl Programm zugrunde, aber statt Vokalen und
Konsonanten, definiere eine Liste mit den Nomen "Achim", "Kai" und
"Olga", und eine weitere Liste mit den Verben "sieht", "trifft" und
"gruesst". Dann füge noch einen weiteren foreach
Durchlauf hinzu und drucke das Resultat in einer lesbaren Weise
aus. D.h. man sollte Sätze wie folgt bekommen: "Olga sieht
Achim".
|
In den nächsten Übungen arbeiten wir mit der if
Kontrollstruktur und mit Listen. Zunächst ein Programm, das eine
Datei durchforstet und alle Wörter mit 4 Buchstaben wiedergibt:
#!/usr/local/bin/perl
#gibt die Anzahl von Woertern mit 4 Buchstaben aus (und druckt sie aus)
#vier.pl FILE
while (<>) {
chop;
tr/;:,.!-'"'?//d; #Satzzeichen loswerden
foreach $w (split) {
if (length($w) == 4) {
print "$w\n";
$score++;
}
}
}
print "\n$score Woerter mit 4 Buchstaben in dieser Datei.\n";
|
Übung 4.5. Kopiere oder tippe das Programm in einen Editor
und probiere es an einer Datei
aus. Sei dir sicher, dass du das Programm verstehst. |
Übung 4.6. Ändere das Programm, so dass es
Wörter mit 3 (oder einer anderen Anzahl von) Buchstaben ausgibt
(man könnte das auch mit einer Variable wie $wordlength machen). |
Übung 4.7. Ändere das Programm nochmal, so
dass alle Wörter, die länger als 8 Buchstaben sind,
ausgedruckt und gezählt werden.
|
Start Wortlänge zu zählen, kann man auch direkt nach
bestimmten Wörten suchen.
#!/usr/local/bin/perl
#zaehlt wie oft 'Hexe' in einer Datei vorkommt
#hexe.pl FILE
while (<>) {
chop;
tr/;:,.!-'"'?//d; #Satzzeichen loswerden
foreach $w (split) {
if ($w eq 'Hexe') {
print "$_\n";
$score++;
}
}
}
print "\n'Hexe' kommt $score Mal vor.\n";
|
Übung 4.8. Kopiere oder tippe das Programm in einen Editor
und probiere es an einer Datei
aus. Sei dir sicher, dass du das Programm verstehst. |
Übung 4.9. Ändere das Programm, so dass es
nach dem Wort 'Rabe' sucht (oder irgendeinem anderen Wort; wieder
könnte man eine Variable benutzen).
|
Mit dem gelernten können wir jezt einen Text durchsuchen, die
gesuchten Wörter in eine Liste tun, und dann diese Liste weiter
bearbeiten (z.B. sortieren). Das folgende Programm sucht nach
Wörtern mit 4 Buchstaben, hebt sie in einer Liste auf, und druckt
dann diese Liste aus.
#!/usr/local/bin/perl
#sucht nach Woertern mit 4 Buchstaben, und tut sie in eine Liste.
#lists.pl FILE
while (<>) {
chop;
tr/;:,.!-'"'?//d; #Satzzeichen loswerden
foreach $w (split) {
if (length($w) == 4) {
push @words, $w;
$score++;
}
}
}
print "\n$score Woerter mit 4 Buchstaben in dieser Datei.\n\n";
print "@words\n";
|
Übung 4.10. Kopiere oder tippe das Programm in einen Editor
und probiere es an einer Datei
aus. Sei dir sicher, dass du das Programm verstehst. |
Übung 4.11. Ändere das Programm, so dass die Liste
mittels sort
nach dem Alphabet (nach ASCII) sortiert wird. |
Übung 4.12. Das Programm gibt in seiner jetzigen Form
die gross- und kleingeschriebenen Worte aus (wie es sie im Text
findet). Das ist nicht unbedingt praktisch, wenn mann alphabetisch
sortieren möchte. Ändere das Programm, so dass es
alle Worte entweder nur gross- oder klein geschrieben
in der Liste abspeichert. Ist die sortierte Liste jetzt anders?
|
Bitte die Übungen an Anja Leiderer schicken!
Ende