CLT131: Tekstityökalut 2011, toinen luento Tommi A Pirinen tommi.pirinen+clt131@helsinki.fi Helsingin yliopisto Kieliteknologian oppiaine, Nykykielten laitos 9. marraskuuta 2011 tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 2. luento 9. marraskuuta 2011 1 / 19
Asialista 1 Käytännön asioita vielä 2 Tehtävät 3 Teoriaa ja aineistoja 4 Menetelmät ja työkalut tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 2. luento 9. marraskuuta 2011 2 / 19
hippu module, bash, chsh Aloitetaan siitä että kaikki kirjautuvat hipulle ja tarkistetaan vielä että kaikki on kunnossa: vieläkö löytyy module: command not found -ongelmia? echo $0 onko jollakulla jotain muuta kuin bash shellinä (ja haluaa käyttää bashia) locale -ck charmap UTF-8 kaikilla? tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 2. luento 9. marraskuuta 2011 3 / 19
Asialista 1 Käytännön asioita vielä 2 Tehtävät 3 Teoriaa ja aineistoja 4 Menetelmät ja työkalut tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 2. luento 9. marraskuuta 2011 4 / 19
yleistä scriptin käyttö näytti onnistuneen ja oli varsin hyödyllistä tiedostoja saa pakata yms., kannattaa kuitenkin noudattaa nimeämiskäytäntöjä ja aina mainita asiasta viestissä tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 2. luento 9. marraskuuta 2011 5 / 19
1. bashrc GREP_OPTIONS=--colour=auto kahdella peräkkäisellä viivamerkillä ilman sanaväliä, ei siis voi kopioida kalvoista, joissa viivojen välissä on usein ohuke tai sitten viivat ovat langenneet yhteen jos module ei toiminut, pitää ehkä vieläkin kopioida rimpsu verkkosivujen aineistoista http://www.ling.helsinki.fi/ kit/2011s/clt131/materiaalit/index.shtml tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 2. luento 9. marraskuuta 2011 6 / 19
2. esitiedot Esitietojen perusteella seuraavanlainen alustava aikataulu kurssille 1 tr, wc, bash saneistus, frekvenssit, skriptaus 2 grep säännölliset lausekkeet ja haut 3 head, tail lisää skriptauksesta ja vähän siistinnästä 4 omorfi, grep lisää säännöllisiä lausekkeita 5 sed lisää säännöllisiä lausekkeita ja muunnoksia 6 cut, paste datan taulukointia ja poimintaa 7 awk lisää säännöllisiä lausekkeita ja datan käsittelyä tämä aikataulu on vielä karkea luonnos tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 2. luento 9. marraskuuta 2011 7 / 19
7. man, apropos, whatis Tehtävä oli aika suurpiirteisesti muotoiltu olennaista on, että nyt tiedämme, että kaikki osaavat lukea man-sivut apropos on tosiaan man -k yhteys fgrepiin on havaittavissa jos GREP_OPTIONS on asetettu: hakusanat värjätään eli apropos on myös fgrep... fgreppailun kohde on ns. whatis-tietokanta, käytännössä man-sivujen ensimmäisistä riveistä poimittu tiedosto (alkeellinen tekstin yhteenvetomenetelmä, vrt. wikipedia) tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 2. luento 9. marraskuuta 2011 8 / 19
3. 4. sanoista Olennaisia havaintoja: wc:n määritelmä sanoista on sanavälien väliin jäävät merkkisarjat esim. kiinassa ei välttämättä sanavälejä käytetä esim. suomessa ajatusviiva laskettaisiin sanaksi esim. englannissa I m tai ranskassa l heure laskettaisiin yhdeksi sanaksi tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 2. luento 9. marraskuuta 2011 9 / 19
Asialista 1 Käytännön asioita vielä 2 Tehtävät 3 Teoriaa ja aineistoja 4 Menetelmät ja työkalut tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 2. luento 9. marraskuuta 2011 10 / 19
Tekstin jakaminen sanoiksi eli saneistus (tokenisointi) saneistus viittaa termiin sane, so. sanan konkreettinen esiintymä t. sanamuoto, tällä kurssilla sanalla sana usein viitataan samaan suurin osa korpustutkimuksesta koskee sanoja, sanojen välisiä suhteita, niiden esiintymisiä jne. tyypillinen korpustutkimuksen kieliteknologinen toteutus siis alkaa aineiston jakamisesta sanoiksi viimeksi huomasimme, että yksi tapa määritellä sana on sanavälien ympäröimäksi jaksoksi tällä kertaa toteutamme siis tällaisen saneistusmenetelmän tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 2. luento 9. marraskuuta 2011 11 / 19
Esiintymien laskeminen eli frekvenssilistaukset useimmiten, kun käsittelemme sanoja tai mitä ikinä kielenainesta, haluamme tietää tarkasteltavien asioiden välisiä yleisyyksiä yksinkertaisin tapa tarkastella tätä on laskea ne, ja vertailla lukumääriä tällaisia lukumäärälaskelmia kutsutaan usein frekvensseiksi frekvenssejä sinänsä eri aineistojen välillä on hankalaa vertailla; sata esiintymää tuhannen sanan tekstissä on paljon mutta biljardin sanan tekstissä ehkei niinkään yksinkertaisin vertailukelpoisehko tapa arvioida näitä ovat prosenttiosuudet, eli todennäköisyydet: 100 1000 = 10% < 0.00000001% = 100 1000000000000000 tällä kertaa toteutamme todennäköisyyslaskentaa hieman käsin (1) tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 2. luento 9. marraskuuta 2011 12 / 19
Gutenberg-aineistot http://www.gutenberg.org/ tekstitiedostoja vanhoista, tekijänoikeudettomista kaunokirjallisuusteoksista sisältävät mm. lisenssitekstejä välimerkit saattavat olla poikkeuksellisiakin, esim. vanhan ortografian mukaisia mm. suomelle kulmalainausmerkit ovat tavallisia merkistöt ja merkkaus pitää valita oikein (nykyään raakateksti ja UTF-8 Plain Text UTF-8 löytyvät suoraan sivustolta) tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 2. luento 9. marraskuuta 2011 13 / 19
Asialista 1 Käytännön asioita vielä 2 Tehtävät 3 Teoriaa ja aineistoja 4 Menetelmät ja työkalut tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 2. luento 9. marraskuuta 2011 14 / 19
Gutenbergistä: Juhani Aho Rautatie Suora linkki: http://www.gutenberg.org/ebooks/10481 Selaimella paikalliselle koneella haku ja siirto (scp:llä tms.) on aina mahdollista Hipullakin on mahdollista käyttää vaikka firefoxia jos haluaa tämä on yleensä todella hidasta Tekstipohjaiset selaimet kuten links ovat vähän sukkelampia mutta melko hankalia eivätkä toimi kaikilla sivuilla Komentorivipohjainen wget on käytännöllinen tähän ja automatisoituihin hakuihin yleensäkin wget -O rautatie.txt http://www.gutenberg.org/cache/epub/10481/pg10481.t tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 2. luento 9. marraskuuta 2011 15 / 19
Sivujuonne: Koodausasiat koodauksella tässä tarkoitetaan miten kirjaimet esitetään tietokoneen muistissa: eritoten ääkköset ym. ei alkuperäiseen US-ASCII-aakkostoon sisältyvät merkit, ja rivinvaihdot lähes kaikissa nykysovelluksissa merkistökoodaus on UTF-8, myös gutenbergissä recode ja iconv muuntavat koodauksia (jos esim. vanhat gutenbergit olivat ns. latin1:tä): iconv -f latin1 -t utf8 < vanha > konvertoitu recode l1..u8 vanha gutenbergissä on vielä joitain enimmäkseen harmittomia DOS-rivinvaihtoja (jotka näkyvät vimissä ja emacsissa ikävästi ˆM:inä) fromdos tai dos2unix muuntavat rivinvaihdot: dos2unix rautatie.txt fromdos rautatie.txt tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 2. luento 9. marraskuuta 2011 16 / 19
Tekstin saneistus haluttiin jokainen sanavälein erotettu sana omalle rivilleen tr on yleistyökalu yksinkertaisiin merkkimuunnoksiin: tr -s \n < rautatie.txt muuntaa välilyönnit rivivaihdoiksi (ts. sijoittaa välilyöntien erottamat saneet omille riveilleen) huomaamme, että sanoihin kuuluvat nyt välimerkit, jota emme tällä kertaa halua tr -d.,?!:;- < rautatie.txt poistaa välimerkit kokonaan tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 2. luento 9. marraskuuta 2011 17 / 19
Sanojen laskenta Kun meillä on jokainen sana rivillään, voimme vaikkapa laskea niiden määtä komennon wc -l avulla ja laskea yleisyyksiä komentojen sort ja uniq avulla Ensin järjestetään aakkosjärjestykseen sortilla Sitten uniq -c laskee toistot Sitten järjestetään numerojärjestykseen sort -nr:llä Muistetaan että ns. putkien avulla voimme tehdä kaiken yhdellä rivillä: sort uniq -c sort -nr tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 2. luento 9. marraskuuta 2011 18 / 19
Kotitehtäviä varten vielä: komennoista skripteiksi tiedämme, että tr -s \n < rautatie.txt saneistaa rautatien tr -d.,;!?- < rautatie.txt poistaa välimerkit siitä tr -s \n < rautatie.txt tr -d.,;!?- tekee molemmat jos sen tallentaa tiedostoon saneista.sh ilman osaa < rautattie.txt./saneista.sh < rautatie.txt tekee saman on yleinen käytäntö aloittaa skriptitiedosto rivillä #!/bin/bash, tarpeellista tämä on vain joillain harvoilla unixeilla tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 2. luento 9. marraskuuta 2011 19 / 19