background image

Przetwarzanie języka naturalnego 

Temat:  Zaawansowane typy danych i 

ich persystencja 

Zadania: 

Data: 

Autor:  Paweł Kopeć 

1  2 

 

13 X 2014 

Autor:  Adrian Makuch 

e  e 

m  h 

 

17:30-19:45 

 
Zadanie 1. Tablice 
 

Zadanie polegało na utworzeniu tablicy oraz wypisaniu jej na ekran monitora. 

 

 
Zadanie 2. Hash 
 

Program ma na celu pobranie od użytkownika wartości o typie klucz -> wartość i zapisanie 

ich w tablicy hash 

 

 

 

#!/usr/bin/perl -w 
@tablica = ('ASK','Logika','PJN','Seminarium','GAIT'); 
foreach(@tablica){ 
print "$_," 

$, = ";"; 
print "\n"; 
print "@tablica"; 
$" = ','; 
print "\n"; 
print "@tablica"; 
print "\n"; 

#!/usr/bin/perl 
%tablica = (); 
for($i=0;$i<5;$i++){ 
print "podaj hashtag i warto

ść

 odzielone enterem\n"; 

my $pierwsza = <STDIN>; 
my $druga = <STDIN>; 
chomp ($pierwsza); 
chomp($druga); 
$tablica{$pierwsza} = $druga; 

@hashe = keys(%tablica); 
#chomp(@hashe); 
foreach(@hashe){ 
print "$_---$tablica{$_}\n"; 

background image

Zadanie 3. Znajdź liczbę 
 

Program jest rozwinięciem poprzedniego. Różnica jest taka, że pola klucz-wartość są 

podawane jako jeden ciąg słów i należy je rozdzielić za pomocą wyrażeń regularnych. 

 

 
Zadanie 4. Sprawdź istnienie 
 

Program ma za zadanie przeanalizować pola w tablicy hashy za pomocą funkcji exist() oraz 

defined(). 

 

Jeżeli warunek uwzględni funkcję exists() wówczas dla zdefiniowanych kluczy oraz dla undef 
będzie zwrócone 1 natomiast jeżeli warunek uwzględni funkcję defined() to tylko dla 
zdefiniowanych kluczy będzie zwrócone 1 
 

 

#!/usr/bin/perl 
%tablica = (); 
for($i=0;$i<5;$i++){ 
print "podaj hashtag i warto

ść

 odzielone kropka\n"; 

my $pobrane = <STDIN>; 
 
chomp ($pobrane); 
$pobrane =~ /(\D+)(\.)(\D+)/; 
$tablica{$1} = $3; 

@hashe = keys(%tablica); 
#chomp(@hashe); 
foreach(@hashe){ 
print "$_---$tablica{$_}\n"; 

#!/usr/bin/perl 
my %plan = ( 
"Poniedzialek" => { 
"ASK-WYK" => "07:30-09:45", 
"ASK-LAB" => "14:30-16:45", 
"PJN-lab" => "17:45-20:15"}, 
"Wtorek" => { 
"Logika-WYK" => "07:30-09:45"}, 
"Sroda" => { 
"PJN-WYK" => "11:00-13:15", 
"Seminarium" => "14:00-16:15"}, 
"Czwartek" => "brak", 
"Piatek" => { 
"GAiTT-LAB"=>"10:00-12:00", 
"GAiTT-wyklad"=>"18:00-20:15"}, 
"Sobota" => undef, 
"Niedziela" => undef 
); 
print "Poniedziałek (exist): " . exists($plan{Poniedzialek})."\n"; 
print "Poniedziałek (defined): " . 
defined($plan{Poniedzialek})."\n"; 
print "Sobota (exist): " .exists($plan{Niedziela})."\n"; 
print "Sobota (defined): " .defined($plan{Niedziela})."\n"; 

background image

Zadanie 5. Drzewa binarne 
 

Program ma za zadanie utworzyć drzewo binarne, po czym zapisać jego strukturę do pliku 

tekstowego. 

 

 
 
 

 

#!/usr/bin/perl -w 
use strict; 
open(PLIK, ">plik.txt") || die "Nie mo

ż

na otworzy

ć

 pliku"; 

my($trunk, $n); 
while ($n++ < 20) { insert($trunk, int(rand(1000)))} 
print PLIK "Pre order: "; pre_order($trunk); print PLIK "\n"; 
print PLIK "In order: "; in_order($trunk); print PLIK "\n"; 
print PLIK "Post order: "; post_order($trunk); print PLIK "\n"; 
close PLIK; 
exit; 
sub insert { 
  

my($drzewo, $val) = @_; 

  

unless ($drzewo) { 

  

$drzewo = {};  

  

$drzewo ->{VALUE} = $val; 

  

$drzewo ->{LEFT} = undef; 

  

$drzewo ->{RIGHT} = undef; 

  

$_[0] = $drzewo;  

  

return; 

 } 
 if ($drzewo ->{VALUE} > $val) {  

insert($drzewo ->{LEFT}, $val)  

}elsif ($drzewo ->{VALUE} < $val) {  

insert($drzewo ->{RIGHT}, $val)  

}else{  

warn "dup insert of $val\n"  


sub in_order { 
  

my($drzewo) = @_; 

  

return unless $drzewo; 

  

in_order($drzewo ->{LEFT}); 
print PLIK $drzewo ->{VALUE}, " "; 
in_order($drzewo ->{RIGHT}); 


sub pre_order { 
  

my($drzewo) = @_; 

  

return unless $drzewo; 

  

print PLIK $drzewo ->{VALUE}, " "; 

  

pre_order($drzewo ->{LEFT}); 

  

pre_order($drzewo ->{RIGHT}); 


sub post_order { 
  

my($drzewo) = @_; 

  

return unless $drzewo; 
 post_order($drzewo ->{LEFT}); 

  

post_order($drzewo ->{RIGHT}); 

  

print PLIK $drzewo ->{VALUE}, " "; 


 

background image

Zadanie 7. Propozycja ćwiczenia 
 

Implementacja prostego tłumacza dla paru słów. Zdanie dzielone jest na poszczególne słowa 

następnie zapisywane w tablicy hash. Następnie słowo jest zamieniane na odpowiadające mu w 
innym języku. 

 

 

#!/usr/bin/perl -w 
%polish2english = ( 
 

 

  go => "id

ę

", 

 

 

  to => "do", 

 

 

  home => "domu" 

 

 

  regular => "regularne" 

 

 

  ); 

%english2polish = reverse %polish2english; 
do{ 
    print "Podaj zdanie do przetlumaczenia \n> "; 
    $line = <>; 
    if($line =~ /\w/){ 
 

$line =~ s/^\s*//; 

 

$line =~ s/\s*$//; 

 

@words = split /\s+/, $line; 

 

foreach $word ( @words ){ 

 

    if(exists($dutch2english{$word})){ 

 

 

print "$polish2english{$word} "; 

 

    } 

 

    elsif(exists($english2dutch{$word})){ 

 

 

print "$english2polish{$word} "; 

 

    } 

 

    else{ 

 

 

print "[$word] "; # unknown 

 

    } 

 

 

print "\n"; 

    } 
}while($line =~ /\w/);