Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Yhdyssanojen tunnistusta

Jaava [27.04.2013 09:47:13]

#

Päätin kiinnostuksesta opetella käyttämään Visual C++/CLI kieltä tossa MS:n Express 2010 ympäristössä. Joku kiinnostava projekti piti myös kehittää - missä sitä peremmin oppis noita C++/CLI metkuja (C++ on ennestään tuttu).

Projektiksi löysin suomenkielen sanojen tavutuksen. Ja ongelmaa kaventaakseni aluksi vielä perusmuotoisten sanojen.
Netistä löytyy pilvin pimein tavutusohjeita ja kyllä mä niistä olen jo mukavan kokoelman sääntöjä keksinytkin. Suurin ongelma on yhdyssanat, jotka tuppaa tavuttumaan väärin jos sanassa ei tarvita yhdysviivaa/tavuviivaa ennestään (sääntö määrää tavurajan yhdysosien väliin).

Onko olemassa algoritmia joka tunnistaa yhdyssanan yhdysosat?

Jollain foorumilla J. Korpela viittasi edistyneeseen tavutusalgoritmiin jossain tekstinkäsittelyohjelmassa (osasi tavuttaa oikein muutamat yhdyssanat).

Perustuuko edistyksellisyys pelkästään yleisimpien yhdyssanojen yhdysosien listoihin algoritmissa? Vai onko olemassa jokin päättylyketju, jolla voi tunnistaa sanan lopun (tai viimeisen tavun) yhdysosan lopusta?

Jaava

Yucca [27.04.2013 10:15:44]

#

Ensimmäiseksi kannattaa arvioida, tehdäänkö tavutusohjelma vai ohjelma, joka etsii sanasta mahdolliset jakokohdat. Nämä eivät ole sama asia. Esimerksi sanassa ”olion” on kolme tavua (o-li-on), mutta yksikään tavunraja ei ole hyväksyttävä jakokohta: yhtä kirjainta ei eroteta omalle rivilleen, eikä vokaalien välistä jaeta (ellei siinä ole yhdysosien rajaa).

On tietysti mahdollista tehdä ohjelma, joka osaa tehdä molemmat asiat, niin että parametreilla säädellään toimintaa. Perustoiminta on sama, mutta tavuihin jaon jälkeen seuraa mahdollisesti analyysi jakokohtien hyväksyttävyydestä. Tällöin ehkä vokaalien välistä jakaminen voidaan ottaa omaksi parametrikseen, koska se ehkä halutaan joskus sallia pienimpänä pahana.

Yhdyssanojen yhdysosien tunnistaminen edellyttää laajaa leksikaalista aineistoa eli tietoa kielen sanoista ja niiden ominaisuuksista (sikäli kuin se vaikuttaa sanojen yhdistämisen mahdollisuuteen). Täydellisyyttä ei ole mahdollista saavuttaa, koska luonnollinen kieli on avoin järjestelmä: kuka vain voi keksiä uuden sanan (tai lainata toisesta kielestä). Lisäksi pieni osa sanoista jää hyvänkin analyysin jälkeen kaksi- tai jopa useampitulkintaiksi. Esimerkiksi ”tangoilta” voi olla yhdyssana tai yhdistämätön sana (sanan tango, tanko tai tangat muoto). Vasta tekstin syntaktinen ja semanttinen analyysis selvittäisi, mikä tulkinta on oikea – eikä ehkä sekään (lähinnä jos kyseessä on tahallisesti sepitetty sanaleikki.

Voikko-tavuttajaa voinee pitää varsin hyvänä, ks.
http://joukahainen.puimula.org/webvoikko/hyphenate
Täydellinen sekään ei ole. Se pelaa varmaan päälle eli tavuttaa esimerkiksi vain tan-goil-ta (vaikka tämä saattaakin merkitä sitä, että sanan paras jakokohta jää käyttämättä, jos nimittäin kyseessä on yhdyssana).

Pelkällä merkkijonon analysoimisella ei pitkälle pötkitä. Jos kuitenkin haluaa tehdä yksinkertaisen tavuttimen, voi tehdä suomen kielen perustavutuksen (tavunraja on vokaalienvälisen konsonanttijonon viimeisen konsonantin edellä siten rajoitettuna, että yhdistelmää vokaaleja + yksi konsonantti + vokaaleja ei jaeta. Tämä estää suuren määrän hyväksyttäviä tavutuksia ja monien sanojen tavutuksen kokonaan, mutta toisaalta näin vältetään lähes kaikki yhdyssanojen väärät tavutukset tyyliin kansane-dustaja, tekijä-noikeus, ulo-sajo. Tätä voi varioida niin, että vain yhdistelmä vokaaleja + n + vokaaleja jätetään tavuttamatta, sillä se on selvästi tavallisin ongelmatapaus.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta