CLT131: Tekstityökalut 2010, kolmas luento Tommi A Pirinen tommi.pirinen@helsinki.fi Helsingin yliopisto Kieliteknologian oppiaine, Nykykielten laitos 2010-11-19
Asialista Käytännön asiat/kertaus Ongelman kuvaus Menetelmät ja aineistot Työkalut Viitteitä
Laskuharjoitusaikataulut 2. harjoituksista omorfi-tehtävät (2 ja 3) voi palauttaa ensi viikollakin ensi keskiviikkona siis laskareissa vain omorfi- ja hippuasiaa, jotta kaikki saisivat riittävän suoritusympäristön lopputehtävien ja harjoitustyön tekoon seuraavat harjoitukset 3. 4. tarvitsee palauttaa vasta joulukuun 14. nämä harjoitukset ovat siis laajemmat ja sisältävät säännöllisiin lausekkeisiin liittyvän kokonaisuuden itse tehtävät pyritään saamaan verkkoon jo ensi viikolla
Harjoituksissa havaitut virheet hipun less ei perusasetuksilla toista värikoodeja, pitää olla less -r tehtävän 3 haussa +? täsmää myös yhdyssanarajan merkintään; haettavan sarjan olisi pitänyt olla joko sarkain+? (useimmille komennoille sarkain = \t) tai käyttää esim. sane-hakua (esim. grepissä valitsin -w)
Yhteenvetoja kitwiki-sivuille? jos haluaa systemaattista referenssiä kurssilla käytyihin komentoihin, ja esim. nyt käytäviin säännöllisten lausekkeiden merkintöihin, nämä kalvostot eivät ole mikään paras aineisto siihen kitwiki-sivuille voisi esim. tehdä yhteenvetoja, lyhyitä taulukoita tai listauksia asioista
Asialista Käytännön asiat/kertaus Ongelman kuvaus Menetelmät ja aineistot Työkalut Viitteitä
Tutkimusongelma: Etunimien automatisoitu keruu aineistosta Tehtäväkuvaus: Lähtökohdat: Ongelma:
Tutkimusongelma: Etunimien automatisoitu keruu aineistosta Tehtäväkuvaus: halutaan kerätä etunimiä sanaston laajentamiseksi käyttämällä kirjallisuusaineistoa Lähtökohdat: Ongelma:
Tutkimusongelma: Etunimien automatisoitu keruu aineistosta Tehtäväkuvaus: halutaan kerätä etunimiä sanaston laajentamiseksi käyttämällä kirjallisuusaineistoa Lähtökohdat: gutenbergin laaja kirja-aineisto perustekstityökalut ja hakumenetelmät morfologinen analysaattori? Ongelma:
Tutkimusongelma: Etunimien automatisoitu keruu aineistosta Tehtäväkuvaus: halutaan kerätä etunimiä sanaston laajentamiseksi käyttämällä kirjallisuusaineistoa Lähtökohdat: gutenbergin laaja kirja-aineisto perustekstityökalut ja hakumenetelmät morfologinen analysaattori? Ongelma: mikä määrittää sanan etunimeksi (Named entity recognition) millaisissa yhteyksissä etunimiä käytetään 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/kertaus Ongelman kuvaus Menetelmät ja aineistot Työkalut Viitteitä
Aineisto: Gutenbergin kirjat Ladataan yksi ja selvitetään miltä etunimet näyttävät: Tolstoin Ylösnousemus http://www.gutenberg.org/ebooks/12379
Aineisto: Gutenbergin kirjat Ladataan yksi ja selvitetään miltä etunimet näyttävät: Tolstoin Ylösnousemus http://www.gutenberg.org/ebooks/12379 Havaintoja lähtöoletuksia: (Nimet kirjoitetaan isolla alkukirjaimella helpottaa hakemista)
Aineisto: Gutenbergin kirjat Ladataan yksi ja selvitetään miltä etunimet näyttävät: Tolstoin Ylösnousemus http://www.gutenberg.org/ebooks/12379 Havaintoja lähtöoletuksia: (Nimet kirjoitetaan isolla alkukirjaimella helpottaa hakemista) sisältää paljon harvinaisempiakin etunimiä (esim. Maslova)
Aineisto: Gutenbergin kirjat Ladataan yksi ja selvitetään miltä etunimet näyttävät: Tolstoin Ylösnousemus http://www.gutenberg.org/ebooks/12379 Havaintoja lähtöoletuksia: (Nimet kirjoitetaan isolla alkukirjaimella helpottaa hakemista) sisältää paljon harvinaisempiakin etunimiä (esim. Maslova) nimet esiintyvät samoissa konteksteissa: repliikit: sanoi X tai X sanoi muut ihmissubjektiverbit: X epäili/x kuuli,... paljon muitakin...
Säännölliset lausekkeet Säännölliset lausekkeet/ilmaukset (Regular expressions) hyvin ilmaisuvoimainen menetelmä kuvata merkkijonojen sisältöjä: hakuja ja korvauksia säännöllisiä lausekkeita voi käyttää melkein kaikkien tekstiä käsittelevien ohjelmien hakulausekkeina kaikki yleiset ohjelmointikielet sisältävät säännöllisten lausekkeiden tuen
Säännölliset lausekkeet Säännölliset lausekkeet/ilmaukset (Regular expressions) hyvin ilmaisuvoimainen menetelmä kuvata merkkijonojen sisältöjä: hakuja ja korvauksia säännöllisiä lausekkeita voi käyttää melkein kaikkien tekstiä käsittelevien ohjelmien hakulausekkeina kaikki yleiset ohjelmointikielet sisältävät säännöllisten lausekkeiden tuen matemaattisessa formaalien kielten teoriassa, kuvaa säännöllisiä kieliä kielitietellisessä hierarkiassa oletetaan että vastaava ilmaisuvoima on morfologialla siis: kieliteknologiasovellukset, joilla ohjelmoidaan morfologioita, käyttävät tyypillisesti jonkinlaisia säännöllisiä ilmauksia
Menetelmä: säännöllisten lausekkeiden haku ja grep grep -F tai fgrep haki pelkkiä merkkijonoja grep -E tai egrep hakee eräitä säännöllisiä lausekkeita
Menetelmä: säännöllisten lausekkeiden haku ja grep grep -F tai fgrep haki pelkkiä merkkijonoja grep -E tai egrep hakee eräitä säännöllisiä lausekkeita valitsin -colour=auto värittää löytyneet kohdat (ks. myös ensimmäiset kalvot / aineistosivun.bashrc)
Menetelmä: säännöllisten lausekkeiden haku ja grep grep -F tai fgrep haki pelkkiä merkkijonoja grep -E tai egrep hakee eräitä säännöllisiä lausekkeita valitsin -colour=auto värittää löytyneet kohdat (ks. myös ensimmäiset kalvot / aineistosivun.bashrc) valitsin -o tulostaa vain täsmätyn kohdan (normaalisti grep tulostaa rivin jolta täsmäys löytyy)
Menetelmä: säännöllisten lausekkeiden haku ja grep grep -F tai fgrep haki pelkkiä merkkijonoja grep -E tai egrep hakee eräitä säännöllisiä lausekkeita valitsin -colour=auto värittää löytyneet kohdat (ks. myös ensimmäiset kalvot / aineistosivun.bashrc) valitsin -o tulostaa vain täsmätyn kohdan (normaalisti grep tulostaa rivin jolta täsmäys löytyy) valitsimella -C N voi tarkastella N riviä ympäristöstä
Menetelmä: säännöllisten lausekkeiden haku ja grep grep -F tai fgrep haki pelkkiä merkkijonoja grep -E tai egrep hakee eräitä säännöllisiä lausekkeita valitsin -colour=auto värittää löytyneet kohdat (ks. myös ensimmäiset kalvot / aineistosivun.bashrc) valitsin -o tulostaa vain täsmätyn kohdan (normaalisti grep tulostaa rivin jolta täsmäys löytyy) valitsimella -C N voi tarkastella N riviä ympäristöstä kokeillaan: fgrep -o jotain
Säänöllisten lausekkeiden teoriaa: eri tyypit ja sovellukset Riippuen sovelluksista säännöllisissä lausekkeissa eri asioita kuvataan hieman eri merkinnöillä (=syntakseilla) man-sivu: man 7 regex (melko tekninen)
Säänöllisten lausekkeiden teoriaa: eri tyypit ja sovellukset Riippuen sovelluksista säännöllisissä lausekkeissa eri asioita kuvataan hieman eri merkinnöillä (=syntakseilla) man-sivu: man 7 regex (melko tekninen) POSIX extended: erikoismerkeillä +?(){} on erikoismerkitys; sovellukset: grep -E tai egrep lessin haku (näppäin / ) sed -r awk
Säänöllisten lausekkeiden teoriaa: eri tyypit ja sovellukset Riippuen sovelluksista säännöllisissä lausekkeissa eri asioita kuvataan hieman eri merkinnöillä (=syntakseilla) man-sivu: man 7 regex (melko tekninen) POSIX extended: erikoismerkeillä +?(){} on erikoismerkitys; sovellukset: grep -E tai egrep lessin haku (näppäin / ) sed -r awk POSIX basic: erikoismerkit muodostetaan merkin takavinoviivan \kanssa; sovellukset: grep vimin haku (näppäin / ) sed
Säänöllisten lausekkeiden teoriaa: eri tyypit ja sovellukset Riippuen sovelluksista säännöllisissä lausekkeissa eri asioita kuvataan hieman eri merkinnöillä (=syntakseilla) man-sivu: man 7 regex (melko tekninen) POSIX extended: erikoismerkeillä +?(){} on erikoismerkitys; sovellukset: grep -E tai egrep lessin haku (näppäin / ) sed -r awk POSIX basic: erikoismerkit muodostetaan merkin takavinoviivan \kanssa; sovellukset: grep vimin haku (näppäin / ) sed Muut: Perl: grep -P tai perl Xerox: lexc, twolc, xfst (kieliteknologian kurssit CLT260, CLT270 jne.)
Asialista Käytännön asiat/kertaus Ongelman kuvaus Menetelmät ja aineistot Työkalut Viitteitä
Työsuunnitelma Alku kuten viimeksikin 1. haetaan kirja gutenbergistä hipulle: wget http://www.gutenberg.org/cache/epub/12379/pg1237 2. (uudelleennimetään järkevämmin (mv pg12379.txt ylosnousemus.txt)) 3. korjataan rivinvaihdot (dos2unix ylosnousemus.txt) 4. hankiudutaan eroon englanninkielisistä osioista (tail -n +28 ylosnousemus.txt head -n -400 > ylosnousemus-siistitty.txt)
Työsuunnitelma 1. haetaan kirja gutenbergistä hipulle: wget http://www.gutenberg.org/cache/epub/12379/pg1237 2. (uudelleennimetään järkevämmin (mv pg12379.txt ylosnousemus.txt)) 3. korjataan rivinvaihdot (dos2unix ylosnousemus.txt) 4. hankiudutaan eroon englanninkielisistä osioista (tail -n +28 ylosnousemus.txt head -n -400 > ylosnousemus-siistitty.txt) 5. haetaan nimet... ( egrep) 6. pitää siis formuloida egrepille se mitä sanottiin nimistä aiempana: oikeat verbit, isot alkukirjaimet...
Säännöllisten lausekkeiden syntaksia: yksinkertaiset saneet ja vaihtoehdot haluttiin etsiä (luonnollisen kielen) lausekkeet (phrase) tyyppiä X sanoi: kuten fgrepillä: egrep sanoi
Säännöllisten lausekkeiden syntaksia: yksinkertaiset saneet ja vaihtoehdot haluttiin etsiä (luonnollisen kielen) lausekkeet (phrase) tyyppiä X sanoi: kuten fgrepillä: egrep sanoi lisäksi muita sopivia verbejä sisältävät lausekkeet X epäili, X kuuli säännöllisissä lausekkeissa tai merkitään putkella eli pystyviivalla : egrep sanoi epäili kuuli
Säännöllisten lausekkeiden syntaksia: yksinkertaiset saneet ja vaihtoehdot haluttiin etsiä (luonnollisen kielen) lausekkeet (phrase) tyyppiä X sanoi: kuten fgrepillä: egrep sanoi lisäksi muita sopivia verbejä sisältävät lausekkeet X epäili, X kuuli säännöllisissä lausekkeissa tai merkitään putkella eli pystyviivalla : egrep sanoi epäili kuuli vielä tulee virheellisiä tuloksia: esim. sanoilla. sananrajaa voisi merkitä \b: egrep \bsanoi\b \bepäili\b \bkuuli\b = egrep \b(sanoi epäili kuuli)\b : sanarajat voi yhdistää ryhmittämällä sanat sulkeilla
Säännöllisten lausekkeiden syntaksia: merkkiluokat haluttiin etsiä aiempiin lausekkeisiin liittyviä nimiä: isolla kirjaimella alkavia sanoja säännöllisissä lausekkeissa mitä tahansa yhtä merkkiä titeystä joukosta voi ilmaista hakasulkeilla: [abcdefghijklmnopqrstuvwxyzåäö] on suomen pienten kirjainten joukko
Säännöllisten lausekkeiden syntaksia: merkkiluokat haluttiin etsiä aiempiin lausekkeisiin liittyviä nimiä: isolla kirjaimella alkavia sanoja säännöllisissä lausekkeissa mitä tahansa yhtä merkkiä titeystä joukosta voi ilmaista hakasulkeilla: [abcdefghijklmnopqrstuvwxyzåäö] on suomen pienten kirjainten joukko kulmasulkeiden sisällä voi käyttää joitakin nimettyjä joukkoja, jotka myös ilmoitetaan kulmasulkeilla ja lisäksi kaksoispisteillä: [[:lower:]] on sama kuin edellinen kulmasulkeissa voi myös käyttää välejä: [a-ö] on lähes sama kuin edellinen (saattaa sisältää isoja kirjaimia)
Säännöllisten lausekkeiden syntaksia: merkkiluokat haluttiin etsiä aiempiin lausekkeisiin liittyviä nimiä: isolla kirjaimella alkavia sanoja säännöllisissä lausekkeissa mitä tahansa yhtä merkkiä titeystä joukosta voi ilmaista hakasulkeilla: [abcdefghijklmnopqrstuvwxyzåäö] on suomen pienten kirjainten joukko kulmasulkeiden sisällä voi käyttää joitakin nimettyjä joukkoja, jotka myös ilmoitetaan kulmasulkeilla ja lisäksi kaksoispisteillä: [[:lower:]] on sama kuin edellinen kulmasulkeissa voi myös käyttää välejä: [a-ö] on lähes sama kuin edellinen (saattaa sisältää isoja kirjaimia) mutta vain jos asetukset ovat suomen kielellä!: locale kieliasetukset egrep \b(sanoi epäili kuuli)\b [[:upper:]] hakee isolla kirjaimella alkavia sanoja näiden jäljestä
Säännöllisten lausekkeiden syntaksia: toisto nimestä puuttuu enää ison kirjaimen jälkeinen osa; mielivaltainen määrä pieniä kirjaimia mielivaltainen toisto on säännöllisissä lausekkeissa asteriski eli tähti * : egrep \b(sanoi epäili kuuli)\b [[:upper:]][[:lower:]]*
Säännöllisten lausekkeiden syntaksia: toisto nimestä puuttuu enää ison kirjaimen jälkeinen osa; mielivaltainen määrä pieniä kirjaimia mielivaltainen toisto on säännöllisissä lausekkeissa asteriski eli tähti * : egrep \b(sanoi epäili kuuli)\b [[:upper:]][[:lower:]]* nyt meillä on tarvittavat sanat ja nimet perässä: voidaan sanoa egrep -o niin saadaan melkein listaus nimistä... Loppuun?
Säännöllisten lausekkeiden syntaksia: yhteenveto 1 merkkijonot vastaavat hakulausekkeita, pystyviivalla merkitään tai-tyypin ehto ja kaarisulkeilla ryhmitellään hakasulkeilla määritellään erilaisia joukkoja: luettelemalla [abc...] väleinä [a-z] luokkina [[:lower:]] (nimet esim. man-sivulla) merkkien ja joukkojen jälkeen voi merkitä toistoja: tähdellä a * miten monta vain 0 plussalla a+ ainakin yksi 1 kysymysmerkillä a? ehkä yksi 0 1 kaarisulkeilla raja-arvoin a{1,5} 1 5
Asialista Käytännön asiat/kertaus Ongelman kuvaus Menetelmät ja aineistot Työkalut Viitteitä
Kirjallisuus ja linkit Säännöllisistä lausekkeista on paljon kirjoja: Mastering Regular Expressions (978-0596528126) Regular Expression Pocket Reference (978-0596004156) ja verkkosivuja: http://regular-expressions.info http://www.dmoz.org/computers/programming/ Languages/Regular_Expressions/