CLT131: Tekstityökalut 2010, kolmas luento Tommi A Pirinen tommi.pirinen@helsinki.fi Helsingin yliopisto Kieliteknologian oppiaine, Nykykielten laitos 2010-11-19 Laskuharjoitusaikataulut Harjoituksissa havaitut virheet 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 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 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!
Aineisto: Gutenbergin kirjat Säännölliset lausekkeet 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/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 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) 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
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) 5. haetaan nimet... ( egrep) 6. pitää siis formuloida egrepille se mitä sanottiin nimistä aiempana: oikeat verbit, isot alkukirjaimet... 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 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
toisto yhteenveto 1 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? 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 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/