[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