• Nie Znaleziono Wyników

Narzędzia informatyczne w językoznawstwie

N/A
N/A
Protected

Academic year: 2021

Share "Narzędzia informatyczne w językoznawstwie"

Copied!
5
0
0

Pełen tekst

(1)

Narzędzia informatyczne w językoznawstwie

Perl - Wprowadzenie

Marcin Junczys-Dowmunt junczys@amu.edu.pl

Zakład Logiki Stosowanej http://www.logic.amu.edu.pl

29. października 2008

Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 1/18

Co to jest Perl?

I Perl jest dynamicznym językiem programowania stworzonym przez Larry’ego Walla (lingwistę) w roku 1987

I Perl jest językiem bardzo wysokiego poziomu (C – niskiego poziomu, Java – wysokiego poziomu)

I Perl jest językiem skryptowym, interpretowanym (oraz kompilowanym)

I Perl jest językiem proceduralnym, obiektowym lub/i

funkcjonalnym (w porównaniu: Pascal – proceduralny, Java – obiektowy, Haskell – funkcjonalny, Prolog – deklaratywny)

I Perl jest językiem wielozadaniowym ze szczególnym naciskiem na przetwarzanie dużych ilości danych w postaci tekstu

Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 2/18

Krótka historia Perl

I Larry Wall tworzy pierwszą wersję w grudniu 1987

I W roku 1988 powstaje wersja Perl 2, w 1989 Perl 3

I W roku 1991 pojawia się książka Programming Perl autorstwa Larry’ego Walla (tzw. Wielbłąd – the Camel Book). Numer wersji zostaje podniesiony do 4, żeby zasygnalizować zgodność z tym dziełem

I W roku 1994 pojawia się Perl 5, który jest stale rozszerzany.

Najbardziej aktualną wersją jest Perl 5.8.8

I W roku 1995 powstaje CPAN – Comprehensive Perl Archive Network – zbiór rozszerzeń, który dzisiaj zawiera 11,000 modułów pochodzących od ponad 5000 autorów.

I Obecnie trwają pracę nad zupełnie nową wersją Perl 6

Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 3/18

Dlaczego właśnie Perl?

I Perl powstał jako język służący do przetwarzania dużych zbiorów tekstu

I Pełna integracja wyrażeń regularnych

I Wbudowana i prosta obsługa dynamicznych struktur danych:

list, tablic i tablic asocjacyjnych (tzw. hashe) oraz struktur bardziej złożonych

I Prosta obsługa operacji wejścia/wyjścia w przypadku wczytywania plików tekstowych

I zwięzła składnia – średnio jeden wiersz kodu Perla to tyle co 6 wierszy C++

I Gigantyczna biblioteka ogólnodostępnych modułów (CPAN - Comprehensive Perl Archive Network) np. parsery XML, HTML, obsługa Unicode itp.

I Od lingwistów pracujących w przemyśle informatycznym najczęściej wymaga się znajomość Perla

Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 4/18

(2)

Perl jako zjawisko kulturowe

I Wokół Perla powstało coś w rodzaju subkultury zwolenników tego języka (dzieje się podobnie w przypadku innych języków skryptowych)

I Motto: ”There is more than one way to do it” – skrót:

TIMTOWTDI wymawiane jako Tim Toady

I Ksywy:

I Practical Extraction and Report Language

I Pathologically Eclectic Rubbish Lister

I The Duct Tape of the Internet

I The Swiss Army Chain Saw of Programming Languages

I ”Obfuscated Perl Contest” – konkurs na pisanie najbardziej nieczytelnego programu, który nadal ”coś” robi

I Zawody poezji pisanej w Perlu, która nadal jest poprawnym programem (tzn. kompiluje się)

Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 5/18

Poezja w Perlu - przykład

Laureat pierwszego konkursu (2000) poezji pisanej w Perlu:

1 if (( l i g h t eq d a r k ) && ( d a r k eq l i g h t )

&& ( $ b l a z e _ o f _ n i g h t { m o o n } == b l a c k _ h o l e )

&& ( $ r a v e n s _ w i n g { b r i g h t } == $ t i n { b r i g h t } ) ) { my $ l o v e = $ y o u = $ s i n { d a r k n e s s } + 1;

5 };

Na podstawie wiersza ”The Invocation” Jim’a Steinman’a If light were dark and dark were light

The moon a black hole in the blaze of night A raven’s wing as bright as tin

Then you, my love, would be darker than sin.

Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 6/18

Alternatywy

