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=autokahdella 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
aproposon tosiaanman -k
yhteys fgrepiin on havaittavissa josGREP_OPTIONSon asetettu: hakusanat värjätään eliaproposon 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. englannissaI’mtai ranskassal’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)
saneistusviittaa termiin sane, so. sanan konkreettinen esiintymä t. sanamuoto, tällä kurssilla sanalla sanausein 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 (1) tällä kertaa toteutamme todennäköisyyslaskentaa hieman käsin
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-8Plain Text UTF-8lö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 kutenlinksovat 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äkinwget -O
rautatie.txt
http://www.gutenberg.org/cache/epub/10481/pg10481.txt
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ä
recodejaiconv muuntavat koodauksia (jos esim. vanhat gutenbergit olivat ns. latin1:tä):
I iconv -f latin1 -t utf8 < vanha >
konvertoitu
I 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ä)
fromdostaidos2unixmuuntavat rivinvaihdot:
I dos2unix rautatie.txt
I 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:
I tr -s ’ ’ ’\n’ < rautatie.txtmuuntaa välilyönnit rivivaihdoiksi (ts. sijoittaa välilyöntien erottamatsaneetomille riveilleen)
I huomaamme, että sanoihin kuuluvat nyt välimerkit, jota emme tällä kertaa halua
I tr -d ’.,?!:;-’ < rautatie.txtpoistaa 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ä komennonwc -lavulla
ja laskea yleisyyksiä komentojensortjauniqavulla Ensin järjestetään aakkosjärjestykseensortilla Sittenuniq -claskee toistot
Sitten järjestetään numerojärjestykseensort -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.txtpoistaa välimerkit siitä
tr -s ’ ’ ’\n’ < rautatie.txt | tr -d
’.,;!?-’ tekee molemmat
jos sen tallentaa tiedostoon saneista.shilman 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