Przetwarzanie języka naturalnego Temat: Zaawansowane typy danych i Zadania: Data:

ich persystencja

2 Autor: Paweł Kopeć

1 2

3

4

5

6

7

13 X 2014

Autor: Adrian Makuch

e e

e

m h

m

17:30-19:45

Zadanie 1. Tablice

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

#!/usr/bin/perl -w

@tablica = ('ASK','Logika','PJN','Seminarium','GAIT'); foreach(@tablica){

print "$_,"

}

$, = ";";

print "\n";

print "@tablica";

$" = ',';

print "\n";

print "@tablica";

print "\n";

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

%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";

}

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.

#!/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";

}

Zadanie 4. Sprawdź istnienie

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

#!/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"; 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

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}, " ";

}

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/);