[hunspell-fi-devel] fi-spesifisen koodin lisääminen hunspell:iin itseensä

Harri Pitkänen hatapitk at cc.jyu.fi
Tue Jan 17 15:33:11 EET 2006


On Tuesday 17 January 2006 14:45, Tor Lillqvist wrote:
> hf-testaa -skriptissä (tai siis hunspellfi.py:ssä) on toiminnallisuutta
> joka pitäisi varmaan siirtää suoraan hunspell:in lähdekoodiin. Tarkoitan
> siis sitä vokaalisointuun ja liitepartikkeleihin liittyvää koodia. Onko
> kukaan tekemässä tätä vai teenkö itse? hunspell:issahan on muutenkin
> kielispesifistä koodia (lähinnä unkaria varten, siitähän sen nimikin
> tulee), joten ei sen koodi paljon rumemmaksi tulisi vaikka siihen
> lisäisi myös suomelle erikoiskäsittelyä...

Joo, olet oikeassa. Tuo Pythonilla kirjoitettu osuus onkin lähinnä 
prototyyppikoodia, tarkoitukseni olikin, että kunhan aikanaan saamme kaikki 
palaset toimimaan niin sitten ryhdytään siirtämään toiminnallisuutta 
Hunspellin sisään. Pythonilla vain on paljon helpompi työskennellä näin 
alkuvaiheessa kuin C++:lla. Mutta jos haluat jo nyt ryhtyä tätä tekemään, 
niin se olisi kyllä hienoa ja hyvinkin hyödyllistä.

> (Sinänsähän on aika rumaa että hunspell:in lähdekoodissa nimenomaan on
> kielispesifisiä koodinpätkiä, paljon elegantimpaahan olisi lisätä
> abstraktiota ja käsitellä vain "ominaisuuksia", joita sitten eri
> kielissä on eri osajoukko. Todennäköisesti esimerkiksi virossa ja
> suomessa olisi joukko yhteisiä tällaisia ominaisuuksia, muttei
> kuitenkaan niin että molemmissa olisi täsmälleen samat.)

Noita ongelmia on muutamassa viimeisessä Hunspellin versiossa korjailtukin 
jonkin verran ja pyritty pääsemään eroon kielispesifisistä ominaisuuksista.

> Entäs sitten astevaihtelut, eikö olisi suoraviivaisempaa jos
> suhteellisen selvät säännönmukaisuudet hoidettaisiin suoraan
> hunspell:issa eikä affiksisäännöilä. En tarkkaan itsekään tiedä mitä
> tarkoitan ;-) enkä todellakaan ole kielitieteilija, mutta toivottavasti
> ymmärrätte suurinpiirtein mihin pyrin...

Olisi periaatteessa. Mutta tässä minua vähän epäilyttää, että kuinka helposti 
tuollaisen mekanismin pystyy toteuttamaan. Nuo liitepartikkelit ovat 
periaatteessa helppoja, kun ne ovat vain päätteitä jotka voidaan poistaa ja 
sitten oikolukea jäljelle jäävä osuus. Mutta astevaihtelut tapahtuvat sanan 
sisällä, jolloin jouduttaisiin muuttamaan aivan Hunspellin ytimessä olevia 
algoritmeja. Tämä saattaa olla helppoa tai sitten ei, en totta puhuen ole 
uskaltanut edes selvittää koko asiaa :) Nykyinen mekanismi johtaa sanaston 
tilankäytön kasvuun muutamalla kymmenellä prosentilla, mutta siitä ei ole 
muuta haittaa. Tätä kyllä kannattaa jatkossa selvittää paremmin.

> Olenko muuten ymmärtänyt hunspell:in toimintaa yhdyssanojen suhteen
> oikein, että sille pitää tosiaan kertoa erikseen mitkä sanat voivat
> muodostaa yhdyssanojen alku- ja loppuosia? Tämähän ei suomeen sovi
> kovinkaan hyvin koska yhdyssanoja voi (ja pitää) muodostaa aika
> vapaasti, vai mitä?

Olet ymmärtänyt oikein. Tästä syystä en ole yhdyssanojen tunnistamista ottanut 
vielä käyttöön. Uudemmissa Hunspellin versioissa on COMPOUNDRULE -ominaisuus, 
joka pääsee jo lähelle sitä mitä tarvitsisimme, mutta ei kuitenkaan ihan 
riittävän pitkälle (viimeisintä versiota en ole vielä ehtinyt asentamaan, 
mutta tuskinpa siinä on mitään uutta tämän suhteen). Ajatuksenani oli 
toteuttaa tähänkin Pyhtonilla semmoinen kikka, että otetaan Hunspellissä 
käyttöön sanojen vapaa yhdistely, ja morph-funktiolla haetaan tutkittavalle 
sanalle sen kaikki mahdolliset morfologiset rakenteet. Sitten käydään ne läpi 
ja katsotaan, onko yksikään niistä järkevä kieliopin kannalta. Esimerkiksi 
"koiratarha" on oikein koska se antaisi 
"koira[SUBST]+NOMINATIIVI+tarha[SUBST]+NOMINATIIVI" ja kahden 
nominatiivimuotoisen substantiivin yhdistelmä on sallittu. Mutta 
"koirastatarha" antaa "koira[SUBST]+ELATIIVI+tarha[SUBST]+NOMINATIIVI" ja 
"koiras[SUBST]+PARTITIIVI+tarha[SUBST]+NOMINATIIVI" jotka molemmat ovat 
väärin, koska paikallissija+nominatiivi tai partitiivi+nominatiivi ei 
(ainakaan normaalisti) ole oikein.
Jos tämä strategia toimisi, niin senkin voisi sitten myöhemmin toteuttaa 
Hunspellin sisällä.

> Siihen liittyen, olisi varmaan kiva jos hunspell 
> joskus tarjoaisi mahdollisuuden löytää myös hyvin yleisen Lappeen Ranta
> -taudin ilmentymiä. Hmm, toisaalta se kai voi olla aika vaikeata,
> riippuu kai usein yhteydestä pitääkö sanat kirjoittaa yhteen vai ei,
> vrt. "kaikki vieraat saivat eteensä Dominot, koiran keksi laitettiin sen
> kulhoon" vs. "ota koirankeksi paketista ja anna hurtalle". No tuo ehkä
> oli kaukaa haettu esimerkki.

Tämä voisi olla mahdollista, mutta käytännössä se ei toimisi olemassa olevien 
oikolukua käyttävien sovellusten kanssa. Esimerkiksi OpenOffice.org (ja 
kaikki muutkin ohjelmat joiden lähdekoodia olen tutkiskellut) antavat 
tarkistettavan tekstin oikolukumoduulille sana kerrallaan, eli 
oikolukuohjelma ei tiedä mitään sanan kontekstista. Eikä siis voi havaita 
tällaisia virheitä. Paitsi toiseen suuntaan, eli jos kaksi sanaa on 
vahingossa mennyt yhteen, voi ne ehdottaa kirjoitettaviksi erilleen.


> Entäs pitäisikö hunspell:in osata korjata linjaauto -sanaa
> linja-auto:ksi? (Tehdäänköhän oikeasti paljon sellaisia
> kirjoitusvirheitä?)

Tämä on kai aika yleistä ja kyllä, tuollaiset virheet pitäisi pystyä 
tunnistamaan ja ehdottamaan oikeaa kirjoitusasua.

Harri



More information about the devel mailing list