Blob Blame History Raw
2009 Harri Pitkänen <hatapitk@iki.fi>                    GPLv2+

 Oikoluvun korjausehdotusten järjestäminen
 =========================================

Seuraavassa on kuvattu algoritmi, jolla oikoluvun korjausehdotukset
järjestetään. Perusperiaate on, että kullekin korjausehdotukselle
lasketaan käänteinen painokerroin siten, että sana, jolla on pienin
painokerroin, tulkitaan todennäköisimmäksi korjaukseksi tunnistamattomalle
sanalle. Painokertoimet ovat positiivisia kokonaislukuja.

Vaihe 1:

Korjausehdotukselle annetaan sanaluokasta ja taivutusmuodosta riippuva
paino p1 seuraavasti taulukon mukaan:

NOMINIT
Sijamuoto     p1 
nimentö       2
omanto        3
osanto        5
olento       20
tulento      20
sisäolento    8
sisäeronto   12
sisätulento   8
ulko-olento  12
ulkoeronto   30
ulkotulento  20
vajanto      60
seuranto     60
keinonto     20

Yllä olevat painokertoimet perustuvat löyhästi taivutusmuotojen
yleisyyteen kirjoitetussa tekstissä (VISK § 1227).

MUIDEN SANALUOKKIEN SANAT: p1 = 4

Vaihe 2:

Kerroin p2 lasketaan sen mukaan, miten monta vahvan morfeemirajan
erottamaa osaa siinä on.
 p2 = 8^(min({erillisten osien lukumäärä}, 5) - 1).

Vaihe 3:

Kerroin p3 määräytyy siitä, kuinka suuria muutoksia sanan kirjainkoon
käyttöön on tehtävä, jotta sana olisi oikein kirjoitettu.

 Jos sana on sellaisenaan oikein, p3 = 1.
 Jos sanan alkukirjain on vaihdettava isoksi kirjaimeksi, p3 = 2.
 Jos sanan kirjainkokoon on tehtävä muita muutoksia kuin ensimmäisen
 kirjaimen muuttaminen isoksi, p3 = 3.

Monikäsitteiset sanat:

Jos sanalla on useita analyysejä, valitaan painokertoimet siitä
analyysistä, jonka painokerroin p3 on pienin. Jos näitäkin on useita,
valitaan se analyysi, jonka painokertoimien tulo p1 * p2 * p3 on
pienin.

Vaihe 4:

Korjausehdotusten generointijärjestys Voikossa on sellainen, että
ensin generoidaan ehdotukset, jotka eroavat alkuperäisestä sanasta
mahdollisimman vähän. Generointijärjestyksen määrää käytettävä
SuggestionStrategy-olio, joten järjestys riippuu myös siitä, ollaanko
korjaamassa ihmisen tekemiä näppäilyvirheitä vai optisessa
tekstintunnistuksessa tapahtuneita virheitä. Generointijärjestys
vaikuttaa sanan painokertoimeen seuraavan kaavan mukaisesti:
 n = korjausehdotuksen järjestysluku (ensimmäinen = 0)
 p4 = n + 5

Lopullinen painokerroin:

Lopullinen painokerroin on edellä laskettujen painokerrointen tulo:
 p = p1 * p2 * p3 * p4

Jos korjauksena ehdotetaan sanan jakamista kahteen osaan, lasketaan
kertoimet p1, p2 ja p3 kummallekin osalle erikseen, ja lopullinen
kerroin on
 p = (p1_1 * p2_1 * p3_1 + p1_2 * p2_2 * p3_2) * p4

Painokerrointen arvoalue on siis generoitaessa enintään 15 ehdotusta
 [2 * 1 * 1 * 5, 60 * 4096 * 3 * 19] = [10, 14 008 320]

Lähteet:

VISK = Auli Hakulinen, Maria Vilkuna, Riitta Korhonen, Vesa Koivisto,
Tarja Riitta Heinonen ja Irja Alho 2004: Iso suomen kielioppi.
Helsinki: Suomalaisen Kirjallisuuden Seura. Verkkoversio, viitattu 11.9.2009.
Saatavissa: http://scripta.kotus.fi/visk URN:ISBN:978-952-5446-35-7