Tuota kieliopillista suomea tietokoneella (NLG)

Suomi on suhteellisen hankala kieli tuottaa automaattisesti tietokoneella (NLG). Siinn√§ miss√§ enkun kohdalla sanoja voi vain m√§iski√§ per√§kanaa lauseeseen perusmuodossa, suomi vaatii taivuttelua. Tietokoneen on hallittava kongruenssi- ja rektios√§√§nn√∂t, mik√§ on jokseenkin haastavaa. ūü§∑ūüŹľ‚Äć‚ôāÔłŹ

Onneksi sinun ei tarvitse moisella p√§√§t√§si vaivata! Olen tehnyt suomen tuottamista varten python-kirjaston, syntax makerin. Sit√§ saa k√§ytt√§√§ aivan vapaasti. Oletko valmis vapauttamaan syntax maker -pedon?¬†ūüėäūüėä

Lyö terminaaliin vain loitsu pip install syntaxmaker asentaaksesi sen koneelle. Kirjasto vaatii Omorfin. Lataa Omorfin binääriversiot täältä. Jos asennuksessa tulee ongelmia, kannattaa kurkata ohjeita HFST:n asentamiseen ja syntax makerin wikiä. Jos olet kiinnostunut ainoastaan suomen sanojen taivuttamisesta, kannattaa lukaista ohjeet helppoon Omorfin käyttöön.

Miten sitä käytetään?

Kirjaston toimintalogiikka perustuu lausekkeisiin ja pääsanoihin. Otetaan esimerkiksi lauseen kissa syö ruokaa syntaktinen jäsennys  VP [ NP [ kissa ] syö NP [ ruokaa ] ]. Jokainen pääsana on omaa sanaluokkaansa vastaavan lausekkeen sisällä: syödä on verbilausekkeen (VP) pääsana, kissa nominilausekkeen jne. Lausekkeet on upotettu toisiinsa siten, että verbilauseke jää syntaktisen puun juureksi. Näin syntax makerkin toimii; kaikki lausekkeet pistetään verbilausekkeen alle.

Muodostaaksesi lauseen kissat syövät ruokaa, sinun tulee vain luoda syntaktinen rakenne kuten alla.

a syntactic tree for kissa syödä ruokaa

Tämä saadaan aikaan seuraavalla koodilla:

from syntaxmaker.syntax_maker import *
vp = create_verb_pharse("syödä") #luo uuden Phrase-olion, joka on verbilauseke

subject = create_phrase("NP", "kissa", {u"NUM": "PL"}) #luo nominilausekkeen, jonka valinnaisena argumenttina on luku
vp.components["subject"] = subject #tämä asettaa nominilausekkeen verbilausekkeen subjektiksi

dir_object = create_phrase("NP", "ruoka")
vp.components["dir_object"] = dir_object

print vp
#tuloste: kissat syövät ruokaa

Kirjasto tukee myös monimutkaisempia lauseita kuten jopa relatiivilauseita. Muutama asia on kuitenkin selvitettävä ennen kuin kirjastoa osaa täysin käyttää. Ensiksi, kun luot uuden lausekkeen, voit halutessasi antaa parametrina sanakirjarakenteen, joka määrittää morfologiaa. Mahdollisia arvoja ovat:

Jokaisen Phrase-olion rakenteeseen kuuluvat seuraavat muuttujat: components (alisteiset lausekkeet), order (lausekkeiden järjestys tulostettaessa), head (pääsana) ja agreement (kongruenssi). Kaikki mahdolliset lauseketyypit ja niiden rakenteet on listattu grammar.json:issa. Jos haluat lisätä uuden alisteisen lausekkeen johonkin toiseen lausekkeeseen, lisää se vain uudella nimellä componentsiin ja lisää sama nimi order-listaan.

Jatketaan edellistä koodiesimerkkiä lisäämällä adpositiolauseke:

np = create_phrase("NP", "käsi", {u"NUM": "PL"})
pp = create_adposition_phrase("ilman", np) #tämä lause on ilman käsiä

vp.components["adposition"] = pp #lisätään pp vp:hen
vp.order.append("adposition") #lisätään sen nimi myös order-listaan, jotta lauseke tulostuu
print vp
#tuloste: kissat syövät ruokaa ilman käsiä

Order-listan sisällön voi jopa halutessaan sekottaa mielivaltaisesti:

from random import shuffle
shuffle(vp.order)
print vp
#output ilman käsiä ruokaa syövät kissat

Huom. Tämä sekoittaa vain lausekkeiden järjestyksen. Ei siis sanojen. Siksi ilman käsiä esiintyy aina oikeassa järjestyksessä.

Lisää neuvoja

Syntax maker wikissä on lisää tietoa kirjaston käytöstä tai siten voit olla minuun yhteydessä.

Lopuksi

Minulla on ollut jo pitk√§√§n tarkoitus kirjoittaa tutoriaali kirjaston k√§yt√∂st√§. Olen pist√§nyt jonkin verran omaa aikaani kirjaston kehitt√§miseen, joten olisi kiva, jos sit√§ my√∂s k√§ytett√§isiin. ūüėä