[voikko] vvfst ja taivutusmuotojen generointi

Harri Pitkänen hatapitk at iki.fi
Thu Jan 24 16:48:03 EET 2013


On Thursday 24 January 2013, Hannu Väisänen wrote:
> Mikäli olen ymmärtänyt oikein, Harri tekee vvfst-morfologiaa
> ohjelmalla, jota voi ajaa molempiin suuntiin. Se voi siis muuttaa
> sanat perusmuotoon, kuten (Suomi-)Malaga, mutta myös generoida
> taivutusmuodot perusmuodoista, jota (Suomi-)Malaga ei osaa tehdä,
> koska Malagaa ei voi ajaa niin sanoakseni takaperin.
> 
> Kysymys kuuluu: voiko tällaisen tehdä vvfst:hen/Voikkoon?

Onnistuu kyllä. Sanojen generoinnin toteutus libvoikkoon on tosin minulla 
suunnitelmissa vasta ehkä ensi vuonna, mutta jo nyt tämä onnistuu Foman 
avulla, jos transduktoria ensin muokkaa tarkoitukseen sopivaksi.

Tein juuri äsken Suomi-malagan koodiin muutoksen, jonka johdosta Joukahaiseen 
tallennetut paikannimien taivutusta koskevat tiedot tulevat nyt mukaan Voikon 
VFST-transduktoriin. Tähän pääsee käsiksi seuraavasti:

- Käännä uusin versio Voikon VFST-morfologiasta komennolla

  $ make vvfst

- Siirry vvfst-hakemistoon ja käynnistä Foma

  $ cd vvfst
  $ foma

- Lue transduktoritiedosto Fomaan komennolla "read att all.att":

  foma[0]: read att all.att
  Reading AT&T file: all.att
  5.4 MB. 319215 states, 354740 arcs, Cyclic.

- Nyt voit katsoa komennolla "apply down joku_sana", mitä tietoja sanasta on
  transduktorissa. Huomaa, että sanat ovat transduktorissa aina pelkästään
  pienillä kirjaimilla:

  foma[1]: apply down rasinojalla
  [Lep][Xp]Rasinoja[X][Xr]ipppp=[X][Ipu]rasinoja[Sade][Ny]lla

  Tiedostossa vvfst/root.lexc on selitetty symbolien merkitykset:
  [Lep]  = paikannimi
  [Ipu]  = paikannimi taipuu ulkopaikallissijoissa
  [Sade] = adessiivi
  [Ny]   = yksikkö
  [Xp]...[X] = sanan perusmuoto
  [Xr]...[X] = sanan rakenneattribuutti Voikkoa varten

- Generointi tapahtuu komennolla "apply up":

 foma[1]: apply up [Lep][Xp]Rasinoja[X][Xr]ipppp=[X][Ipu]rasinoja[Sade][Ny]lla
 rasinojalla

Nyt ongelmaksi muodostuu tietysti se, että Voikon VFST-morfologiassa molemmat 
kerrokset sisältävät sanan pintamuodon, jolloin tätä generointia ei 
mielekkäästi voi tehdä tietämättä jo etukäteen, mitä haluaa lopputulokseksi. 
Eli transduktoria olisi muokattava niin, että attribuuttiesityksestä 
poistetaan tarpeeton/haitallinen informaatio. Tälle esimerkkisanalle 
lopputuloksen pitäisi siis olla jotain tyyliin

  [Lep][Xp]Rasinoja[X][Ipu][Sade][Ny]

Tällainen muunnos on transduktorille mahdollista tehdä käyttämällä Foman 
korvaussääntöjä:

  http://code.google.com/p/foma/wiki/MorphologicalAnalysisTutorial

Harri



More information about the voikko mailing list