CLT131: Tekstityökalut 2011, kuudes luento Tommi A Pirinen tommi.pirinen+clt131@helsinki.fi Helsingin yliopisto Kieliteknologian oppiaine, Nykykielten laitos 7. joulukuuta 2011 tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 6. luento 7. joulukuuta 2011 1 / 14
Asialista 1 Tehtävät 2 Teoriaa 3 Menetelmät ja työkalut tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 6. luento 7. joulukuuta 2011 2 / 14
Yleistä Ei varsinaisesti ongelmia ratkaisuissa; oletetaan että kaikki voivat nyt käyttää omorfia tai muita analysaattoreita tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 6. luento 7. joulukuuta 2011 3 / 14
Asialista 1 Tehtävät 2 Teoriaa 3 Menetelmät ja työkalut tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 6. luento 7. joulukuuta 2011 4 / 14
Säännölliset lausekkeet ja uudelleenkirjoitus tähän mennessä säännöllisillä lausekkeilla on tehty vain hakuja jos mietittäisiin tavutuksen, morfologian jne. toteuttamista näillä tekstityökaluilla, käytännössä uudelleenkirjoitus on se mikä riittää tekemään säännöllisistä kielistä tarpeeksi ilmaisuvoimaisen eli voidaan sanoa A b mille vain lausekkeelle A ja merkkijonolle b: korvataan A:t b:llä Myös lausekkeiden sulutetuille osille, eli voimme käyttää kontekstia: (L)(A)(R) LbR eli jos verrataan syntaksissa käytettävään uudelleenkirjoituseen voidaan esim. ajatella että toteutetaan nuolet yhdeltä tasolta (so. ei tietynlaisia rekursioita) tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 6. luento 7. joulukuuta 2011 5 / 14
Merkkauskielten alkeista Luonnollisten kielten kuvausten toteutuksen lisäksi toinen hyvin yleinen käyttötapa uudelleenkirjoituksille täällä on korpusten uudelleenmuotoilu erilaisista merkkaustavoista Varsinaisesti tekstimerkkauksista lisää varmaan verkkosivukurssilla clt132 Periaate on että kaikenlaiset korostetut tekstit ovat merkkauskielissä esim. *korostetut* (wikit, rst yms. kevyet merkkauskielet) tai <emph>korostetut</emph> (SGML-sukuiset; HTML jne.) Lisäksi on monia muita vastaavanlaisia tekstielementtejä, jotka merkataan samoin tai hankalemmin: linkkejä. otsikoita, asetteluja jne. useimmiten lingvistisesti ne eivät, ainakaan kaikki, ole kiinnostavia, joten käytämme säännöllisiä lausekkeita siistimään ja poimimaan tarpeellisia tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 6. luento 7. joulukuuta 2011 6 / 14
Asialista 1 Tehtävät 2 Teoriaa 3 Menetelmät ja työkalut tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 6. luento 7. joulukuuta 2011 7 / 14
Sedin komentokieli sed (stream editor) on varsin monipuolinen komentokieli, joka käsittelee tekstitiedostoa riveittäin tällä kertaa ja enimmäkseen tällä kurssilla käsitellään sedin komennoista vain yhtä: korvausta sedin man-sivu ei ole kovin kattava, joten joskus joutuu käyttämään esim. info-sivuja tai googlea kuitenkin, komentojen rakenne on aina sed -e komento, ja näitä voi antaa useita mm. hipun sed tuntee -r-valitsimen, jolla sää käyttöön egrep-tyyliset (ERE) lausekkeet grep-tyylin (BRE) sijaan tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 6. luento 7. joulukuuta 2011 8 / 14
Sedin rakennuspalikat 1 korvauskomennon nimi on s (substitute), ja se rakennetaan /:in erotellusta kolmesta palikasta s/hakulauseke/korvaus/asetukset: hakulauseke on samanlainen säännöllinen lauseke kuin egrepillä (tai grepillä) korvaus on merkkijono (ei siis säännöllinen ilmaus) jolla hakuun täsmäävät osat korvataan. Tässäkin on muutamia erikoismerkkejä käytettäväksi asetukset-kohtaan voi lisätä hakuasetuksia, joista kaikki ovat siis kirjaimia. Aseetukset voi olla tyhjä, mutta kolmas / on pakollinen /-merkit voi korjata mielivaltaisella merkillä, tämä on hyödyllistä jos hakulauseke tai korvaus sisältää /:ja. Esimerkkejä: sed -r -e s/a/b/ korvaa kerran a b sed -r -e s/(a B).*// korvaa kaikki A:n tai B:n jälkeen tyhjaällä, siis /emphpoista rivin loppuun saakka sed -r -e s:/home/tapirine/:: erotinmerkin vaihto, jos halutaan korvata /-merkkejä sisältävää dataa tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 6. luento 7. joulukuuta 2011 9 / 14
Sedin rakennuspalikat 2 s-komennon hakulausekkeessa: kaarisulkeet () ryhmittelyn lisäksi tallentavat alilausekkeita muistiin korvaustekstissä: \1 \2... viittaa aina kaarisulkeilla kunkin numeron osoittaman alilausekkeen toistoon vasemalta lukien \0 tai & viittaavat koko haun täsmäykseen ja asetuksissa: g tekee niin monta korvausta kuin voi (ilman sitä korvataan rivin ensimmäinen esiintymä) i yrittää korvata isoja ja pieniä kirjaimia samalla lailla Esimerkkejä: sed -r -e s/(a)(b)/\2\1/g vaihtaa järjestystä sed -r -e s/./& /g lisää välilyönnit merkkien perään tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 6. luento 7. joulukuuta 2011 10 / 14
Sedin käyttötavat: korpusten siistintä sed -r -e s/sh/š/g vanhojen kirjoitusasujen normalisointia sed -r -e s/\[[^][]*\]//g poistetaan esim. kääntäjän, litteroijan tms. annotaatioita hakasulkeissa sed -r -e s/^[[:space:]]*[[:digit:]]+[[:space:]]+// poistetaan frekvenssit, rivinumerot tms. sed -r -e s/.*\[\[ ([^ ])\ ([^]]*)\] \].*/\1 \2/ poimitaan wikipedian merkkauksesta linkit ja selitystekstit erikseen vastaavasti verkosta ladatuilta HTML-sivuilta voi postaa kulmasulkeissa olevat merkkauskoodit (harjoitustehtävä), wikipediasta voi poistaa kulma-, haka-, aalto- yms. sulkeissa ja kaikissa muissa merkinnöissä olevia asioita erikseen (harjoitustyö) jne, tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 6. luento 7. joulukuuta 2011 11 / 14
Sedin käyttötavat: morfologia ja tavutus yksinkertaistettu esimerkki miten sedmäisesti voi taivutusta toteuttaa oletetaan vesi ~veden ~vetenä ~vettä saneistetulle sed -r -e s/si$/de/ -e s/$/n/ ensin muodostetaan heikko vokaalivartalo - sitten lisätään sijapääte sed -r -e s/si$/te/ -e s/$/nä sed -r -e s/si$/t/ -e s/$/tä kun nämä vaiheet erottaa, olisi siis mahdollista tehdä taivutusvartaloilla muutakin tavutuksen toteutukseen tarvitsimme aiemmin tavan tarttua osaan hakulausekkeesta: sed -r -e s/([bcdfghjklmnpqrstvxz]*)([bcdfghjklmnpqrstvwxz]) /\1-\2/g konsonanttiklusterien viimeisen kirjaimen erotus tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 6. luento 7. joulukuuta 2011 12 / 14
Lisätieto: Tarkastellaan HTML- ja Wikipediasivuja esim. http://fi.wikipedia.org/wiki/toiminnot: Satunnainen_sivu Muokkaa/Näytä lähdekoodi, mitä pitää poistaa/korvata, että saadaan enemmän tekstimuotoiseksi esim. wget http://www.ling.helsinki.fi mitä pitäisi poistaa tekstin esiinsaamiseksi tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 6. luento 7. joulukuuta 2011 13 / 14
Lisätieto: Sedin käyttötavat yleistyökaluna sedissä on siis kaikenlaisia komentoja, että opettelemalla sedin hyvin voisi pärjätä pelkästäänkin: tr -d abc = sed -r -e s/[abc]//g tr -s \n = sed -r -e s/ */\n/g cat -n = nl = sed -e = =-komento numeroi rivejä head -n 10 = sed -e 10q 10 riviä ja q-komento jne. lisää esimerkkejä info sed -ohjeissa, monet ovat tosin melko monimutkaisia ohjelmia jo tommi.pirinen+clt131@helsinki.fi (HY) CLT131: 6. luento 7. joulukuuta 2011 14 / 14