Filosoft / vabamorf

Eesti keele morfanalüsaator
Other
24 stars 14 forks source link

Document better the cases when multiple results are generated for the same root/pos/form combination #8

Closed Kaljurand closed 10 years ago

Kaljurand commented 10 years ago

What causes confusion in particular, is that generating the sg n form for the -nud and -tud adjectives and for the adjectives 'kiivas', 'täis' and 'valmis' results in 2 MorphInfos that differ only in the form-field not being set in one of the cases.

For example, the output

kiivas---A-
kiivas---A-sg n

is produced by the program:

import ee.filosoft.vabamorf.Linguistic;
import ee.filosoft.vabamorf.Linguistic.MorphInfo;

class Adj {

    public static void main(String[] args) {

        Linguistic linguistic = new Linguistic();
        //linguistic.guess = true;

        boolean success = linguistic.open("et.dct");

        MorphInfo mi = new MorphInfo();
        //mi.root = "aegunud";
        //mi.root = "lauldud";
        mi.root = "kiivas";
        //mi.root = "täis";
        //mi.root = "valmis";
        mi.ending = "";
        mi.clitic = "";
        mi.pos = 'A';
        mi.form = "sg n";

        MorphInfo []synths = linguistic.synthesize(mi, "");
        for (int k = 0; k < synths.length; k++) {
            System.out.println(synths[k].root + "-" + synths[k].ending + "-" + synths[k].clitic + "-" + synths[k].pos + "-" + synths[k].form);
        }

        linguistic.close();
    }
}
merisiga commented 10 years ago

Hmm, selline see eesti morfoloogia ja süntaks juba on. On olemas käändumatud omadussõnad ja käänduvad omadussõnad. Kõik –nud ja –tud vormid on sellised, et kui nad on omadussõnana nimisõna ees, siis on nad käändumatud (mahakukkunud õun, mahakukkunud õunu), aga kui nad on nimisõna taga, siis nad käänduvad (õunu, mahakukkunuid ja maitsvaid). Morf ei tea, kas sõna on ees või taga ja pakub alati kaks võimalust. Kiivas, täis ja valmis on lihtsalt sellised sõnad, et neid saab kasutada nii käändumatuna kui käänduvana. Nt. kiivas ÕS 2013 järgi: käändumatuna tähendab ta viltu, kõveras; käänduvana viltune, armukade.

Vt. Eesti keele käsiraamat, Omadussõnaline täiend: http://www.eki.ee/books/ekk09/index.php?p=5&p1=3&id=452

Kas peaks selliseid lingvistilisi taustateadmisi programmi dokumentatsiooni lisama?

Kaljurand commented 10 years ago

Dokumentatsiooni all pean ma silmas MorphInfo klassi kirjeldust stiilis:

Kui MorphInfo ei vasta nendele tingimustele, siis tagastab synthesize veateate.

Praegu on imelik olukord, kus synthesize genereerib MorphInfo, kus form on tühi string. Samuti võib jääda kasutajale ebaselgeks, et miks tegeleb vabamorf süntaktiliste mõistetega nagu "nimisõna taga" ja miks pole käändumatud omadussõnad omaette sõnaliik.

merisiga commented 10 years ago

klassi kirjelduse kohta ma praegu ei ütle midagi, aga tausta kohta küll:

mulle tundub, et sa ootad süntekalt sellist käitumist, mis tegelikult poleks mõistlik, nimelt et sa tahad väga rangelt valitseda selliste kategooriate üle, mille kasutus sõnastikes ja teoorias pole nii range. ma ise komistasin ranguse puuduse otsa siis, kui sünteesisin tesauruses sünonüümide vorme. nimelt on võimalik, et käänduval sõnal on sünonüüm, mis ei käändu, või teisiti öeldes, mille kõik käändevormid on ühesugused. kui sa ütled, et pane see käändumatu sõna samasse käändesse kui tema sünonüüm, siis milline oleks õige käitumine? mina tegin nii, et väljastatakse see käändumatu sõna, aga käändetunnust talle muidugi ei saa anda. ja teisalt, kui ütled, et pane käänduv sõna samasse käändesse mis on käändumatul, siis minu meeelst õige on panna ta sg n.

vabamorf justnimelt ei tegele mõistega "nimisõna taga", sellepärast ta pakubki mitu varianti; mõni hilisem programm saab siis õige valida, kui tahab

käändumatud omadussõnad pole omaette sõnaliik sellepärast, et Ülle Viksil (ja ÕSis jm) pole ta omaette sõnaliik; ma miskipärast usun, et sellist traditsiooni maksab järgida

18-09-2014 21:58 kirjutas Kaarel Kaljurand:

Dokumentatsiooni all pean ma silmas MorphInfo klassi kirjeldust stiilis:

  • root: mittetühi string
  • ending: string (võib olla tühi), ei kasutata (?) synthesize funktsioonis
  • clitic: string hulgast {gi, ...}, aga võib olla ka tühi
  • pos: sümbol hulgast {A, S, V, ...}
  • form: string hulgast {sg n, sg g, ...}, kusjuures ei tohi olla tühi string, ning on lisaks kompatiibel pos sümboliga, nagu kirjeldatud failis doc/tagset.html