I Obecnie najważniejszą alternatywą do Perla jest język

skryptowy Python, któremu ostatnio mocno po piętach depcze język Ruby

I Cała trójka róźni się między sobą raczej filozofią niż funkcjonalnością

I Jak dotąd Perl jest najpopularniejszym wielozadaniowym językiem skryptowym w internecie1

Więc dlaczego właśnie Perl?

Ponieważ prowadzący nie zna ani Phytona ani Ruby (podejrzewa jednak, że znajomość jednego języka z tej trójki jest w zupełności wystarczająca)

1omijamy tutaj PHP, który jest językiem przeznaczonym praktycznie tylko i

Dystrybucje Perla

I ActivePerl – Najpopularniejsza dystrybucja Perla dla Windowsa autorstwa Activision – łatwy dostęp do (nie do końca aktualnej wersji) CPAN poprzez PPM (Perl Package Manager)

http://www.activestate.com/store/activeperl/download/

I Cygwin – Nie tyle dystrybucja Perla, raczej coś w rodzaju symulatora Linuxa pod Windowsem, zawiera wersję Perla http://www.cygwin.com/

I Istnieje wiele innych dystrybucji, ale wydają się one nie do końca dopracowane

(3)

Jak tworzymy program w Perl?

I Programy Perl (skrypty) to zwykłe pliki tekstowe (najczęściej z rozszerzeniem .pl)

I Możemy je edytować dowolnym edytorem tekstu, jednak polecam edytory z podświetlaniem składni (np. EmEditor) lub środowiska bardziej wyspecjalizowane (np. Activision Komodo Edit – darmowa wersja Komodo IDE)

I Skrypty wykonujemy z poziomu wiersza poleceń, wpisując perl nazwa skryptu.pl

Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 9/18

Zliczanie wyrazów - wersja czytelna

1 use s t r i c t ;

my % c o n c ;

w h i l e (my $ l i n e = < >) {

5 c h o m p $ l i n e ;

my @ w o r d s = s p l i t /[ . \ ? , ! ; : \ ( \ ) ] + / , $ l i n e ; f o r e a c h my $ w o r d ( @ w o r d s ) {

if (e x i s t s $ c o n c { $ w o r d }) {

$ c o n c { $ w o r d } + + ;

10 }

e l s e {

$ c o n c { $ w o r d } = 1;

} }

15 }

f o r e a c h my $ w o r d (s o r t k e y s % c o n c ) { p r i n t " $ w o r d : $ c o n c { $ w o r d }\ n ";

}

Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 10/18

Zliczanie wyrazów - wersja hakerska

1 w h i l e ( < >) { c h o m p;

$ c o n c { $_ }++ f o r e a c h (s p l i t /[ \ . \ ? , ! ; : \ ( \ ) ] + / ) ; }

5 p r i n t " $_ : $ c o n c { $_ }\ n " f o r e a c h (s o r t k e y s % c o n c );

Skrócenie powstało przez:

I Korzystanie ze zmiennych domyślnych

I Wykorzystanie faktu, że Perl potrafi automatycznie deklarować i definiować zmienne

I Zapis skrótowy pętli, jeśli wykonany jest tylko jedno polecenie

I Inne mechanizmy: np. interpolacja zmiennych

Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 11/18

Ekonomia zapisu – wada czy zaleta?

I Istnieje zarzut, że taki styl programowania promuje pisanie nieczytelnego kodu

I To prawda – jednak napisania 4 wierszy kodu zajmuje o wiele mniej czasu niż napisania 17 wierszy

I Zaleta: Perl pozwala na pisanie programów jednym i drugim stylem: czytelnym i czystym lub szybkim i brudnym.

I Własne doświadczenie: im lepiej znamy Perla, tym chętniej korzystamy ze stylu skróconego

I Wspomniane zawody ”Obfuscated Perl”

Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 12/18

(4)

Nasz pierwszy program

Utwórzmy plik tekstowy hello.pl zawierający następujący wiersz:

print("Hello, world!\n");

I Typowy pierwszy przykład w (prawie) każdym podręczniku programowania

I Wykorzystamy go do zabawy z komunikatami o błędach

I Dowiemy się w ten sposób jakie polecenia są według Perla

”gramatyczne” a jakie nie

Najpierw wykonamy nasz program z poziomu wiersza poleceń komendą (o ile znajdujemy się w tym samym katalogu) perl hello.pl

Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 13/18

Anatomia programu

print("Hello, world!\n");

