Aufgabe 8

1. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 8.1
#Erzeugt eine Frequenzliste

use strict;
use warnings;

my ($inFile,$line,$word,@words,%wordlist,$key);
$inFile = "wittgenstein.txt";
open (IN,$inFile) or die "File not found!";
while($line = <IN>) {
  chomp($line);
  @words = split(/[\p{Z}\p{P}]+/,$line);
  foreach $word (@words) {
    if ($word ne "") {
      $wordlist{$word}++;
    }
  }
}

foreach $key (keys %wordlist) {
  print "Das Wort \"$key\" kommt $wordlist{$key} mal in dem Text vor.\n";
}
close (IN);


#!/usr/bin/perl
#Aufgabe 8.1.1
#Erzeugt eine sortierte Frequenzliste

use strict;
use warnings;

my ($inFile,$line,$word,@words,%wordlist,$key);
$inFile = "wittgenstein.txt";
open (IN,$inFile) or die "File not found!";
while($line = <IN>) {
  chomp($line);
  @words = split(/[\p{Z}\p{P}]+/,$line);
  foreach $word (@words) {
    if ($word ne "") {
      $wordlist{$word}++;
    }
  }
}

my @alle_sortierten_woerter;

@alle_sortierten_woerter = sort {$wordlist{$a} <=> $wordlist{$b}} keys %wordlist;

foreach $word (@alle_sortierten_woerter) {
  print "Das Wort \"$word\" kommt $wordlist{$word} mal in dem Text vor.\n";
}

close (IN);

2. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 8.2
#Schreibt alle großgeschriebenen Wörter in eine Datei

use strict;
use warnings;


my ($inFile,$outFile,$line,$word,@words,%wordlist,$key,@alle_sortierten_woerter);
$inFile = "wittgenstein.txt";
$outFile = "grosse_woerter.txt";
open (IN,$inFile) or die "File not found!";
open (OUT,">",$outFile);

while($line = <IN>) {
  chomp($line);
  @words = split(/[\p{Z}\p{P}]+/,$line);
  foreach $word (@words) {
    if ($word ne "") {
      $wordlist{$word}++;
    }
  }
}
@alle_sortierten_woerter = sort {$wordlist{$b} <=> $wordlist{$a}} keys %wordlist;

foreach $word (@alle_sortierten_woerter) {
  if($word =~ /^[A-ZÄÖÜ]/) {
    print OUT "$word kommt $wordlist{$word} mal vor.\n";
  }
}
close (IN);
close(OUT);

3. Frage

Lösung

#Aufgabe 8.3

3.1    =~ /^\p{L}{3}$/
3.2    =~ /[aeiouäöü]/i
3.3    =~ /[äöü]/i
3.4    =~ /net$/
3.5    =~ /^[aeiouäöü]\p{L}{2,4}$/i
3.6    =~ /^\p{Lu}.*ung$/
3.7    =~ /^\p{Lu}{1,8}$/
3.8    =~ /^[^aeiouäöü]+$/i ODER !~ /[aeiouüöä]/i

4. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 8.4
#Ermittelt die Anzahl aller kleingeschriebenen Wörter

use strict;
use warnings;

my ($inFile,$line,$word,@words,%wordlist,$key,$counter);
$inFile = "wittgenstein.txt";
open (IN,$inFile) or die "File not found!";

while($line = <IN>) {
  chomp($line);
  @words = split(/[\p{Z}\p{P}]+/,$line);
  foreach $word (@words) {
    if ($word ne "") {
      $wordlist{$word}++;
    }
  }
}
$counter=0;
foreach $key (keys %wordlist) {
  if($key =~ /^\p{Ll}/) {
    $counter++;
  }
}
print "Es kommen $counter klein geschriebene Wörter in dem Text vor.\n";
close (IN);

5. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 8.5
#Gibt alle Zeilen aus, die mit einem Großbuchstaben beginnen

use strict;
use warnings;


my ($inFile,$line);
$inFile = "wittgenstein.txt";
open (IN,$inFile) or die "File not found!";

while($line = <IN>) {
  if ($line =~ /^\p{Lu}/) {
    print $line;
  }
}
close (IN);

6. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 8.6
#Gibt alle Zeilen aus, in denen ein bestimmter Artikel vorkommt

use strict;
use warnings;


my ($inFile,$line);
$inFile = "wittgenstein.txt";
open (IN,$inFile) or die "File not found!";

while($line = <IN>) {
  if ($line =~ /\b[Dd]er\b/ || $line =~ /\b[Dd]ie\b/ || $line =~ /\b[Dd]as\b/) {
    print $line;
  }
}
close (IN);

ODER

#!/usr/bin/perl
#Aufgabe 8.6 v2
#Gibt alle Zeilen aus, in denen ein bestimmter Artikel vorkommt

use strict;
use warnings;

my $inFile = "wittgenstein.txt";
open (IN,$inFile) or die "File not found!";
   
while (<IN>){
   if (/\b[Dd](er|ie|as)\b/) {
      print;
   }
}
close IN;
  

7. Frage

Lösung

#!/usr/bin/perl
#Aufgabe 8.6
#Gibt alle Wörter aus, die von einem Satzzeichen gefolgt sind

use strict;
use warnings;


my ($inFile,$line,$word,@words,%wordlist);
$inFile = "wittgenstein.txt";
open (IN,$inFile) or die "File not found!";

while($line = <IN>) {
  chomp($line);
  @words = split(/ /,$line);
  foreach $word (@words) {
    if ($word =~ /\p{L}+\p{P}$/) {
      print "$word\n";
    }
  }
}
close (IN);