Kui MorphInfo ei vasta nendele tingimustele, siis tagastab synthesize veateate.

Praegu on imelik olukord, kus synthesize genereerib MorphInfo, kus form on tühi string. Samuti võib jääda kasutajale ebaselgeks, et miks tegeleb vabamorf süntaktiliste mõistetega nagu "nimisõna taga" ja miks pole käändumatud omadussõnad omaette sõnaliik.

Reply to this email directly or view it on GitHub [1].

Links:

[1] https://github.com/Filosoft/vabamorf/issues/8#issuecomment-56085860

Kaljurand commented 10 years ago

OK. Mulle sobib praegune käitumine vist ka, sest on olemas viis kuidas API kaudu neid erinevaid omadussõnu eristada. Aga mulle tundub ikkagi, et see pole piisavalt dokumenteeritud.

Kaljurand commented 10 years ago

Veel mõned asjad, mis minu meelest sünteesi juures dokumenteerimist vajaksid.

Nt root-vormi "KOERAD" puhul tuleb sg g vormiks "koera", just nagu rakendataks sisendile hulka eeltöötlust (tähtede väikseks tegemist ja morf. analüüsi leidmaks mingit teist algvormi, mida siis sünteesi sisendina kasutada). Minu meelest sellist eeltöötlust tegema ei peaks ning tulemus võiks siin olla "KOERADi".

merisiga commented 10 years ago

Vastan siin praegu nii hästi kui oskan. Mida sellest kuskile dokumentatsiooni kirjutada, ei oskagi praegu öelda. Et morf sünteesi käitumist ja loogikat paremini mõista, tuleks arvestada, milleks teda kasutatakse, ja nimelt: mingis muus sõnastikus või loendis oleva sõna või väljendi vormide moodustamiseks. Üldiselt eeldab süntesaator, et sisendiks on lemma e. algvorm, aga tegelikkuses võivad erinevad sõnastikud märksõnaks pidada erinevaid morfoloogilisi vorme. Kõige tüüpilisem on, et märksõnaks on mitmuse nimetavaline kuju, nt. roomajad, lipiidid, aimaraad; ka võivad ainuse nimetav ja mitmuse nimetav olla esindatud samas sünohulgas, nt. armee, relvajõud. Ja leidub ju sõnu, millel ongi ainult mitmuse vormid, nt. kihlad. Süntesaator püüab käituda võimalikult mõistlikult, s.t. ei ole liiga range sisendi osas.

Seega, kuna reaalses elus käsitletakse algvormi alati mitte rangelt morfoloogiliselt seisukohalt, siis süntesaatori esimene samm on analüüsida sisendit, et kindlaks teha, millist vormi antud juhul algvormiks peetakse: sg n, ma (verbi puhul), sg g (nt. teineteise) või pl n. Seejuures tuleb liitsõna sünteesida viimase komponendi järgi, s.t. tuleb analüüsil leida see viimane, muutuv komponent. Suurtähelisus on asi, mida reaalselt kasutatakse üsna vabalt, nt. firmanimi võib olla tavakeele sõna, aga suure tähega (nt. Ülikool). Seetõttu süntesaator teisendab algse sõna ka väiketäheliseks ja proovib ka selle vorme sünteesida. Süntesaator ei püüa genetavates vormides sõna algset suurtähelisust kuidagi säilitada, v.a. juhul, kui see sõna ongi pärisnimi, nt Jüri. Põhjenduseks see, et tegemist on morfoloogia, mitte metagraafiaga. Lühenditele ja akronüümidele käändelõppude lisamist pole süntekas üldse olemas, see on ka analüüsis omaette ad hoc moodul. Üks viis, kuidas süntesaatorit üle kavaldada, on muuta sõna talle kindlasti tundmatuks ja pärast tagasi teisendada, nt. lisades sõna ette X (ja see pärast ära kustutada): XKOERAD sg g on Xkoeradi

Kaljurand commented 10 years ago

Suur tänu, pilt sai selgemaks! Minu meelest see jutt võikski dokumentatsioonis olla.

Äkki oleks hea teha kaks synthesize-funktsiooni: üks ei kasuta üldse analüüsi ega liitsõnatükeldamist (st eeldab, et funktsiooni väljakutsuja on selle ise ära teinud), ning teine on selline "convenience function", mis sooritab kõigepealt need ülal kirjeldatud analüüsi etapid. See esimene oleks siis lihtsama definitsiooniga (ning ka kiirem). Kui kasutaja teab, et sõna on sõnastikus, siis ta kasutab esimest funktsiooni. Ning kui teab, et sõna seal pole, siis kasutab teist, võib teeb omal käel enne vajaliku analüüsi ära ja kasutab siis esimest. (Ma saan aru, et mõned liitsõnad on juba sõnastikus, mistõttu ei genereerita neile "valesid" vorme, nt kuupalk -> kuupalga; emapalk -> emapalga/emapalgi.)

kristiank commented 10 years ago

Mina arvan samuti, et selliste funktsioonide üle võiks olla rangem kontroll -- juhul kui kasutaja tahab automaagilist käitumist, siis kasutab üht aga juhul kui ei taha, siis ei pea kasutama. Käitumise vahetamine võib muidugi käia ka funktsioonide parameetride kaudu.