2009 Harri Pitkänen 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