CLT131: Tekstityökalut 2010, neljäs luento
Tommi A Pirinen
tommi.pirinen@helsinki.fi
Helsingin yliopisto
Kieliteknologian oppiaine, Nykykielten laitos
2010-11-26
Asialista
Käytännön asiat
Kertausta shelliskriptien ohjausrakenteista ja palautusarvoista Ongelman kertaus
Menetelmät ja aineistot Työkalut
Viitteitä
Lähiaikataulu
I ensi viikon luennoilla Hissu Mikkonen kertoo tekstityökaluista oikeassa kieliteknologiaprojektissa
I ensi viikosta ei tule harjoitustehtäviä, mutta sisältänee hyödyllisiä yksityiskohtia harjoitustyötä varten
I harjoitustyöstä on koottu jotain ohjeita verkkosivuille http://www.ling.helsinki.fi/kit/2010s/
clt131/priv/harjoitustyo.shtml
I harjoitukset 3—4 ovat verkkosivuilla nyt
http://www.ling.helsinki.fi/kit/2010s/
clt131/priv/harjoitukset4.shtml
Asialista
Käytännön asiat
Kertausta shelliskriptien ohjausrakenteista ja palautusarvoista
Ongelman kertaus Menetelmät ja aineistot Työkalut
Viitteitä
Shelliskriptien palautusarvot ja ehtorakenne
I käsitelty myös ainakin tämän vuoden CLT130:ssä→ lisätietoja niistä aineistoista
I kaikilla shell-komennoilla on palautus-arvo, joka tallentuu kunkin komennon jälkeen muuttujaan nimeltä$?:
I komennotfalsejatrueovat peruskomentoja jotka palauttavat ainaonnistui- taiepäonnistui-arvon vastaavasti
I muita mahdollisia arvoja on paljon; kaikki paitsi 0 epäonnistuvat (useat suuremmat arvot kriittisiä virheitä)
I suorituksen onnistumista voi testata if-komennolla, joka pelkistetymmillään testaa komennon onnistumista:
I true,false,echo $?
I if true ; then echo Totta ; fi
I if ! false ; then echo Ei aivan epätotta ; fi
Shelliskriptien palautusarvot ja ehtorakenne
I käsitelty myös ainakin tämän vuoden CLT130:ssä→ lisätietoja niistä aineistoista
I kaikilla shell-komennoilla on palautus-arvo, joka tallentuu kunkin komennon jälkeen muuttujaan nimeltä$?:
I komennotfalsejatrueovat peruskomentoja jotka palauttavat ainaonnistui- taiepäonnistui-arvon vastaavasti
I muita mahdollisia arvoja on paljon; kaikki paitsi 0 epäonnistuvat (useat suuremmat arvot kriittisiä virheitä)
I suorituksen onnistumista voi testata if-komennolla, joka pelkistetymmillään testaa komennon onnistumista:
I true,false,echo $?
I if true ; then echo Totta ; fi
I if ! false ; then echo Ei aivan epätotta ; fi
Shelliskriptien palautusarvot ja ehtorakenne
I käsitelty myös ainakin tämän vuoden CLT130:ssä→ lisätietoja niistä aineistoista
I kaikilla shell-komennoilla on palautus-arvo, joka tallentuu kunkin komennon jälkeen muuttujaan nimeltä$?:
I komennotfalsejatrueovat peruskomentoja jotka palauttavat ainaonnistui- taiepäonnistui-arvon vastaavasti
I muita mahdollisia arvoja on paljon; kaikki paitsi 0 epäonnistuvat (useat suuremmat arvot kriittisiä virheitä)
I suorituksen onnistumista voi testata if-komennolla, joka pelkistetymmillään testaa komennon onnistumista:
I true,false,echo $?
I if true ; then echo Totta ; fi
I if ! false ; then echo Ei aivan epätotta ; fi
Shelliskriptien palautusarvot ja ehtorakenne
I käsitelty myös ainakin tämän vuoden CLT130:ssä→ lisätietoja niistä aineistoista
I kaikilla shell-komennoilla on palautus-arvo, joka tallentuu kunkin komennon jälkeen muuttujaan nimeltä$?:
I komennotfalsejatrueovat peruskomentoja jotka palauttavat ainaonnistui- taiepäonnistui-arvon vastaavasti
I muita mahdollisia arvoja on paljon; kaikki paitsi 0 epäonnistuvat (useat suuremmat arvot kriittisiä virheitä)
I suorituksen onnistumista voi testata if-komennolla, joka pelkistetymmillään testaa komennon onnistumista:
I true,false,echo $?
I if true ; then echo Totta ; fi
I if ! false ; then echo Ei aivan epätotta ; fi
Shelliskriptien palautusarvot ja testaus
I putkitetulla skriptillä palautusarvo ei kerro toimivatko kaikki ohjelmat
I joissain tapauksissa tämän korvaa taulukkomuuttuja
$PIPESTATUS
I taulukosta saa arvoja hakasulkeilla:$PIPESTATUS[0]on ensimmäisen komennon palautusarvo,$PIPESTATUS[1]
toisen jne.
I muuttujia (kuten$PIPESTATUSta) ja monimutkaisia lausekkeitahan ymmärretään komennollatest; -eq testaa palautusarvojen tai muiden lukujen yhtäläisyyttä (ei = tai
==):
I false | true,echo $PIPESTATUS
I if test $PIPESTATUS[0] -eq 1 ; then echo eka väärin ; fi
Shelliskriptien palautusarvot ja testaus
I putkitetulla skriptillä palautusarvo ei kerro toimivatko kaikki ohjelmat
I joissain tapauksissa tämän korvaa taulukkomuuttuja
$PIPESTATUS
I taulukosta saa arvoja hakasulkeilla:$PIPESTATUS[0]on ensimmäisen komennon palautusarvo,$PIPESTATUS[1]
toisen jne.
I muuttujia (kuten$PIPESTATUSta) ja monimutkaisia lausekkeitahan ymmärretään komennollatest; -eq testaa palautusarvojen tai muiden lukujen yhtäläisyyttä (ei = tai
==):
I false | true,echo $PIPESTATUS
I if test $PIPESTATUS[0] -eq 1 ; then echo eka väärin ; fi
Shelliskriptien taulukot ja toistorakenteet
I koko taulukon saa merkkijonona bashissa indeksillä *:
${PIPESTATUS[*]}
I merkkijonoja test taas voi testata yhtäsuuruusmerkillä:
I false | true | false,echo $PIPESTATUS[*]
I if test ”${PIPESTATUS[*]}” = ”1 0 1” ; then echo Täsmäsi ; fi
I koko PIPESTATUS-rakenteesta onnnistumisten ja epäonnistumisten haun voi tehdä yksi kerrallaan tai valikoidulle grep-haulla
I shell-ohjelmoinnissa on myös mahdollisuus käydä läpi taulukoita ja listoja toistolausekkeellafor muuttuja in lista
I koko taulukon muuttujana saa indeksillä @:
I for status in ${PIPESTATUS[@]} ; do ....
I for vokaali in a e i o u y ä ö ; do echo
$vokaali on vokaali ; done
Shelliskriptien taulukot ja toistorakenteet
I koko taulukon saa merkkijonona bashissa indeksillä *:
${PIPESTATUS[*]}
I merkkijonoja test taas voi testata yhtäsuuruusmerkillä:
I false | true | false,echo $PIPESTATUS[*]
I if test ”${PIPESTATUS[*]}” = ”1 0 1” ; then echo Täsmäsi ; fi
I koko PIPESTATUS-rakenteesta onnnistumisten ja epäonnistumisten haun voi tehdä yksi kerrallaan tai valikoidulle grep-haulla
I shell-ohjelmoinnissa on myös mahdollisuus käydä läpi taulukoita ja listoja toistolausekkeellafor muuttuja in lista
I koko taulukon muuttujana saa indeksillä @:
I for status in ${PIPESTATUS[@]} ; do ....
I for vokaali in a e i o u y ä ö ; do echo
$vokaali on vokaali ; done
Asialista
Käytännön asiat
Kertausta shelliskriptien ohjausrakenteista ja palautusarvoista Ongelman kertaus
Menetelmät ja aineistot Työkalut
Viitteitä
Tutkimusongelma: Etunimien automatisoitu keruu aineistosta
Tehtäväkuvaus:
I halutaan kerätä etunimiä sanaston laajentamiseksi käyttämällä kirjallisuusaineistoa
Lähtökohdat:
I gutenbergin laaja kirja-aineisto
I perustekstityökalut ja hakumenetelmät
I morfologinen analysaattori?
Ongelma:
I mikä määrittää sanan etunimeksi (Named entity recognition)
I millaisissa yhteyksissä etunimiä käytetään
I miten saadaan nimistä perusmuoto? Tiedetään, että morfologinen analysaattorimme ei osaa perusmuotoista nimiä, joita ei ole sanastossa — juuri niitä mitä etsimme!
Asialista
Käytännön asiat
Kertausta shelliskriptien ohjausrakenteista ja palautusarvoista Ongelman kertaus
Menetelmät ja aineistot Työkalut
Viitteitä
Säännöllisten lausekkeet ja hakutulosten operointi:
sed
I sedillä täsmätään säännöllisiin lausekkeisiin ja tehdään täsmätylle osalle muunnoksia
I sed on kuten tr, joka yhden merkin sijasta käsittelee säännöllisiä ilmauksia
I sedin komentokielessä on paljon muutakin
toiminnallisuutta, kurssilla käytetään lähinnä korvaus- ja poistokomentoja
I säännöllisten lausekkeiden murteissased -rvastaa egrepiä ja pelkkäsedvastaagrepiä; käytämme lähinnä aiempia
I sedin käskyt annetaan valitsimella-e käsky, näitä voi olla useampia (yhden tapauksessa -e ei ole pakollinen, mutta välttää kirjoitusvirheitä paremmin)
Säännöllisten lausekkeet ja hakutulosten operointi:
sed
I sedillä täsmätään säännöllisiin lausekkeisiin ja tehdään täsmätylle osalle muunnoksia
I sed on kuten tr, joka yhden merkin sijasta käsittelee säännöllisiä ilmauksia
I sedin komentokielessä on paljon muutakin
toiminnallisuutta, kurssilla käytetään lähinnä korvaus- ja poistokomentoja
I säännöllisten lausekkeiden murteissased -rvastaa egrepiä ja pelkkäsedvastaagrepiä; käytämme lähinnä aiempia
I sedin käskyt annetaan valitsimella-e käsky, näitä voi olla useampia (yhden tapauksessa -e ei ole pakollinen, mutta välttää kirjoitusvirheitä paremmin)
sed: korvaus
I korvauskäskyn muoto on
s/lauseke/korvaus/asetukset:
I lauseke on tavan säännöllinen lauseke
I korvaus on korvaava merkkijono; korvausosa ei ole säännöllinen lauseke, mutta voi sisältää joitain erikoismerkkejä
I asetukset koostuu kirjaimista: olennaisia ovatg, joka toistaa korvauksen monta kertaa per rivi (oletuksena vain kerran) jaijonka tarkoitus on käsitellä isoja ja pieniä kirjaimia yhtäläisinä
I esim.tr ’ ’ ’\n’=sed -r -e ’s/ /\n/g’
I esim.tr -d ’[:punct:]’=sed -r -e
’s/[[:punct:]]//g’
sed: korvaus
I korvauskäskyn muoto on
s/lauseke/korvaus/asetukset:
I lauseke on tavan säännöllinen lauseke
I korvaus on korvaava merkkijono; korvausosa ei ole säännöllinen lauseke, mutta voi sisältää joitain erikoismerkkejä
I asetukset koostuu kirjaimista: olennaisia ovatg, joka toistaa korvauksen monta kertaa per rivi (oletuksena vain kerran) jaijonka tarkoitus on käsitellä isoja ja pieniä kirjaimia yhtäläisinä
I esim.tr ’ ’ ’\n’=sed -r -e ’s/ /\n/g’
I esim.tr -d ’[:punct:]’=sed -r -e
’s/[[:punct:]]//g’
sed: toisto ja järjestely
I sed-lausekkeen rakenne oli siis s/lauseke/korvaus/asetuket:
I korvausosassa & kopioi täsmäyksen
I kahdennetaan merkkejä:sed -r -e ’s/./&&/g’
I yleisesti \n, jossa n = 0—9, kopioivalitunosan
lausekkeesta; valinta 0 on aina kaikki, eli sama kuin &
I valinnat 1—9 voi tehdä kaarisulkeilla
I järjestellään kirjainkolmikoita uudelleen (salakirjoitetaan): sed -r -e ’s/(.)(.)(.)/\3\2\1/g
I etsitään punaisia olioita:fgrep punainen | sed -e
’s/punainen ([[:alpha:]]*)/\1/’
I tutkitaan ekvatiivilauseiden ”argumentteja” eli kollokaatteja: sed -r -e ’s/([[:alpha:]]*) on
([[:alpha:]]*)/\1,\2/’
sed: toisto ja järjestely
I sed-lausekkeen rakenne oli siis s/lauseke/korvaus/asetuket:
I korvausosassa & kopioi täsmäyksen
I kahdennetaan merkkejä:sed -r -e ’s/./&&/g’
I yleisesti \n, jossa n = 0—9, kopioivalitunosan
lausekkeesta; valinta 0 on aina kaikki, eli sama kuin &
I valinnat 1—9 voi tehdä kaarisulkeilla
I järjestellään kirjainkolmikoita uudelleen (salakirjoitetaan): sed -r -e ’s/(.)(.)(.)/\3\2\1/g
I etsitään punaisia olioita:fgrep punainen | sed -e
’s/punainen ([[:alpha:]]*)/\1/’
I tutkitaan ekvatiivilauseiden ”argumentteja” eli kollokaatteja: sed -r -e ’s/([[:alpha:]]*) on
([[:alpha:]]*)/\1,\2/’
sed: toisto ja järjestely
I sed-lausekkeen rakenne oli siis s/lauseke/korvaus/asetuket:
I korvausosassa & kopioi täsmäyksen
I kahdennetaan merkkejä:sed -r -e ’s/./&&/g’
I yleisesti \n, jossa n = 0—9, kopioivalitunosan
lausekkeesta; valinta 0 on aina kaikki, eli sama kuin &
I valinnat 1—9 voi tehdä kaarisulkeilla
I järjestellään kirjainkolmikoita uudelleen (salakirjoitetaan):
sed -r -e ’s/(.)(.)(.)/\3\2\1/g
I etsitään punaisia olioita:fgrep punainen | sed -e
’s/punainen ([[:alpha:]]*)/\1/’
I tutkitaan ekvatiivilauseiden ”argumentteja” eli kollokaatteja: sed -r -e ’s/([[:alpha:]]*) on
([[:alpha:]]*)/\1,\2/’
sed: toisto ja järjestely
I sed-lausekkeen rakenne oli siis s/lauseke/korvaus/asetuket:
I korvausosassa & kopioi täsmäyksen
I kahdennetaan merkkejä:sed -r -e ’s/./&&/g’
I yleisesti \n, jossa n = 0—9, kopioivalitunosan
lausekkeesta; valinta 0 on aina kaikki, eli sama kuin &
I valinnat 1—9 voi tehdä kaarisulkeilla
I järjestellään kirjainkolmikoita uudelleen (salakirjoitetaan):
sed -r -e ’s/(.)(.)(.)/\3\2\1/g
I etsitään punaisia olioita:fgrep punainen | sed -e
’s/punainen ([[:alpha:]]*)/\1/’
I tutkitaan ekvatiivilauseiden ”argumentteja” eli kollokaatteja: sed -r -e ’s/([[:alpha:]]*) on
([[:alpha:]]*)/\1,\2/’
sed: toisto ja järjestely
I sed-lausekkeen rakenne oli siis s/lauseke/korvaus/asetuket:
I korvausosassa & kopioi täsmäyksen
I kahdennetaan merkkejä:sed -r -e ’s/./&&/g’
I yleisesti \n, jossa n = 0—9, kopioivalitunosan
lausekkeesta; valinta 0 on aina kaikki, eli sama kuin &
I valinnat 1—9 voi tehdä kaarisulkeilla
I järjestellään kirjainkolmikoita uudelleen (salakirjoitetaan):
sed -r -e ’s/(.)(.)(.)/\3\2\1/g
I etsitään punaisia olioita:fgrep punainen | sed -e
’s/punainen ([[:alpha:]]*)/\1/’
I tutkitaan ekvatiivilauseiden ”argumentteja” eli kollokaatteja:
sed -r -e ’s/([[:alpha:]]*) on ([[:alpha:]]*)/\1,\2/’
Lisätieto: sed ja morfologia
I on täysin mahdollista toteuttaa koko taivutusoppi sed-käskyillä
I esimerkki:vesi:
I vesi∼veden∼vettä∼veteen∼vedet∼vesien,vetten∼ vesiä∼vesiin
I vartalovaihtelu on helppoja sed-muunnoksia; saadaan aikaantaivutusvartalot
I suffiksit liittyvät taivutusvartaloihin vielä helpommilla sed-kuvauksilla
I vartalovaihtelukoskee lopputavua: $ on hyödyksi:
I heikko vokaalivartalo→yksikön genetiivi
sed -r -e
’s/si$/de/’
-e ’s/$/n/’
I konsonanttivartalo→yksikön partitiivi
sed -r -e
’s/si$/t/’
-e ’s/$/tä/’
I vahva vokaalivartalo→yksikön illatiivi
sed -r -e
’s/si$/te/’
-e ’s/(.)$/\1\1n/’
I monikkovartalo→monikon partitiivi
sed -r -e
’s/si$/s/’
-e ’s/$/iä/’
I puuttuu: vokaaliharmonia ja astevaihtelu, sekä samanlaiset määritykset kaikille paradigmoille. . .
Lisätieto: sed ja morfologia
I on täysin mahdollista toteuttaa koko taivutusoppi sed-käskyillä
I esimerkki: vesi:
I vesi∼veden∼vettä∼veteen∼vedet∼vesien, vetten∼ vesiä∼vesiin
I vartalovaihtelu on helppoja sed-muunnoksia; saadaan aikaantaivutusvartalot
I suffiksit liittyvät taivutusvartaloihin vielä helpommilla sed-kuvauksilla
I vartalovaihtelukoskee lopputavua: $ on hyödyksi:
I heikko vokaalivartalo
→yksikön genetiivi
sed -r -e
’s/si$/de/’
-e ’s/$/n/’
I konsonanttivartalo
→yksikön partitiivi
sed -r -e
’s/si$/t/’
-e ’s/$/tä/’
I vahva vokaalivartalo
→yksikön illatiivi
sed -r -e
’s/si$/te/’
-e ’s/(.)$/\1\1n/’
I monikkovartalo
→monikon partitiivi
sed -r -e
’s/si$/s/’
-e ’s/$/iä/’
I puuttuu: vokaaliharmonia ja astevaihtelu, sekä samanlaiset määritykset kaikille paradigmoille. . .
Lisätieto: sed ja morfologia
I on täysin mahdollista toteuttaa koko taivutusoppi sed-käskyillä
I esimerkki: vesi:
I vesi∼veden∼vettä∼veteen∼vedet∼vesien, vetten∼ vesiä∼vesiin
I vartalovaihtelu on helppoja sed-muunnoksia; saadaan aikaantaivutusvartalot
I suffiksit liittyvät taivutusvartaloihin vielä helpommilla sed-kuvauksilla
I vartalovaihtelukoskee lopputavua: $ on hyödyksi:
I heikko vokaalivartalo
→yksikön genetiivised -r -e
’s/si$/de/’ -e ’s/$/n/’
I konsonanttivartalo
→yksikön partitiivised -r -e
’s/si$/t/’ -e ’s/$/tä/’
I vahva vokaalivartalo
→yksikön illatiivised -r -e
’s/si$/te/’ -e ’s/(.)$/\1\1n/’
I monikkovartalo
→monikon partitiivised -r -e
’s/si$/s/’ -e ’s/$/iä/’
I puuttuu: vokaaliharmonia ja astevaihtelu, sekä samanlaiset määritykset kaikille paradigmoille. . .
Lisätieto: sed ja morfologia
I on täysin mahdollista toteuttaa koko taivutusoppi sed-käskyillä
I esimerkki: vesi:
I vesi∼veden∼vettä∼veteen∼vedet∼vesien, vetten∼ vesiä∼vesiin
I vartalovaihtelu on helppoja sed-muunnoksia; saadaan aikaantaivutusvartalot
I suffiksit liittyvät taivutusvartaloihin vielä helpommilla sed-kuvauksilla
I vartalovaihtelukoskee lopputavua: $ on hyödyksi:
I heikko vokaalivartalo→yksikön genetiivi
sed -r -e
’s/si$/de/’ -e ’s/$/n/’
I konsonanttivartalo→yksikön partitiivi
sed -r -e
’s/si$/t/’ -e ’s/$/tä/’
I vahva vokaalivartalo→yksikön illatiivi
sed -r -e
’s/si$/te/’ -e ’s/(.)$/\1\1n/’
I monikkovartalo→monikon partitiivi
sed -r -e
’s/si$/s/’ -e ’s/$/iä/’
I puuttuu: vokaaliharmonia ja astevaihtelu, sekä samanlaiset määritykset kaikille paradigmoille. . .
Lisätieto: Säännölliset lausekkeet ja ohjelmointi: awk
I ohjelmointikieli, joka suorittaa käskyjä riveille, jotka täsmäävät säännölliseen lausekkeeseen tai muuhun ehtoon
I awk käsittelee riviä numeroituna joukkona saneita, joka on usein hyvä lähtökohta käsittelylle
I awkin komentojen muoto onehto {komennot}:
I ehto joka koostuu säännöllisestä lausekkeestaa merkitään vinoviivoin
I komentoja on paljon: esim.print,printftulostamiseen
I $n, jossa n kokonaisluku, viittaa saneen numeroon
I sanenumeroa voi käyttää hyödyksi ehdossa ja täsmätä säännöllistä lausekketta vain n:nteen saneeseen
I sanenumeroja voi käyttää hyväksi print-komennolla, ja tulostaa vain valitut saneet
I kokeillaan:
I egrep punainen=awk ’/punainen/ {print}’
I 3. sane ehdossaawk ’$3 ∼ /punainen/ {print}’
I ekvatiivit:awk ’/ˆ[[:alpha:]]* on [[:alpha:]]*$/ print $3 , ",", $1’
Lisätieto: Säännölliset lausekkeet ja ohjelmointi: awk
I ohjelmointikieli, joka suorittaa käskyjä riveille, jotka täsmäävät säännölliseen lausekkeeseen tai muuhun ehtoon
I awk käsittelee riviä numeroituna joukkona saneita, joka on usein hyvä lähtökohta käsittelylle
I awkin komentojen muoto onehto {komennot}:
I ehto joka koostuu säännöllisestä lausekkeestaa merkitään vinoviivoin
I komentoja on paljon: esim.print,printftulostamiseen
I $n, jossa n kokonaisluku, viittaa saneen numeroon
I sanenumeroa voi käyttää hyödyksi ehdossa ja täsmätä säännöllistä lausekketta vain n:nteen saneeseen
I sanenumeroja voi käyttää hyväksi print-komennolla, ja tulostaa vain valitut saneet
I kokeillaan:
I egrep punainen=awk ’/punainen/ {print}’
I 3. sane ehdossaawk ’$3 ∼ /punainen/ {print}’
I ekvatiivit:awk ’/ˆ[[:alpha:]]* on [[:alpha:]]*$/ print $3 , ",", $1’
Lisätieto: Säännölliset lausekkeet ja ohjelmointi: awk
I ohjelmointikieli, joka suorittaa käskyjä riveille, jotka täsmäävät säännölliseen lausekkeeseen tai muuhun ehtoon
I awk käsittelee riviä numeroituna joukkona saneita, joka on usein hyvä lähtökohta käsittelylle
I awkin komentojen muoto onehto {komennot}:
I ehto joka koostuu säännöllisestä lausekkeestaa merkitään vinoviivoin
I komentoja on paljon: esim.print,printftulostamiseen
I $n, jossa n kokonaisluku, viittaa saneen numeroon
I sanenumeroa voi käyttää hyödyksi ehdossa ja täsmätä säännöllistä lausekketta vain n:nteen saneeseen
I sanenumeroja voi käyttää hyväksi print-komennolla, ja tulostaa vain valitut saneet
I kokeillaan:
I egrep punainen=awk ’/punainen/ {print}’
I 3. sane ehdossaawk ’$3 ∼ /punainen/ {print}’
I ekvatiivit:awk ’/ˆ[[:alpha:]]* on [[:alpha:]]*$/ print $3 , ",", $1’
Lisätieto: Säännölliset lausekkeet ja ohjelmointi: awk
I ohjelmointikieli, joka suorittaa käskyjä riveille, jotka täsmäävät säännölliseen lausekkeeseen tai muuhun ehtoon
I awk käsittelee riviä numeroituna joukkona saneita, joka on usein hyvä lähtökohta käsittelylle
I awkin komentojen muoto onehto {komennot}:
I ehto joka koostuu säännöllisestä lausekkeestaa merkitään vinoviivoin
I komentoja on paljon: esim.print,printftulostamiseen
I $n, jossa n kokonaisluku, viittaa saneen numeroon
I sanenumeroa voi käyttää hyödyksi ehdossa ja täsmätä säännöllistä lausekketta vain n:nteen saneeseen
I sanenumeroja voi käyttää hyväksi print-komennolla, ja tulostaa vain valitut saneet
I kokeillaan:
I egrep punainen=awk ’/punainen/ {print}’
I 3. sane ehdossaawk ’$3 ∼ /punainen/ {print}’
I ekvatiivit:awk ’/ˆ[[:alpha:]]* on [[:alpha:]]*$/ print $3 , ",", $1’
Asialista
Käytännön asiat
Kertausta shelliskriptien ohjausrakenteista ja palautusarvoista Ongelman kertaus
Menetelmät ja aineistot Työkalut
Viitteitä
Työsuunnitelma
Jatketaan siitä mihin jäätiin:
1. haettiin kirja gutenbergistä hipulle:wget
http://www.gutenberg.org/cache/epub/12379/pg12379.txt 2. (uudelleennimettiin järkevämmin (mv pg12379.txt
ylosnousemus.txt))
3. korjattiin rivinvaihdot (dos2unix ylosnousemus.txt) 4. hankiuduttiin eroon englanninkielisistä osioista (tail -n
+28 ylosnousemus.txt | head -n -400 >
ylosnousemus-siistitty.txt)
5. haettiin nimet (egrep -o ’\b(sanoi|epäili|kuuli) [[:upper:]][[:lower:]]*)
6. enää pitää poimia nimet jo melkein valmiista listasta (→sed)
7. helpotetaan käsittelyä järjestelemällä frekvenssin mukaan (→sort, uniq)
8. viimeistellään tekemällä nimistä sanakirjaluokituksia eli arvaamalla taivutusluokkia (→sed tai awk)
Työsuunnitelma
Jatketaan siitä mihin jäätiin:
1. haettiin kirja gutenbergistä hipulle:wget
http://www.gutenberg.org/cache/epub/12379/pg12379.txt 2. (uudelleennimettiin järkevämmin (mv pg12379.txt
ylosnousemus.txt))
3. korjattiin rivinvaihdot (dos2unix ylosnousemus.txt) 4. hankiuduttiin eroon englanninkielisistä osioista (tail -n
+28 ylosnousemus.txt | head -n -400 >
ylosnousemus-siistitty.txt)
5. haettiin nimet (egrep -o ’\b(sanoi|epäili|kuuli) [[:upper:]][[:lower:]]*)
6. enää pitää poimia nimet jo melkein valmiista listasta (→sed)
7. helpotetaan käsittelyä järjestelemällä frekvenssin mukaan (→sort, uniq)
8. viimeistellään tekemällä nimistä sanakirjaluokituksia eli arvaamalla taivutusluokkia (→sed tai awk)
Työsuunnitelma
Jatketaan siitä mihin jäätiin:
1. haettiin kirja gutenbergistä hipulle:wget
http://www.gutenberg.org/cache/epub/12379/pg12379.txt 2. (uudelleennimettiin järkevämmin (mv pg12379.txt
ylosnousemus.txt))
3. korjattiin rivinvaihdot (dos2unix ylosnousemus.txt) 4. hankiuduttiin eroon englanninkielisistä osioista (tail -n
+28 ylosnousemus.txt | head -n -400 >
ylosnousemus-siistitty.txt)
5. haettiin nimet (egrep -o ’\b(sanoi|epäili|kuuli) [[:upper:]][[:lower:]]*)
6. enää pitää poimia nimet jo melkein valmiista listasta (→sed)
7. helpotetaan käsittelyä järjestelemällä frekvenssin mukaan (→sort, uniq)
8. viimeistellään tekemällä nimistä sanakirjaluokituksia eli arvaamalla taivutusluokkia (→sed tai awk)
Työsuunnitelma
Jatketaan siitä mihin jäätiin:
1. haettiin kirja gutenbergistä hipulle:wget
http://www.gutenberg.org/cache/epub/12379/pg12379.txt 2. (uudelleennimettiin järkevämmin (mv pg12379.txt
ylosnousemus.txt))
3. korjattiin rivinvaihdot (dos2unix ylosnousemus.txt) 4. hankiuduttiin eroon englanninkielisistä osioista (tail -n
+28 ylosnousemus.txt | head -n -400 >
ylosnousemus-siistitty.txt)
5. haettiin nimet (egrep -o ’\b(sanoi|epäili|kuuli) [[:upper:]][[:lower:]]*)
6. enää pitää poimia nimet jo melkein valmiista listasta (→sed)
7. helpotetaan käsittelyä järjestelemällä frekvenssin mukaan (→sort, uniq)
8. viimeistellään tekemällä nimistä sanakirjaluokituksia eli arvaamalla taivutusluokkia (→sed tai awk)
Poistetaan verbit nimien ympäriltä
I laajennetaan nimilistaa hieman sallimalla nimi verbin kummaksi tahansakollokaatiksi(viereiseksi saneeksi):
I egrep -o ’\b([[:upper:]][[:lower:]]*
(sanoi|epäili|kuuli))|((sanoi|epäili|kuuli) ([[:upper:]][[:lower:]]*)\b)’
I varsinainen nimilista saadaan verbistä ja nimistä koostuvista lausekkeista esim. poistamalla verbit, jotka tässä tapauksessa tunnetaan
I voidaan käyttää liki samaa säännöllistä lauseketta sedillä kuin grepillä:
I sed -r -e ’s/ ?(sanoi|epäili|kuuli) ?//’
Poistetaan verbit nimien ympäriltä
I laajennetaan nimilistaa hieman sallimalla nimi verbin kummaksi tahansakollokaatiksi(viereiseksi saneeksi):
I egrep -o ’\b([[:upper:]][[:lower:]]*
(sanoi|epäili|kuuli))|((sanoi|epäili|kuuli) ([[:upper:]][[:lower:]]*)\b)’
I varsinainen nimilista saadaan verbistä ja nimistä koostuvista lausekkeista esim. poistamalla verbit, jotka tässä tapauksessa tunnetaan
I voidaan käyttää liki samaa säännöllistä lauseketta sedillä kuin grepillä:
I sed -r -e ’s/ ?(sanoi|epäili|kuuli) ?//’
Kertausta: frekvenssilistaus
I käsitelty ainakin tämän vuoden CLT130-kurssilla:
työkaluilla sort ja uniq saa frekvenssilistauksia
I sortjärjestää
I uniq -claskee ja poistaa toistot
I sort -nrjärjestää frekvenssilistan
I tällä kertaa emme tee mitään frekvenssilukemilla, joten kehitellään sed-lauseke niiden poistoon:
I sort | uniq -c | sort -nron yksi yleisimpiä käskysarjoja käytettäväksi korpustutkimuksessa
I sed -r -e ’s/ˆ *[0-9]* //’poistaa frekvenssit
I awk ’print $2’lienee hivenen helpompi
Kertausta: frekvenssilistaus
I käsitelty ainakin tämän vuoden CLT130-kurssilla:
työkaluilla sort ja uniq saa frekvenssilistauksia
I sortjärjestää
I uniq -claskee ja poistaa toistot
I sort -nrjärjestää frekvenssilistan
I tällä kertaa emme tee mitään frekvenssilukemilla, joten kehitellään sed-lauseke niiden poistoon:
I sort | uniq -c | sort -nron yksi yleisimpiä käskysarjoja käytettäväksi korpustutkimuksessa
I sed -r -e ’s/ˆ *[0-9]* //’poistaa frekvenssit
I awk ’print $2’lienee hivenen helpompi
Alustava luokittelu
I suomen sanakirjoissa sanan luokitukseen tarvitaan tietää vartalovaihtelu, joka usein selviää vartalon lopusta
I esim. konsonanttiloppuinenNehljudoftaipuu kutenpaperi, siis merkitään konsonanttiloppuiset sanat luokkaan6:
I sed -r -e ’/[bcdfghjklmnpqrstvxz]$/&,6/’
I Maslovaei taivu kuinVera: pitää siis keksiä eri lausekkeet
I arvaamme, että kyse on aata edeltävästä vokaalista:
I sed -r -e ’/e.a$/&,9/’ -e ’/o.a$/&,10/’
Alustava luokittelu
I suomen sanakirjoissa sanan luokitukseen tarvitaan tietää vartalovaihtelu, joka usein selviää vartalon lopusta
I esim. konsonanttiloppuinenNehljudoftaipuu kutenpaperi, siis merkitään konsonanttiloppuiset sanat luokkaan6:
I sed -r -e ’/[bcdfghjklmnpqrstvxz]$/&,6/’
I Maslovaei taivu kuinVera: pitää siis keksiä eri lausekkeet
I arvaamme, että kyse on aata edeltävästä vokaalista:
I sed -r -e ’/e.a$/&,9/’ -e ’/o.a$/&,10/’
Alustava luokittelu
I suomen sanakirjoissa sanan luokitukseen tarvitaan tietää vartalovaihtelu, joka usein selviää vartalon lopusta
I esim. konsonanttiloppuinenNehljudoftaipuu kutenpaperi, siis merkitään konsonanttiloppuiset sanat luokkaan6:
I sed -r -e ’/[bcdfghjklmnpqrstvxz]$/&,6/’
I Maslovaei taivu kuinVera: pitää siis keksiä eri lausekkeet
I arvaamme, että kyse on aata edeltävästä vokaalista:
I sed -r -e ’/e.a$/&,9/’ -e ’/o.a$/&,10/’
Asialista
Käytännön asiat
Kertausta shelliskriptien ohjausrakenteista ja palautusarvoista Ongelman kertaus
Menetelmät ja aineistot Työkalut
Viitteitä
Kirjallisuus ja linkit
I AWK programming language(978-0201079814)