• Ei tuloksia

PDF Tommi A Pirinen tommi.pirinen@helsinki

N/A
N/A
Info
Lataa
Protected

Academic year: 2023

Jaa "PDF Tommi A Pirinen tommi.pirinen@helsinki"

Copied!
46
0
0

Kokoteksti

(1)

CLT131: Tekstityökalut 2010, neljäs luento

Tommi A Pirinen

tommi.pirinen@helsinki.fi

Helsingin yliopisto

Kieliteknologian oppiaine, Nykykielten laitos

2010-11-26

(2)

Asialista

Käytännön asiat

Kertausta shelliskriptien ohjausrakenteista ja palautusarvoista Ongelman kertaus

Menetelmät ja aineistot Työkalut

Viitteitä

(3)

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

(4)

Asialista

Käytännön asiat

Kertausta shelliskriptien ohjausrakenteista ja palautusarvoista

Ongelman kertaus Menetelmät ja aineistot Työkalut

Viitteitä

(5)

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

(6)

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

(7)

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

(8)

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

(9)

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

(10)

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

(11)

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

(12)

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

(13)

Asialista

Käytännön asiat

Kertausta shelliskriptien ohjausrakenteista ja palautusarvoista Ongelman kertaus

Menetelmät ja aineistot Työkalut

Viitteitä

(14)

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!

(15)

Asialista

Käytännön asiat

Kertausta shelliskriptien ohjausrakenteista ja palautusarvoista Ongelman kertaus

Menetelmät ja aineistot Työkalut

Viitteitä

(16)

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)

(17)

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)

(18)

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’

(19)

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’

(20)

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/’

(21)

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/’

(22)

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/’

(23)

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/’

(24)

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/’

(25)

Lisätieto: sed ja morfologia

I on täysin mahdollista toteuttaa koko taivutusoppi sed-käskyillä

I esimerkki:vesi:

I vesivedenvettäveteenvedetvesien,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. . .

(26)

Lisätieto: sed ja morfologia

I on täysin mahdollista toteuttaa koko taivutusoppi sed-käskyillä

I esimerkki: vesi:

I vesivedenvettäveteenvedetvesien, 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. . .

(27)

Lisätieto: sed ja morfologia

I on täysin mahdollista toteuttaa koko taivutusoppi sed-käskyillä

I esimerkki: vesi:

I vesivedenvettäveteenvedetvesien, 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. . .

(28)

Lisätieto: sed ja morfologia

I on täysin mahdollista toteuttaa koko taivutusoppi sed-käskyillä

I esimerkki: vesi:

I vesivedenvettäveteenvedetvesien, 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. . .

(29)

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’

(30)

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’

(31)

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’

(32)

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’

(33)

Asialista

Käytännön asiat

Kertausta shelliskriptien ohjausrakenteista ja palautusarvoista Ongelman kertaus

Menetelmät ja aineistot Työkalut

Viitteitä

(34)

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)

(35)

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)

(36)

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)

(37)

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)

(38)

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) ?//’

(39)

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) ?//’

(40)

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

(41)

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

(42)

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/’

(43)

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/’

(44)

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/’

(45)

Asialista

Käytännön asiat

Kertausta shelliskriptien ohjausrakenteista ja palautusarvoista Ongelman kertaus

Menetelmät ja aineistot Työkalut

Viitteitä

(46)

Kirjallisuus ja linkit

I AWK programming language(978-0201079814)

Viittaukset

LIITTYVÄT TIEDOSTOT

When libraries were asked about the number of FTE (full term equivalent) staff members dedicated to working on OE/OER (excluding Open Access, Open Scholarship or Open Science),