Narzędzia informatyczne w językoznawstwie
Perl - Zastowanie modułów
Marcin Junczys-Dowmunt junczys@amu.edu.pl
Zakład Logiki Stosowanej http://www.logic.amu.edu.pl
12. marca 2008
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 1/1
Co to jest moduł?
I Moduły dzielą nam program na logiczne części
I Grupują np. funkcje i zmienne ze sobą powiązane
I Pozwalają na proste włączanie do naszego programu kodu już wcześniej przez nas napisanego (tego nie będziemy omawiać)
I Pozwalają na włączanie do programu kodu napisanego przez inne osoby
I Korzystaliśmy już z modułów strict oraz Data::Dumper
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 2/1
Rodzaje modułów
I Moduły pragmatyczne, np. strict
Informują interpreter Perla np. o trybie działania
I Moduły standardowe, np. Data::Dumper Napisane w czystym Perlu
I Moduły rozszerzone, np. XML::Expat
Napisane np. za pomocą C++, w celu przyspieszenia działania lub np. interfejsy do systemu operacyjnego
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 3/1
Po co moduły?
Prosta odpowiedź: Nie ma sensu powtarzać pracę, którą ktoś przed nami wykonał lepiej!
I Wiele czynności podstawowych zostało już wcześniej zakodowanych
I Wystarczy znaleźć odpowiedni moduł, przeczytać dokumentację i korzystać z niego do woli
I Zmniejszy to nasz wysiłek, poprawi jakość programu
I Możemy znaleźć np. interfejsy do baz danych, parsery XML i HTML, moduły do ściągania stron internetowych, generatory PDF, ...
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 4/1
Skąd wziąć odpowiednie moduły?
I Sporo modułów znajduje się standardowo w naszej instalacji, np. Data::Dumper, Encode, XML::Parser, LWP, ...
I Największym źródłem gotowych modułów jest CPAN - Comprehensive Perl Archive Network, ok. 11000 modułów
I Problem: Wymaga kompilacji modułów – trudne pod Windowsem
I Rozwiązanie: PPM – Perl Package Manager
dostęp do (niezupełniej, ok. 7000 modułów) kopii CPAN dla Active Perl
I CPAN pozostaje niezastąpionym źródłem informacji o pakietach
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 5/1
CPAN jako dokumentacja do pakietów
I Adres: http://www.cpan.org lub http://cpan.perl.org
I Spis modułów oraz wyszukiwanie: http://search.cpan.org
I Widzimy, że moduły zostały ułożone w pewnej hierarchii.
I Hierarchia jest raczej tematyczna i niekoniecznie odzwierciedla hierarchię samych modułów
I Np. Chart::Pie oraz Chart::Plot nie są podmodułami jakiegoś tajemniczego modułu Chart. Jednak oba moduły służą do tworzenia wykresów (różnych typów, w różne sposoby, pochodzą od różnych autorów)
I Proszę poprzeglądać sobie trochę katalog modułów, np.
String Language Text Processing > Lingua::
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 6/1
Prosty przykład korzystania z modułu
1 use s t r i c t ;
my $ t e s t = {
t r e f = > [ 1 ,2 ,3 ,4 ]
5 };
p r i n t D u m p e r ( $ t e s t );
I Pojawi się błąd, dlaczego?
I Musimy najpierw zaimportować moduł, czyli use Data::Dumper
I Słowo kluczowe use służy do importowania modułów
I Data::Dumper jest nazwą modułu. Możemy z niej odczytać, że to jest funkcja powiązana ze strukturami danych, jednak nie ma pakietu Data
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 7/1
Inny Przykład: moduł Getopt::Long
1 use s t r i c t ;
use G e t o p t :: Lo n g ;
my $ j e z y k = " p o l s k i ";
5 my $ w y k r z y k = 0;
G e t O p t i o n s (
" l a n g = s " = > \ $jezyk , e m p h = > \ $ w y k r zy k ,
10 );
if( $ j e z y k eq " p o l s k i ") { p r i n t " W i t a j s w i e c i e "; }
15 e l s i f( $ j e z y k eq " a n g i e l s k i ") { p r i n t " H e l l o w o r l d ";
}
p r i n t ( $ w y k r z y k ) ? " ! ! ! \ n " : " \ n ";
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 8/1
Importowanie funkcji z modułów
I Nie wszystkie funkcje są od razu dostępne tak jak Dumper
I Trzeba się wtedy do nich odwołać przez nazwę modułu (przestrzeń nazw)
1 use E n c o d e ;
my $ s t r = " B \ x { 1 1 9 } d \ x { 1 9 9 } j u t r o w d o mu \ n "; my $ u _ s t r = E n c o d e :: e n c o d e _ u t f 8 ( $ s t r );
my $ i s o _ s t r = E n c o d e :: e n c o d e (" iso -8859 -2 ", $ st r );
I Drugi sposób to importowanie konkretnej funkcji za pomocą tablicy, która zawiera nazwy potrzebnych funkcji
1 use E n c o d e qw( e n c o d e _ u t f 8 e n c o d e );
my $ s t r = " B \ x { 1 1 9 } d \ x { 1 9 9 } j u t r o w d o mu \ n "; my $ u _ s t r = e n c o d e _ u t f 8 ( $ s t r );
my $ i s o _ s t r = e n c o d e (" iso -8859 -2 ", $ st r );
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 9/1
Gdy nie mamy pożądanego modułu
1 use L i n g u a :: I d e n t i f y ; # n i e z a i n s t a l o w a n y m o d u l
Informacja o błędzie:
Can’t locate Lingua/Identify.pm in @INC (@INC contains: C:/P erl/site/lib C:/Perl/lib .) at -e line 1
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 10/1
Instalacja modułu za pomocą PPM
I W konsoli lub w ’Start > Uruchom ...’ wpisujemy PPM
I Lub: ’Wszystkie Programy > ActivePerl 5.x > Perl Package Manager’
I Gdy chcemy zainstalować pakiet ’Lingua::Identify’, to szukamy
’Lingua-Identify’
I Wynik zaznaczamy (Mark for install) i wykonujemy operację (Run marked actions)
I Po zakończeniu instalacji nie powinien już występować komunikat błędu
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 11/1
Przykladowy moduł niestandardowy Lingua::Identify
1 use s t r i c t ;
use L i n g u a :: I d e n t i f y qw( l a n g o f );
use D a t a :: D u m p e r ;
5 my $ t e x t = " T h i s is an E n g l i s h t e xt "; my $ l a n g = l a n g o f ( $ t e x t );
p r i n t " \" $ t e x t \" is in $ l a n g \ n ";
my @ l a n g s = l a n g o f ( $ t e x t );
10 p r i n t D u m p e r (\ @ l a n g s );
my % l a n g s = l a n g o f ( $ t e x t );
p r i n t D u m p e r (\% l a n g s );
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 12/1