Yliluokka - abstrakti luokka -luokka
HyphenationRule ← FinnishHyphenationRule ← ConsonantRule
Palautetun luokan toimivuus. (yht 100p)
Testikattavus 50 pistettä. Oma testi vs. oma koodi. Testimetodien määrää ei enää lasketa.bonus: +5 % aikaisesta palautuksesta (kts. kurssiaikataulu)
Tehtävässä kirjoitetaan ohjelma, joka tavuttaa suomenkielistä tekstiä käyttäen perintää. Huomaa kuinka helppo koodiin olisi lisätä uusia tavutussääntöjä.
Suomen kielen tavutus on suhteellisen yksinkertaista. Pääosa sanoista voidaan tavuttaa käyttäen vain kolmea perussääntöä.
Tässä tehtävässä kehitämme lisää toiminnallisuutta luokalle RuleBasedHyphenator
,
joka tavuttaa annettua tekstiä kulloisenkin säännöstön perusteella.
Säännöstöön on mahdollista vaikuttaa kirjoittamalla uusia
tavutussääntöluokkia jotka täyttävät rajapinnan HyphenationRule
. Näitä yksinkertaisia luokkia toteutetaan 3 kpl.
HyphenationRule
on yliluokka jonka toteutuksesta puuttuu vain yksi metodinext_hyphen(word, previous_hyphen_at)
Tämä metodi palauttaa annetulle sanalle
word
seuraavan tavutuskohdan lähtien liikkeelle paikastaprevious_hyphen_at
, joka on tyypillisesti edellinen löydetty tavutuskohta. Jos sääntöä ei voida soveltaa tästä kohdasta lähtien, metodi ilmaisee tämän palauttamalla virhekoodin :HyphenationRule.NOT_APPLICABLE
. Esim sanassa "kiusaus" konsonanttisääntöä ei voida soveltaa indeksistä 3 lähtien sillä seuraavan vokaalin "a" jälkeen tulevia konsonantteja ei enää seuraa yksikään vokaali.
FinnishHyphenationRule
on abstrakti luokka joka
jättää HyphenationRule-yliluokasta täyttämättä vaaditun metodin
next_hyphen, mutta lisää aliluokilleen joukon käteviä apumetodeja.
Näissä luokissa toteutetaan FinnishHyphenationRulesta puuttuva metodi sännöstä riippuen eri tavoin. Käytä toteuttaessa mahdollisuuksien mukaan yliluokan apumetodeja.
RuleBasedHyphenator yrittää soveltaa tavutussääntöjä tietyssä prioriteettijärjestyksessä, kunnes se löytää säännön jota voidaan soveltaa. Jokainen säännön löytämä tavutuskohta lisätään metodin palauttamaan listaolioon kokonaislukuna.
Tavutussääntöluokkiesi metodi next_hyphen saa tehtävän testeissä aina yksittäisen SUURILLA KIRJAIMILLA kirjoitetun sanan tarkistettavaksi, joten välilyönneistä ei tarvitse välittää.
Jos haluat jatkokehittää luokkaa vaikka projektiisi, niin lisää välilyöntien, välimerkkien ja väliviivojen käsittelylle omia sääntöjä, niin voit tavuttaa ohjelmasi tulostaman tekstin sopivaksi vaihtelevan kokoisille ikkunoille.
Suomen kielen tavuttaminen seuraa melko suoraviivaisesti seuraavia sääntöjä:
Esimerkkejä:
lef-fas-sa ki-vaa kah-del-le:Toteutetaan luokkaan ConsonantRule
tra-giik-kaa se-kä hork-ka-ti-lo-ja
greip-pi
on
Kaikki ylläolevan esimerkin tavuviivat tulivat konsonanttisäännöltä kun sääntöä sovellettiin sanan alkuun tai jonkin tavuviivan jälkeiseen paikkaan. Esim. sanan "on" tapauksessa kohdasta 0 löytyy tavuunn kuuluvia vokaaleja (o) ja näitä seuraava konsonantti (n), mutta koska näitä seuraavia vokaaleja ei enää löydy, on tulos HyphenationRule.NOT_APPLICABLE.
Esimerkkejä:
lu-en+to Aa+si-an kää+pi-ö+puo+lu-eis+ta
Mm. esimerkin sana Aasian demonstroi kuinka vokaalisääntö ei laita tavuviivaa paikasta 0 (kirjain A) lähdettäessä ensimmäisen vokaalin ja sitä seuraavan vokaalin väliin → NOT_APPLICABLE.
Kohdasta 2 (kirjain s) lähdettäessä löydetyt vokaalit i, a taas eivät ole samoja, eivät muodosta diftongia ja niistä jälkimmäinen ei ole i, joten palautetaan tavutuskohta, 4.
Toteutetaan luokkaan VowelRule
*) HUOM! Älä etsi seuraavaa vokaalia johon sääntöä soveltaa jos sääntöä ei voi soveltaa tavun ensimmäiseen vokaaliin. Kaikkia tehtävässä listattuja sääntöjä tulee soveltaa kulloinkin käsiteltävään tavuun.Esimerkkejä:
raa-is+tu+nut maa-il+ma, liu-ot+ti+met lau-an+tai+na tau-ot+ta leu-an al+laToteutetaan luokkaan DiphthongRule *) HUOM! Älä etsi seuraavaa vokaalia johon sääntöä soveltaa jos sääntöä ei voi soveltaa tavun ensimmäiseen vokaaliin. Kaikkia tehtävässä listattuja sääntöjä tulee soveltaa kulloinkin käsiteltävään tavuun.
VINKKI! Luokassa FinnishHyphenationRule on joukko apumetodeja joita kannattanee käyttää.
VINKKI! Huomaa että kaikki säännöt alkoivat ilmaisulla "tavun ensimmäistä vokaalia" tai "tavun vokaaleja". Lienee hyvä aluksi etsiä ensimmäinen vokaali.
VINKKI! Onko vaikea keksiä hyviä testisanoja? Testisanojen ei tarvitse olla suomea, jotta niillä voi testata. esim: "zxzxeuook" tai "eäio".
Tässä tehtävässä on siinä määrin paljon koodia, että tehtäväpohjan voi ladata valmiina zip-pakattuna Eclipse-projektina tai yksittäisinä tiedostoina.
Päivitetty 26.1.2012 13.25
File->Import->Existing projects into workspace->Archive fileEtsi sitten tämä paketti ja paina Finish.
Sääntöpohjainen tavuttaja Ei palauteta
Tavutussääntöjen toiminnan määrittelevä rajapinta Ei palauteta
Suomenkielisten tavutussääntöjen abstrakti yliluokka Ei palauteta
Konsonanttisäännön toteutus Palautetaan
Vokaalisäännön toteutus Palautetaan
Diftongisäännön toteutus Palautetaan
Tavutusluokkien testien pohja Palautetaan
Palauta toteuttamiesi luokkien lähdekoodi sekä testiluokka Test tiedostossa test.py
Voit olettaa että tehtävänannon luokat, joita ei pyydetä palauttamaan löytyvät valmiina.
Jos haluat, voit kokeilla tavutusta kokonaisille sanoille asentamalla valmiit sääntösi RuleBasedHyphenator-olion säännöstöön. Huomaa että ConsonantRule täytyy asentaa viimeiseksi jotta tavutus toimisi oikein mikäli toteutat sen täysin tehtävänannon mukaisesti.
hyp = RuleBasedHyphenator() hyp.add_rule(VowelRule()) hyp.add_rule(DiphthongRule()) hyp.add_rule(ConsonantRule()) print hyp.hyphenate("RIUUISSA")) suorituksen tulos : [0, 3, 6, 8]