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