Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python PLIN013 Proseminář z počítačové lingvistiky Miloš Jakubíček Centrum zpracování přirozeného jazyka Fakulty informatiky, Masarykova univerzita xjakub@fi.muni.cz December 30, 2010 Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Obsah 1 Organizační pokyny 2 ZPJ 3 Počítače a programy 4 Linux shell 5 Python Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Cíl kursu získat základní orientaci v oboru ZPJ prohloubit poznatky z předmětů FI:IB000 a FF:PLIN004 osvojit si elementární principy programování a práci v prostředí operačního systému Linux čas pro organizační záležitosti oboru a zpětnou vazbu od studentů Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Požadavky k zápočtu přiměřená účast (max. 3 neomluvené absence) vyhotovení 2 průběžných úkolů a složení závěrečného testu Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Motivace I – cíle ZPJ cílem počítačového zpracování přirozeného jazyka je zejména objektivní popis jazyka a jeho formalizace pro účely praktických aplikací pro úkoly v oblasti ZPJ je důležitá dobrá spolupráce mezi informatiky a lingvisty, z nichž obě skupiny by měly mít přiměřené vzdělání v druhém oboru: informatici základní povědomí o lingvistické teorii, soudobé kodifikaci a terminologii, lingvisté zejména schopnost formální (matematické) abstrakce a znalost principů algoritmizace/výpočtů. Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Motivace II – mýty a pověry o informatice „informatika se zabývá především programováním“ „informatik má umět dobře pracovat s aplikací X“ „informatika je úzce svázána s posledními trendy v informačních technologiích“ . . . dále viz předmět FI:IB000 Úvod do informatiky a další povinné a povinně-volitelné předměty oboru Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python ZPJ – přehled Jedna (avšak nikoli nutně jediná) možná základní klasifikace: zpracování textu (→ morfologie, syntax, sémantika, příp. logika) zpracování řeči (→ fonetika) dialog (→ diskurs, pragmatika) analýza (+ desambiguace) vs. syntéza formální vs. přirozené jazyky: determinismus vs. víceznačnost kontrolovaný vs. nekontrolovaný vznik a vývoj malý počet mluvčích, z nichž většina má velmi odborné znalosti o jazyku vs. velký počet mluvčích, z nichž většina nemá odborné znalosti o jazyku žádné . . . a mnoho další vlastností přirozených jazyků, které formální jazyky zcela postrádají vše podrobněji v FI:IB030 Úvod do počítačové lingvistiky Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python ZPJ – stav pro češtinu v rámci ZPJ velmi intenzivně studovaný jazyk, v míře zpracování patří k celosvětové špičce, mnoho dostupných jazykových zdrojů pracoviště v Praze (ÚFAL MFF UK, ÚTKL FF UK, ÚČNK ÚJČ), Brně (CZPJ FI MU, Speech@FIT), Plzni (KKY ZČU), Liberci (LPZŘ FM TU) ukázky: wwwajka, wwwsynt Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Co je počítač? I „Počítač je v informatice elektronické zařízení, které zpracovává data pomocí předem vytvořeného programu. Současný počítač se skládá z hardware, které představuje fyzické části počítače (procesor, klávesnice, monitor atd.) a ze software (operační systém a programy). Počítač je zpravidla ovládán uživatelem, který poskytuje počítači data ke zpracování prostřednictvím jeho vstupních zařízení a počítač výsledky prezentuje pomocí výstupních zařízení.“ (zdroj: Wikipedia) Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Co je počítač? II Von Neumannovo schéma: Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Co je počítač? III Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Soudobé počítače digitální, binární informace základní jednotkou informace je 1 bit (b) (1/0 = pravda/nepravda = jde proud/nejde proud) v bitech (za jednotku času) je zpravidla udávaná přenosová rychlost velikost úložného prostoru zpravidla vyjadřována v bytech (B), 1 B = 8 b 1 TB = 1024 GB = 10242 MB = 10243 kB = 10244 B Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Procesor frekvence instrukční sada počet jader velikost vestavěné paměti Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Paměť rychlost: CPU cache > RAM > HDD > páska, cena inverzně Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Co je počítačový program? I Posloupnost instrukcí (daným způsobem formalizovaná a tedy strojově zpracovatelná), která je počítačem vykonána: f319 255c 3d1b 9b5c 1eb3 01aa 8bd4 2ea7 0003 0000 0070 0000 0002 0000 0007 0000 0180 2c1a 0900 4900 0548 0d08 0488 2000 0070 0000 0074 0000 0079 0000 8a10 234d 4dc8 2342 e3ba 7c92 4543 ecd5 41c8 9087 099c d632 2d46 dee4 71d8 1c58 8db9 0ef1 d3ea 0eef 043e 864b a9fc 79da ed1c 2a63 d42b d3b8 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Co je počítačový program? II Programy ale vytvářejí lidé, je tedy nutná i lidsky čitelná podoba zápisu ⇒ je potřeba překladač (kompilátor), příp. interpreter: int main() { printf("Hello world!"); } → f319 255c 3d1b 9b5c 1eb3 01aa 0003 0000 0070 0000 0002 0000 0180 2c1a 0900 4900 0548 0d08 0070 0000 0074 0000 0079 0000 4dc8 2342 e3ba 7c92 4543 ecd5 099c d632 2d46 dee4 71d8 1c58 d3ea 0eef 043e 864b a9fc 79da d42b d3b8 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Co je počítačový program? III Programovací paradigmata imperativní (nejčastěji používané): program je vykonání posloupnosti příkazů funkcionální: program je redukcí výrazu logické: program je „dokazovač“ logických formulí Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Servery CZPJ server: aurora.fi.muni.cz přihlašovací jméno a heslo shodné s přihlášením na FI operační systém Linux (viz FI:PV004 UNIX) Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Práce v shellu I = inteligentní „příkazový řádek“ adresářová struktura vždy začíná od /, žádné C:! uživatelské adresáře v /home/ příkazy pro pohyb v adresářové struktuře a její výpis: cd – change directory, ls – list cd .., cd Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Práce v shellu II základní příkazy pro manipulaci s textem: echo, cat, less, wc, grep, sort, uniq, cut, exit, man práce se standardním vstupem a výstupem (>, <, |), velikost písmen hraje roli! základní příkazy pro manipulaci se soubory: mv, cp, rm, touch jednoduchý textový editor: nano popis a další informace v češtině: http://www.abclinuxu.cz/ucebnice/prehled-prikazu Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Hrátky v shellu zpracovávání tzv. vertikálního textu – prvních 10 tis. slov z korpusu DESAM cp /home/xjakub/PLIN013/desam10k.vert muj.vert less muj.vert sort muj.vert | less sort muj.vert | uniq -c | less cut -f 1 muj.vert | sort | uniq -c | sort -rn | less Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python nástroj grep I g/re/p v editoru ed = globally find regular expression re and print RE = regular expression = regulární výraz regulární, ne regulérní důležité souvislosti s matematickou lingvistikou a teoretickou informatikou (regulární výrazy vs. regulární gramatiky vs. konečné automaty – bude v PLIN004), zde se zaměříme na praktické použití v programu grep obecně: jde nám o konečný popis nekonečných (matematických) struktur (např. slov) Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python nástroj grep II . = lib. znak, [zur] = výčet prvků, [a-zA-Z0-9] = výčet prvků rozsahem * = lib. počet výskytů, včetně nultého (= znak není) \+ = alespoň jeden výskyt, \? = nejvýše 1 výskyt \{m\} = právě n výskytů, \{m,n\} = m až n výskytů ^ = začátek řetězce, $ = konec řetězce dále např.: http://www.cyberciti.biz/faq/grep-regular-expressions/ http://stts.se/egrep_for_linguists/egrep_for_linguists.html Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python nástroj grep III grep zkouška muj.vet grep k1 muj.vert grep "k2.*c3" muj.vert cut -f 2 muj.vert | grep "^a" | sort | uniq -c | sort -rn Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Domácí úkol vymyslete příkaz, kterým získáte pět nejčastějších morfologických značek pro podstatná jména obsažená v korpusu DESAM a začínající na první písmeno vašeho příjmení soubor s vertikálním textem se nachází na aurora:/home/xjakub/PLIN013/desam.vert způsob a forma odevzdání: v jednom textovém souboru uveďte na prvním řádku váš příkaz a na následujících pěti řádcích nalezené morfologické značky; takový soubor vložte do odevzdávárny v ISu hodnocení: 0–20 bodů (celkově 20/20/60 – 1. úkol, 2. úkol, test) termín: 21. 11. 2010 včetně Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Intermezzo – kódování a znakové sady znaková sada = zobrazení (funkce) ze znaků do čísel (např.: ’a’ = 1, b = ’2’, c = ’3’, ...) kódování = způsob uložení čísla (např.: 1 = 0001, 2 = 0010, 3 = 0011, ...) existují různé znakové sady a různá (vzájemně nekompatibilní) kódování pro češtinu dříve zejména znakové sady ISO LATIN2 (ISO-8859-2) a Windows-1250 (rozdíly v š, ť a ž) dnes snaha rozšiřovat znakovou sadu Unicode, nejčastěji v kódování UTF-8 Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Programovací jazyk Python interpretovaný jazyk vyšší úrovně, multiplatformní automatická správa operační paměti důraz kladen na jednoduchost, čitelnost, povinné odsazování kódu http://docs.python.org Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Programovací jazyk Python II spuštění interpreteru: python zkuste použití „jednoduché kalkulačky“: přiřazení (proměnná = hodnota), základní aritmetické operace výpis hodnoty proměnné: buď print nebo i přímo název proměnné >python Python 2.5.1 (r251:54863, Jul 31 2008, 22:53:39) [GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2 Type "help", "copyright", "credits" or "license" for more i >>> a=0 >>> a+2 2 >>> c=2*a-2 >>> c -2Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Python – datové typy dynamické typování int, float: celá čísla – 15, desetinná čísla – 15.575 str, unicode: řetězec (v daném kódování) – "ahoj", Unicode řetězec – u"ahoj" list, tuple, set, dict: seznam – [0, 1, "ahoj"], n-tice – (0, 1, "ahoj"), množina – set([0, 2, 2]) = set([0, 2]), slovník – {"jméno": "Miloš", "příjmení": "Jakubíček"} True, False: logická pravda a nepravda None: prázdný datový typ („nic“) objekty (ve smyslu OOP – objektově-orientovaného programování) Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Python – operátory operátor = symbol dané operace (funkce) operand = argument operátoru (2 + 5) * 7 operace na libovolných datových typech "Dobrý" + " " + "den" = "Dobrý den" "den" * 2 = "denden" Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Python – základní konstrukty podmínečný příkaz: if a == 1: print "Ahoj" else: print "Nazdar" cyklus while: while a == 1: print "Ahoj" a = 2 cyklus for: for a in ["ahoj", "nazdar", "čau"]: print a Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Python – OOP v kostce I OOP = objektově orientované programování objekt = datový typ reprezentující nějakou reálnou entitu ve světě každý objekt má atributy (vlastnosti objektu) a metody (funkce, které s objektem manipulují) příklad objektu: mikrovlnná trouba atributy: barva, rozměry, příkon, výkon, výrobce, . . . metody: otevřiDvířka(), zavřiDvířka(), ohřej(minuty=2) Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Python – list seznam = [0, 1, 2, "Ahoj", 7.8] výpis n-tého prvku: print seznam[n] nejdůležitější metody: přidání nové hodnoty x: seznam.append(x) rozšíření o jiný seznam s: seznam.extend(s) odebrání hodnoty x: seznam.remove(x) zjištění počtu prvků s hodnotou x: seznam.count(x) dále http://docs.python.org/tutorial/ datastructures.html#more-on-lists Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Python – str s = "Tohle je řetězec" výpis n-tého znaku: print s[n] → řetězec si lze představit jako seznam znaků nejdůležitější metody: find(podretezec[, zacatek[, konec]]) – test, zda řetězec obsahuje jiný podřetězec startswith, endswith – test, zda řetězec začíná nebo končí na jiný řetězec split([oddelovac[, maximum]]) – rozdělí řetězec na seznam podřetězců podle zadaného oddělovače join(seznam) – spojí prvky seznamu pomocí řetězce dále http://docs.python.org/library/stdtypes.html# string-methods Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python Python – čtení ze standardního vstupu I import sys for line in sys.stdin: print line Který Unixový příkaz náš program z části napodobuje? Napište program, který bude načítat ze standardního vstupu celá čísla a pro každé z nich vytiskne jeho dvojnásobek. Napište program, který bude načítat ze standardního vstupu celá čísla a ukládat je do seznamu. Po ukončení vstupu (přes Ctrl+D) program vypíše, kolikrát se každá hodnota v seznamu vyskytuje (využijte datový typ set – množina). Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python 2. domácí úkol I Ve studijních materiálech předmětu (složka Učební materiály) naleznete skripty vytvořené během semináře. Znovu si projděte program stdin.py vytvořený během přednášky: úkolem programu bylo vypsat četnosti čísel, které jsou mu předávány na standardním vstupu. Program postupně všechna příchozí čísla zapisuje do proměnné seznam (datový typ list). Z tohoto seznamu následně vytvoří datový typ set – proměnná množina, čímž odstraní duplicity, a přes tuto množinu poté iteruje a pro každý její prvek pomocí metody seznamu count() vypíše četnost tohoto prvku v původním seznamu. Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky Obsah Organizační pokyny ZPJ Počítače a programy Linux shell Python 2. domácí úkol II Tento postup zjevně není optimální: je zřejmé, že pro zjištění četností příchozích čísel si nemusíme po celou dobu všechna čísla pamatovat, ale můžeme četnost vypočítávat už průběžně (pro každé číslo na vstupu si „k němu uděláme čárku“). Upravte tedy stávající kód tak, aby takto pracoval – nejprve se zamyslete, v jaké datové struktuře (datovém typu) budete průběžně četnosti uchovávat a přičítat, následně podle toho upravte algoritmus. Vstupní i výstupní formát zůstávají stejné: program očekává na každém řádku jediné číslo, po ukončení vstupu vypíše četnosti zadaných čísel ve tvaru číslo četnost (každá taková dvojice na samostatném řádku). Termín: upravený skript (soubor .py) odevzdevejte opět do odevzdávárny v ISu do úterý 11. ledna včetně. Miloš Jakubíček NLP FI MU Brno PLIN013 Proseminář z počítačové lingvistiky