[hunspell-fi-devel] Suomi-Malagan optimointia

Harri Pitkänen hatapitk at cc.jyu.fi
Sat Apr 29 19:56:56 EEST 2006


Versioon 0.6 tekemäni muutokset löytyvät osoitteesta
http://www.hunspell-fi.org/patches/sm/0.6/

01 ja 02 sisältävät vanhoja muutoksia, mutta 03 on uusi. Siinä on 
seuraavanlaisia muutoksia:

- Poistettu pari ei-kirjakielistä sanaa ja sana "iätä" (josta en tiedä mitä se 
tarkoittaa). Näille sanoille on yhteistä se, että niissä alku-kenttä on yhden 
merkin mittainen. Malagan formalismissa tällaiset sanat vaikuttavat 
suorituskykyyn heikentävästi, koska ne näyttävät sopivan moneen paikkaan. 
Esimerkiksi sanaa "sä" kokeillaan kaikkiin s-alkuisiin sanoihin jne. Kokeilin 
huvikseni poistaa kaikki tällaiset sanat (niitä on vain pari kymmentä) ja 
Malagan nopeus satunnaisia sanoja oikoluettaessa kasvoi tämän muutoksen 
seurauksena lähes kymmenellä prosentilla.

- Listojen läpikäynti foreach-rakenteella oli joissain tapauksissa tehty 
hitaalla tavalla, eli tyyliin
  foreach $k in length ($vasen):
    $s :=+ $vasen.$k.alku;
  end;
Nopeampi (ja selvempi) tapa on
  foreach $k in $vasen:
    $s :=+ $k.alku;
  end;
Nämäkin muutokset lisäsivät Malagan nopeutta parilla prosentilla.

- latex-avainsanoihin liittyvä combi_rule on poistettu initial-listasta, koska 
sitäkin kokeiltiin jokaisen sanan kohdalla vaikka itse latex-avainsanat oli 
jo aikaisemmin poistettu oikoluvussa tunnistettavista sanoista.

- initial-listassa on osa säännöistä laitettu else-sanan taakse. Tuo näytti 
hitusen nopeuttavan toimintaa, ei tosin merkittävästi. En tiedä onko tuolla 
suurta merkitystä, mutta haittaakaan en huomannut muutoksella olevan.

- Muutamien symbolien nimissä oli isoja ja pieniä kirjaimia käytetty 
vaihtelevasti. Nuo tapaukset on korjattu. Tällä ei tavallisesti ole mitään 
vaikutusta koska Malaga ei tunne eroa isojen ja pienten kirjaimien välillä. 
Mutta olen testaillut muutosta Malagaan, joka aiheuttaisi sen että isot ja 
pienet kirjaimet tunnistettaisiin eri merkkeinä. Tämä on tehokkuusasia (tällä 
hetkellä Malaga käyttää noin 20 prosenttia ajasta tekemällä 
kirjaintasoriippumattomia merkkijonovertailuja, jotka ovat hitaita varsinkin 
kun vertailtavat merkkijonot ovat UTF8-koodattuja) mutta isojen ja pienten 
kirjainten erottelusta voi olla myös hyötyä nimien oikeinkirjoitusta 
tarkistettaessa.

Hannu kysyi myös, miksi sanastoon ei voi saman tien laittaa kaikkia sanoja. 
Kuten edellä nähtiin, sanojen lisääminen voi heikentää oikoluvun nopeutta (ja 
tarkkuutta) monissa tapauksissa huomattavasti voimakkaammin kuin aikaisemmin 
olin luullut. Erityisesti ongelmallisia ovat lyhyet erityisalojen sanat. 
Toinen syy on se, että tämän projektin tarkoitus ei ole määritellä 
täydellistä listaa suomenkielisistä sanoista. Tällainen tavoite johtaisi 
väistämättä määrittelyongelmiin, eli syntyvä sanasto olisi joka tapauksessa 
jonkun mielestä huono tai käyttökelvoton. Jos esimerkiksi haluat käyttää 
voikkoa apuna kännykän ennakoivassa tekstinsyötössä, niin haluat varmasti 
mukaan kaikenlaisia lyhyitä sanoja kuten "mä" ja "sä" joita taas tavallisessa 
oikoluvussa ei hyväksyttäisi. Paras tapa selvitä tästä ongelmasta on tehdä 
hyvin laaja sanasto, josta haluttuja sanoja sitten otetaan käyttötarkoituksen 
mukaan. Esimerkiksi sanoja voidaan luokitella asteikolla "harvinainen - 
yleinen", "kirjakielinen - murteellinen" ja lisäksi niitä voidaan ryhmitellä 
aloittain (lääketieteen termi, 100 000 - 10 000 000 asukkaan eurooppalainen 
kaupunki jne.) Tietysti tästä laajemmasta sanalistasta sitten valitsemme 
tiettyjen hakuehtojen mukaan ne sanat, jotka otamme oletusarvoisesti mukaan 
oikolukusanastoon, mutta käyttäjille (ja tässä tapauksessa käyttäjällä ei 
tarkoiteta tavallista tekstinkäsittelyohjelman käyttäjää) pitää jättää 
mahdollisuus tehdä muita valintoja ilman, että heidä tarvitsee itse koota 
alusta lähtien koko sanastoa. Tämä asia ei muuten liity suoranaisesti 
Suomi-Malagaan: asiaa on käsitelty tällä listalla jo viime vuoden puolella.

Harri



More information about the devel mailing list