"tn": "5" # Taivutusnumero merkkijonona, valinnainen; kaikki yli taivutusluokan 51 hylätään (ei nomineja)
"tn": "5", # Taivutusnumero merkkijonona, valinnainen; kaikki yli taivutusluokan 51 hylätään (ei nomineja)
"av": "-" # Astevaihteluluokka tai viiva, valinnainen
"av": "-", # Astevaihteluluokka tai viiva, valinnainen
}
}
```
```
...
@@ -20,9 +20,11 @@ class Arvain():
...
@@ -20,9 +20,11 @@ class Arvain():
```python
```python
syöte_nimet["Päivyt"] = {
syöte_nimet["Päivyt"] = {
"tn": "43" # Taivutusnumero merkkijonona, pakollinen; kaikki yli taivutusluokan 51 hylätään (ei nomineja)
"tn": "43", # Taivutusnumero merkkijonona, pakollinen; kaikki yli taivutusluokan 51 hylätään (ei nomineja)
"av": "-" # Astevaihteluluokka tai viiva, pakollinen
"av": "-", # Astevaihteluluokka tai viiva, pakollinen
}```
"sointu": "ETU" # Vokaalisointuluokka merkkijonona, joko "ETU" tai "TAKA", pakollinen
}
```
"""
"""
self.sanat={}
self.sanat={}
...
@@ -79,7 +81,7 @@ class Arvain():
...
@@ -79,7 +81,7 @@ class Arvain():
"""
"""
Arvaa sanan taivutusluokan. Hyväksyy joukon käytöstä hieman muokkaavia nimettyjä parametreja.
Arvaa sanan taivutusluokan. Hyväksyy joukon käytöstä hieman muokkaavia nimettyjä parametreja.
* `tilastollisesti` (totuusarvo, oletusarvoisesti tosi): Jos tosi, katsotaan kaikki sellaiset sanat, joilla on yhtä pitkä yhteinen suffiksi haettavan kanssa kuin sanalla, jolla on pisin yhteinen suffiksi haettavan kanssa. Näillä sanoilla esiintyvistä taivutusmuodoista valitaan todennäköisin. Esimerkiksi jos haettava sana on teeri (26) ja löydetään sanat ukkoteeri (26), sihteeri (6) ja valtiosihteeri (6), niin tilastollinen haku valitsee yleisimmän taivutusluokan (26, esiintyy kahdesti). Jos `tilastollisesti` on epätosi, valitaan ennustamattomasti (vaikkei välttämättä umpimähkään) jokin sanoista, esimerkiksi sihteeri (6) ja palautetaan sen taivutusluokka. Jos löydetään suora osuma (eli sanakirjassa olisi teeri (6)), valitaan sen mukainen taivutusluokka riippumatta siitä, minkä arvon `tilastollisesti` saa.
* `tilastollisesti` (totuusarvo, oletusarvoisesti tosi): Jos tosi, katsotaan kaikki sellaiset sanat, joilla on yhtä pitkä yhteinen suffiksi haettavan kanssa kuin sanalla, jolla on pisin yhteinen suffiksi haettavan kanssa. Näillä sanoilla esiintyvistä taivutusmuodoista valitaan todennäköisin. Esimerkiksi jos haettava sana on teeri (26) ja löydetään sanat ukkoteeri (26), sihteeri (6) ja valtiosihteeri (6), niin tilastollinen haku valitsee yleisimmän taivutusluokan (26, esiintyy kahdesti). Jos `tilastollisesti` on epätosi, valitaan ennustamattomasti (vaikkei välttämättä umpimähkään) jokin sanoista, esimerkiksi sihteeri (6) ja palautetaan sen taivutusluokka. Jos löydetään lupaava osuma (eli sanakirjassa olisi teeri (6) tai jos haettaessa sanaa ilmapallo (1) löydetään sen suffiksi pallo (1)), valitaan sen mukainen taivutusluokka riippumatta siitä, minkä arvon `tilastollisesti` saa.
* `nimi` (totuusarvo, oletusarvoisesti tosi): Jos tosi, tarkistetaan ensin nimihakurakenne suoran osuman varalta. Jos epätosi, ei tarkasteta nimihakurakennetta. Tämä on hyödyllistä esimerkiksi luontonimien tapauksessa, jossa voidaan haluta erisnimimäinen (Meri - Merin) tai yleissanamainen (Meri - Meren) taivutus.
* `nimi` (totuusarvo, oletusarvoisesti tosi): Jos tosi, tarkistetaan ensin nimihakurakenne suoran osuman varalta. Jos epätosi, ei tarkasteta nimihakurakennetta. Tämä on hyödyllistä esimerkiksi luontonimien tapauksessa, jossa voidaan haluta erisnimimäinen (Meri - Merin) tai yleissanamainen (Meri - Meren) taivutus.
Päättelee vokaalisointuluokan sanalle sillä oletuksella, ettei se ole yhdyssana. Tieto on tarpeen, jos sijapäätteeseen tulee a tai ä: talossa / esimerkissä.
lowered=sana.lower()
Tämän se tekee etsimällä sanan viimeisen etu- (äöy) ja takavokaalin (aouå). Jos sanasta löytyy takavokaali viimeisimmän etuvokaalin jälkeen (tai löytyy ylipäänsä, sikäli kuin etuvokaaleja ei ole), on sana takavokaalinen (talossa).
foriinrange(len(sana))[::-1]:
Muussa tapauksessa sana on etuvokaalinen (esimerkissä).
iflast_front==-1andlowered[i]in"äöy":
"""
last_front=i
eliflast_back==-1andlowered[i]in"aouå":
viimeinen_etu=-1
last_back=i
viimeinen_taka=-1
eliflast_middle==-1andlowered[i]in"ie":
pienellä=sana.lower()
last_middle=i
foriinrange(len(sana)):
iflast_back>last_front:
ifpienellä[i]in"äöy":
viimeinen_etu=i
elifpienellä[i]in"aouå":
viimeinen_taka=i
ifviimeinen_taka>viimeinen_etu:
return"TAKA"
return"TAKA"
else:
else:
return"ETU"
return"ETU"
defarvaa_sointuluokka(self,sana,**kwargs):
defarvaa_sointuluokka(self,sana,**kwargs):
kwargs={"hiljaa":True}|kwargs
"""
Päättelee vokaalisointuluokan sanalle yleisessä tapauksessa. Hyväksyy joukon metodin käytöstä muokkaavia nimettyjä parametreja.
* `hiljaa` (totuusarvo, oletusarvoisesti tosi): jos epätosi, tulostaa virheenkorjausviestejä siitä, miten tehtyyn arvaukseen päädyttiin.
* `nimi` (totuusarvo, oletusarvoisesti tosi): tarkistaa aluksi nimisanakirjan suoran tai yhdyssanaosuman varalta. Esimerkiksi moni englantilaisperäinen y-kirjaimeen päättyvä nimi ääntyy i-äänteeseen päättyvänä ja seuraakin takavokaalista vokaalisointua.
Nimisanakirjan tarkistamisen (tai tarkistamatta jättämisen) jälkeen etsitään mahdollista suffiksisanaa: jos haetaan sanaa maantie (etuvokaalisointu), on hyödyllistä havaita sen olevan yhdyssana, joka loppuu sanaan tie (etuvokaalisointu). Jos kyseessä ei olisi yhdyssana, sen alkuosassa oleva pitkä a-äänne tekisi siitä takavokaalisen, siis maantie - maantieta eikä maantietä. Viimeiseksi päätellylle komponentille (joka saattaa olla koko sana, mikäli kyseessä ei ole yhdyssana) arvataan sitten sointuluokka metodilla `sointuluokka_yksinkertaiselle`.
"""
kwargs={"hiljaa":True,"nimi":True}|kwargs
# Jos ei erikseen kielletty nimeä, katsotaan nimiosumat
# Jos ei erikseen kielletty nimeä, katsotaan nimiosumat