Asialista CLT131: Tekstityökalut 2010, toinen luento Tommi A Pirinen tommi.pirinen@helsinki.fi Helsingin yliopisto Kieliteknologian oppiaine, Nykykielten laitos 2010-11-12 päivitetty: 2010-11-14 Laskuharjoitukset: ke 12 13 / 13 14 Tammikuun ohjelma valitaan parempi aika huutoäänestyksellä laskareissa käydään siis läpi palautettuja ratkaisuja: korjataan toistuvia virheitä kerrotaan lisätietoja / vastauksia joita kukaan ei ole vastannut selvitetään taustoja ym. lisätietoja käytännön ongelmia ympäristöissä, komennoissa jne. tarpeen mukaan, saa ehdottaa muutakin Aloitetaan tammikuu viikolta 4: kurssin kalenteri on http://www.ling.helsinki.fi/kit/2010s/ clt131/kalenteri.shtml tarkemmin alku tulee tietoon lähempänä, mutta todennäköisesti perjantain luennoilla aloitetaan
hippu ja.bashrc Asialista Hipulle luotavassa tiedostossa.bashrc oli viime kalvoissa viivaparista tullut ajatusviiva, verkkosivuilla copypastettava versio oli kuitenkin oikea. Lisäksi module load riviin pitänee lisätä tätä luentoa varten jo: export GREP_OPTIONS=- -colour=auto module load gcc/4.4.4 openfst/1.2 libtool hfst/2.4.1 hfst/3 python/3.1.1-gcc omorfi Lisäksi joillakuilla on hipulla käytössä csh eikä bash, joten ohje ei toimi suoraan. Komennolla chsh voi vaihtaa bashiin, jos tämä ei toimi tai haluaa käyttää csh:ta tms., csh-ohjeita voi kysellä sähköpostitse Tutkimusongelma: tekstin morfologisen jäsennyksen selvittely Tehtäväkuvaus: halutaan selvittää erään tekstin morfologinen jäsennys tulevaa tutkimusta varten Lähtökohdat: morfologinen analysaattori, joka osaa analysoida saneita yksi kerrallaan gutenbergistä napattu raakateksti, joka pitää analysoida Ongelma: miten jakaa teksti analysaattorin haluamiksi saneiksi (ns. tokenisointi-ongelma) miten tallentaa saneet sellaiseen muotoon, jota analysaattori ymmärtää Asialista
Perinteisen tyhmän morfologisen analysaattorin rakenteesta Esimerkki: omorfi-interactive.sh hipulla syötteenä valmiita leksikaalisia yksikköjä tai tokeneja: saneita välimerkkejä koodeja ym. ilmauksia idiomeja ym. moniosaisia yksiköitä syötteen pitää olla yksi em. yksikkö per rivi moniselitteisistä saneista tulee monta tulkintaa kirjaudu hippu.csc.fi käynnistä omorfi-interactive.sh jollei toimi: module load omorfi ja module load hfst/2.4.1 syötä suomenkielisiä sanoja (esimerkiksi): omorfi-interactive.sh kissa kissa kissansgnom koiralle koiralle koiransgall Gutenberg-aineistot Gutenbergistä: Juhani Aho Rautatie http://www.gutenberg.org/ tekstitiedostoja vanhoista, tekijänoikeudettomista kaunokirjallisuusteoksista sisältävät mm. lisenssitekstejä, joista pitää päästä eroon ennen analysointia... ja lisenssitekstit eivät ole vakiomuotoisia saati mittaisia välimerkit saattavat olla poikkeuksellisiakin, esim. vanhan ortografian mukaisia (toki sisältökin usein) merkistöt ja merkkaus pitää valita oikein (nykyään raakateksti ja UTF-8 Plain Text UTF-8 löytyvät suoraan sivustolta) Suora linkki: http://www.gutenberg.org/ebooks/10481
Asialista Työsuunnitelma 1. haetaan kirja gutenbergistä hipulle ( wget) 2. jos gutenberg olisi vielä vanhan malliin koodattu, tässä muunettaisiin koodaus, nyt tarvitsee lähinnä korjata rivinvaihdot, jos sitäkään ( recode, dos2unix) 3. hankiudutaan eroon englanninkielisistä osioista ( head-tail riittää aluksi) 4. tehdään tekstistä saneita (ja välimerkkejä, ym. otuksia) ( tr) 5. analysoidaan lopputulos ( omorfi-interactive.sh) 6. käytetään analyysi hyödyksi ( fgrep) Verkkosivun haku etäpäätteelle selaimella paikalliselle koneella haku ja siirto (scp:llä tms.) on aina mahdollista eri järjestelmien välillä siirtely voi kuitenkin aiheuttaa vaikeuksia myös etäpäätteillä voi joskus käyttää (graafisiakin) selaimia (lynx, firefox) näiden automatisointi on kuitenkin hankalaa wget on tehokkaimpia verkkohakimia unixeille: wget http://www.gutenberg.org/cache/ epub/10481/pg10481.txt 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 ovat ns. latin1:tä): iconv -f latin1 -t utf8 < vanha > konvertoitu recode l1..u8 vanha gutenbergissä on vielä joitain enimmäkseen harmittomia rivinvaihtoja (jotka näkyvät vimissä ikävästiˆm:inä) fromdos tai dos2unix muuntavat rivinvaihdot: dos2unix rautatie.txt fromdos rautatie.txt
Vakiomuotoisten tekstiosioiden poisto Tekstin saneistus Lisenssiä Ahon Rautatiessä ovat ensimmäiset 27 ja viimeiset 396 riviä head näyttää ensimmäiset n riviä ja tail viimeiset m riviä tiedostosta haluamme tiedoston keskeltä osan joka sisältää viimeiset tiedoston koko x miinus 27 riviä ja tästä ensimmäiset jäljellejäävistä paitsi 396 riviä: tail -n +28 rautatie.txt head -n 4314...mutta 4314 on tässä laskettu käsin ks. myös tämän vuoden CLT130 johdatus atk-järjestelmiin haluttiin jokainen sane omalle rivilleen ja välimerkit omilleen, tai pois tr on yleistyökalu yksinkertaisiin merkkimuunnoksiin: tr -s \n muuntaa välilyönnit rivivaihdoiksi (ts. sijoittaa välilyöntien erottamat saneet omille riveilleen) tr -d.,?!:;- poistaa välimerkit Lopulta: analysointi Asialista saneiden analysointiinhan käytettiin omorfi-interactive.sh:ta putkituksen avulla voimme koostaa kaikesta tästäkin vain yhden toiminnon (seuraava kohta on yksi komento ilman rivinvaihtoja): tail -n +28 rautatie.txt head -n 4314 tr -s \n tr -d.,;!?- omorfi-interactive.sh tiedämme jo, miten haetaan tarkkoja merkkijonoja fgrepillä, katsotaan siis esimerkiksi tekstin mahdollisia abessiiveja lisäämällä vielä yksi putki:... fgrep Abe
Linkit omorfista lisää ks. http://home.gna.org/omorfi/ tai suomeksi vanhahko graduni http: //www.helsinki.fi/%7etapirine/gradu/ http://nlp.stanford.edu/ir-book/html/ htmledition/tokenization-1.html merkistöasioista http://www.unicode.org sisältää mm. Unicode-kirjan verkkoversion suomen kieliopista mm. http://kaino.kotus.fi/visk Ison suomen kieliopin verkkoversio morfologinen analyysi käydään tarkemmin kurssilla clt260