I print jest funkcją, czymś w rodzaju czasownika

I Fragmenty ujęte w nawiasie to argumenty funkcji – inaczej dopełnienia czasownika

I Wszytko w cudzysłowie to łańcuchy znakowy, możemy je traktować jak nazwy lub imiona

I całość zakończoną średnikiem nazywamy instrukcją (zdania w języku naturalnym)

I Nasz prosty program przykładowy składa się tylko z jednej instrukcji

Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 14/18

Komunikaty o błędach

Ćwiczenie

I Proszę zmodyfikować program hello.pl

I możemy np. :

I powtórzyć wiersz programu, usunąć średniki w różnych kolejnościach

I usunąć nawiasy

I dodać białe znaki (spacje, taby, załamania wiersza) w dowolnych miejscach programu

I zmienić print na jakąś wersję ortograficznie niepoprawną

I usunąć znaki cudzysłowu

I zmienić znaki cudzysłowu podwójnego na cudzysłów pojedynczy

I Po każdym kroku wykonać program hello.pl i przeanalizować komunikaty błędu (o ile się pojawią) i wyświetlaną treść

Komunikaty o błędach

Teraz zmodyfikujemy nasz mały program do następującej postaci:

use d i a g n o s t i c s ;

p r i n t " Hello , w o r l d !\ n ";

Powtórzymy poprzednie modyfikacje i przeanalizujemy ponownie komunikaty o błędach. Tym razem będą one znacznie bardziej wyczerpujące.

Komunikaty zostaną wyświetlone na wyjściu błędów. Żeby móc je obejrzeć ekran po ekranie, trzeba je przekierować na wyjście standardowe:

perl hello.pl 2>&1 | more

(5)

Komunikaty o błędach

Wnioski

I Nawiasy nie są konieczne przy wywołaniu funkcji (o ile nie ma wieloznaczności), ale zwiększają czytelność

I Białe znaki nie mają wpływu na program, o ile nie pojawiają się w cudzysłowie

I Cudzysłów (podwójny lub pojedynczy) jest konieczny do oznaczania łańcuchów znakowych

I Ostatni średnik (wewnątrz bloku) możemy opuścić, opuszczenie pozostałych spowoduje wystąpienie błędu

I Nasz program nie wykona się, jeśli popełniliśmy błąd składniowy

I Ważna zasada:najpierw poprawiamy pierwsze pojawiające się błędy. Pozostałe mogą być wtórne

Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 17/18

Literatura

I Michael Hammond, Programming for linguists: Perl for language researchers. Oxford: Blackwell, 2003

I Randal L. Schwartz, Tom Phoenix, Brian d’Foy, Perl.

Wprowadzenie. Wydanie IV. O’Reilly/Helion, 2006

I Larry Wall, Tom Christiansen, Jon Orwant, Programming Perl. Third Edition. O’Reilly, 2000

I Tom Christiansen, Nathan Torkington Perl Cookbook, Second Edition. O’Reilly, 2003

I Simon Cozen Perl. Zaawansowane programowanie. Wydanie II. O’Reilly/Helion, 2006

Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 18/18

Cytaty

Powiązane dokumenty

I Słowo kluczowe sub poprzedza nazwę funkcji, którą ustalamy sami; nazwy powinny kojarzyć się działaniem tworzonej funkcji. I Polecenie return wewnętrz funkcji, natychmiast

◮ Hasz jest strukturą podobną do tablicy, ale zamiast indeksów liczbowych hasz używa kluczy.?. Co to

Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 18/24.. póki tablica @pokoj zawiera więcej niż

I Parser strumieniowy udostępnia dane zanim sprawdzi poprawność składniową dokumentu. I Wymagania pamięciowe takich parserów są niskie i możemy przetwarzać wielkie dokumenty

I Cała struktura danych jest przechowywana w pamięci, w przypadku dużych dokumentów XML może to stanowić poważny problem.. Struktura danych może zajmować do 30 razy tyle pamięci

I Wszystkie dane wyjściowe konwertujemy po zakończeniu przetwarzania z kodowania wewnętrznego Perla do kodowania

I Tablica składająca się z samych kluczy tego hasza jest tablicą zawierająca tylko niepowtarzające się elementy z @tablica. Marcin Junczys-Dowmunt Narzędzia informatyczne

Najpierw wykonamy nasz program z poziomu wiersza poleceń komendą (o ile znajdujemy się w tym samym katalogu) perl hello.pl. Marcin Junczys-Dowmunt Narzędzia informatyczne