<div dir="ltr"><div>Moi,</div><div><br></div><div>Olen käyttänyt Voikkoa sanojen jakamiseen morfeemeihin (morfologiseen segmentointiin) ja perusmuotojen löytämiseen koneoppimistarkoituksiin. Ratkaisuni tähän ei toimi ehkä ihan ideaalisella tavalla, mutta ajattelinpa silti jakaa kahdella ajatuksella: 1) ehkä jollain on ideoita siihen, miten tehdä tämä paremmin; 2) ehkä tästä on jotain hyötyä jollekulle.</div><div><br></div><div><div>Tämän hetken ratkaisuni on siis mielestäni jo aika hyvä, ja voin sen kanssa elää. :) Olen hyvin tietoinen siitä, että Voikon vahvin fokus lienee oikoluvussa, joten on vain bonusta, jos sillä voi tehdä jotain tällaista.<br></div><div><br></div></div><div>Käytännössä tavoitteeni on jäsentää sanoja suunnilleen kaavaan</div><div><br></div><div>   [runko%]morfeemi + [runko%]morfeemi + ...<br></div><div><br></div><div>Esimerkkisana: "hallitsemaan"</div><div>Tulos: <span style="font-family:monospace">hallita%hallitse + ma + an</span><br></div><div><br></div><div>Esimerkkisana: "opiksenne"</div><div>Tulos: <span style="font-family:monospace">oppi%opi + kse + nne</span></div><div><br></div><div>-----</div><div><br></div><div>Tiedän, että ongelma on hiukan huonosti määritelty, eikä se haittaa minua; haluan vain jotain järkevää outputtia suurimman osan ajasta.<br></div><div><br></div><div>Tällä hetkellä käytän tämän tekemiseen Voikon palauttamaa FSTOUTPUT-kenttää (esim. <span style="font-family:monospace">voikkospell -m</span> tai Pythonissa Voikko.analyze()). Esimerkkisanoille:</div><div><br></div><div><span style="font-family:monospace">A(hallitsemaan):1:FSTOUTPUT=[Lt][Xp]hallita[X]hallitse[Tn3][Ny][Sill]maan</span></div><div><span style="font-family:monospace">A(hallitsemaan):1:WORDBASES=+hallita(hallita)</span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">A(hallitsemaan):2:WORDBASES=+hallitse(hallita)+m+a(+a)<br></span></div><div><span style="font-family:monospace">A(hallitsemaan):2:FSTOUTPUT=[Lt][Xp]hallita[X]hallitse[Ln][Rm]m[Xj]a[X][Sill][Ny]aan<br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">A(opiksenne):1:FSTOUTPUT=[Ln][Xp]oppi[X]opi[Str][Ny]kse[O2m]nne</span></div><div><span style="font-family:monospace">A(opiksenne):1:WORDBASES=+oppi(oppi)</span></div><div><br></div><div>Ymmärtämättä kovin paljoa tuosta FST-outputista olen päätynyt seuraavanlaiseen yksinkertaiseen algoritmiin:</div><div><br></div><div>1. Korvaa kaikki <span style="font-family:monospace">[X]</span>:t <span style="font-family:monospace">%</span>-merkillä.</div><div>2. Korvaa kaikki muut <span style="font-family:monospace">[..]</span>-tokenit <span style="font-family:monospace">+</span>-merkillä<br></div><div>3. Poista peräkkäiset <span style="font-family:monospace">+</span>-merkit.</div><div><br></div><div>Silloin kun voikko tarjoaa useampaa jäsennystä sanalle ja tämän tuloksena saataisiin erilaisia morfeemisegmentointeja (joskus saadaan useampi jäsennys, mutta segmentointi on sama), olen joko jättänyt kokonaan segmentoimatta tai valinnut manuaalisesti näistä oikean. Tämä on minulle ihan riittävän hyvä ratkaisu, ja oikeastaan näiden valinta käsin tarjotuista vaihtoehdoista ei ole ole niin työlästä kuin voisi kuvitella; koodasin ohjelman, joka tarjoaa tähän valikon, ja annotoin koulutustekstinä käyttämästäni Raamatusta monitulkintaisista tapauksista noin neljäsosan parissa tunnissa. (Tähän toki auttaa se, että koodasin mukaan kyvyn sanoa, että älä tarjoa tätä perusmuotoa enää koskaan. Listaan kertyy paljon sellaisia sanoja kuten ravi(ravin)+tosi(tosi), kylki+luinen, taivaan+kanne, määrä+aiko(aikoa)+ja, kaiken+laki, kymmen+enne, elämän+voida, akka+dia, omaisu(omainen)+us, jälkeläisten+säkki, jälkeläisten+säkä, ahdin+koni, kuun+tele+massa, leikkuun+aika+nakki...).</div><div><br></div><div>Joka tapauksessa, tämä toimii ihan kohtalaisesti. Ilmeisesti jotain noista FST-tokeneista pitäisi ilsäksi ignoroida, koska välillä saan ylimääräisiä +-merkkejä, kuten</div><div><br></div><div><span style="font-family:monospace">[Lep][Xp]Foinikia[X]foinikia[Ll][Dg]lai[Xj]nen[X][Sg][Nm]sten</span></div><div><span style="font-family:monospace">-> Foinikia%foinikia + lai + nen% + sten</span></div><div><br></div><div><div><span style="font-family:monospace">ahdistaa%ahdista + ja% + ja + mme</span><br><div><span style="font-family:monospace">ampua%ampu + ja% + jat</span><br><br></div></div></div><div>missä nähdäkseni pitäisi olla "<span style="font-family:monospace">nen%sten</span>" ja "<span style="font-family:monospace">ja%ja + mme</span>". Samoin jotkut tulokset ovat sillä tavalla jännittäviä, että niissä käytännössä hukataan esim. -nen-pääte korvauksessa, ja sitten lisätään myöhemmin takaisin:<br></div><div><br></div><div><span style="font-family:monospace">Getsemane%getsemane + - + nimi%nim + inen % i + seen</span></div><div><span style="font-family:monospace">aamu%aamu + n + sarastaa%sarast + us%u + kseen</span></div><div><span style="font-family:monospace">arvo%arvo + inen%i + nen</span></div><div><br></div><div>(Ensimmäisessä pitäisi varmaan olla <span style="font-family:monospace">nimi%nim + inen%iseen</span> tai <span style="font-family:monospace">inen%is + een</span>.)</div><div><br></div><div>Jotkut segmentoinnit eivät ole kovin johdonmukaisia (mikä ei kyllä haittaa minun sovellustani kovin paljoa):</div><div><br></div><div><span style="font-family:monospace">Jeesus%jeesu + kseen<br>Jeesus%jeesu + ksen</span></div><div><span style="font-family:monospace">Jeesus%jeesukse + lla<br>Jeesus%jeesukse + lle</span></div><div><br></div><div><span style="font-family:monospace">aallokko%aallok + ko<br>aallokko%aalloko + ssa</span></div><div><br></div><div><span style="font-family:monospace">aavikko%aavik + ko</span></div><div><span style="font-family:monospace">aavikko%aavik + koa</span>  (varmaan mieluiten näkisin <span style="font-family:monospace">aavik + ko + a</span>)<br></div><div><br></div><div><span style="font-family:monospace">aidata%aita + us%u + ksia</span></div><div><span style="font-family:monospace">aidata%aita + us%u + s</span></div><div><br></div><div><span style="font-family:monospace">esikoisuus%esikoisuu+te+ni</span></div><div><span style="font-family:monospace">esikoisuus%esikoisuude+sta</span></div><div><br></div><div>Ja joidenkin kohdalla tämä korvausmekanismi ei selvästi oikein edes voi toimia, ellei runkoakin pilko:</div><div><br></div><div><span style="font-family:monospace">Punainenmeri%+punaisella+merellä<br>Punainenmeri%+punaisen+meren</span></div><div><span style="font-family:monospace">isovarvas%+isoon+varpaasee+nsa</span></div><br><div>(Sinänsä minun kannaltani ideaalia olisi pilkkoa nimetkin mahdollisimman pieniin semanttisesti järkeviin osiin, kuten <span style="font-family:monospace">puna+i+nen+meri</span>.)</div><div><br></div><div>Välillä taas haluaisin lisätä morfeemirajoja:<br></div><div><br></div><div><span style="font-family:monospace">aika%aika + inen%ise + mmassa</span></div><div><span style="font-family:monospace">aika%aika + inen%ise + mmille</span></div><div><span style="font-family:monospace">aika%aika + inen%ise + mmista</span></div><div><span style="font-family:monospace">aikomus%aikomu + ksenaa + n</span></div><div><div><span style="font-family:monospace">alustaa%alusta + mise + sta</span></div><div><span style="font-family:monospace">alustaa%aluste + ttakoon</span></div></div><div><span style="font-family:monospace">antaa%annet + taisiin</span></div><div><span style="font-family:monospace">antaa%anta + kaamme</span></div><div><span style="font-family:monospace">havahtua%havahtu + isivat</span></div><div><span style="font-family:monospace">hurja%hurj + immillaa + n</span></div><div><span style="font-family:monospace">juoda%juo + ja% + jillee + n</span></div><div><span style="font-family:monospace">kahdes%kahde + nneksi + kymmenes% + kymmenenneksi + kahdes%kahde + nneksi</span></div><div><br></div>Pitäisi varmaan poistaa +-merkit myös sanan alusta ja lopusta ja tyhjät korvaukset (<span style="font-family:monospace">[X]</span>). Niitä tulee harvoin:<div><br><span style="font-family:monospace">[Ln][Xp]heimo[X]heimo[Sn][Ny][Bh][Bc][Ln][Xp]kunta[X]kunn[Ls]ittain[Xj][X]</span></div><div><span style="font-family:monospace">heimo%heimo+kunta%kunn+ittain+%</span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">kaksi%ka+hdella+toista+%</span></div><div><br></div><div>Lopuksi muutama ehkä bugiksi luokiteltava asia:<br></div><div><br></div><div>- Sanan "takaisin" ainoat jäsennykset Voikossa ovat</div><div>    - taata yks. 1. kond.</div><div>    - takainen mon. keinonto</div><div>    - takainen yks. superlatiivi</div><div><br></div><div>- Sanan "kymmenentuhatta" ainoa Voikon tunnistama perusmuoto on "kymmenentuhka". "kymmenentuhattakolme" ei jäsenny lainkaan. Myöskään "kaksikymmentätuhattakaksi" ei jäsenny, eikä "kymmenentuhattakaksisataa".<br></div><div></div><div><br></div><div>- Minut yllätti, että sanan "lyhin" perusmuoto on "lyhä". Tämä näyttää toisaalta tarkoitukselliselta.</div><div><br></div><div>- Sanan "kokonaiskuva" ainoa jäsennys on koko+nais(nainen)+kuva<br></div><div><br></div><div>- "muka" jäsentyy ainoastaan seikkasanaksi</div><div><br></div><div><div>Tässä vielä jotain sanoja tekstistäni, joita voikkospell ei hyväksy (en osaa sanoa, pitäisikö oikoluvun kannalta):</div><div><br></div><div>aaltoaa, haipua, haipuvat, itkiäisiin, jälkeentulevaa, jälkeisiään, keritsiäiset, keskitsenne, koetteelle, kylläkseen, kylläksenne, kyllälti, kyllänsä, kymmenettuhannet, kypärin, lunnaaksi, luoduistani, luotujaan, makeudu, matavia, määkinä, naitti, naittivat, parisataa, pirskuu, pyhitytte,  röyhkimykset, satakymmenen, sadanpäällikkö, seitsentoistavuotias, senvuotisen, sorti, sortivat, sotaanlähdön, suitsevaa, suitsevan, suitsivat, tuhannenpäälliköt, tuhantesi, tuulispäänä, valittuni, viisaasi.</div><div><br></div><div>-Sami<br></div></div></div>