From dc19b6a88ae963d6972c352969d5ff9419718336 Mon Sep 17 00:00:00 2001 From: aarneranta Date: Wed, 12 Oct 2022 12:30:24 +0200 Subject: [PATCH] testing Hrv smart paradigms against Wiktionary --- src/croatian/ParadigmsHrv.gf | 14 +++++++++++ src/croatian/ResHrv.gf | 1 + src/croatian/wiktionary/MorphoDictHrv.gf | 22 ++++++++++++++--- src/croatian/wiktionary/smart-results.txt | 30 +++++++++++++++++++++++ src/croatian/wiktionary/test-smart.gfs | 9 +++++++ 5 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 src/croatian/wiktionary/smart-results.txt create mode 100644 src/croatian/wiktionary/test-smart.gfs diff --git a/src/croatian/ParadigmsHrv.gf b/src/croatian/ParadigmsHrv.gf index 933b3132f..ddafcb1fb 100644 --- a/src/croatian/ParadigmsHrv.gf +++ b/src/croatian/ParadigmsHrv.gf @@ -100,6 +100,8 @@ oper zenaNForms : Str -> NForms = zenaN ; + PNForms : Type = {snom, sgen, sdat, sacc, svoc, sins : Str} ; + mkPN = overload { mkPN : Str -> PN = \s -> @@ -110,6 +112,18 @@ oper s = \\c => n.s ! Sg ! c ; ---- TODO check this g = nf.g } ; + mkPN : PNForms -> Gender -> PN + = \fs, g -> lin PN { + s = table { + Nom => fs.snom ; + Gen => fs.sgen ; + Dat | Loc => fs.sdat ; + Acc => fs.sacc ; + Voc => fs.svoc ; + Ins => fs.sins + } ; + g = g + } ; } ; --------------------- diff --git a/src/croatian/ResHrv.gf b/src/croatian/ResHrv.gf index af0f4f98a..88d6b1cc9 100644 --- a/src/croatian/ResHrv.gf +++ b/src/croatian/ResHrv.gf @@ -427,6 +427,7 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> { cit + "ati" => aeiVerbForms s (cit + "am") (cit + "ao") ; vid + "jeti" => aeiVerbForms s (vid + "im") (vid + "io") ; radi + "ti" => aeiVerbForms s (init radi + "em") (radi + "o") ; + radi + ? => aeiVerbForms s (init radi + "em") (radi + "o") ; ---- _ => Predef.error ("expect infinitive form \"-ti\", found" ++ s) } ; diff --git a/src/croatian/wiktionary/MorphoDictHrv.gf b/src/croatian/wiktionary/MorphoDictHrv.gf index 9a703b779..2a537741e 100644 --- a/src/croatian/wiktionary/MorphoDictHrv.gf +++ b/src/croatian/wiktionary/MorphoDictHrv.gf @@ -1,5 +1,5 @@ concrete MorphoDictHrv of MorphoDictHrvAbs = CatHrv ** - open (P=ParadigmsHrv), (R=ResHrv) + open (P=ParadigmsHrv), (R=ResHrv), ResHrv in { oper @@ -13,7 +13,7 @@ oper gender : R.Gender ; snom, sgen, sdat, sacc, svoc, sins : Str } -> PN - = \nfg -> P.mkPN nfg.snom ; ---- + = \nfg -> P.mkPN nfg.gender ; mkA : { msnom, fsnom, nsnom, msgen, @@ -29,7 +29,23 @@ oper ppart_masc_sg, ppart_fem_sg, ppart_neutr_sg, ppart_masc_pl, ppart_fem_pl, ppart_neutr_pl : Str } -> V - = \vfs -> P.mkV vfs.infin vfs.pres_sg_1 vfs.ppart_masc_sg ; ---- + = \vfs -> + let forms : VerbForms = table { + VInf => vfs.infin ; + VPres Sg P1 => vfs.pres_sg_1 ; + VPres Sg P2 => vfs.pres_sg_2 ; + VPres Sg P3 => vfs.pres_sg_3 ; + VPres Pl P1 => vfs.pres_pl_1 ; + VPres Pl P2 => vfs.pres_pl_2 ; + VPres Pl P3 => vfs.pres_pl_3 ; + VPastPart (Masc _) Sg => vfs.ppart_masc_sg ; + VPastPart (Masc _) Pl => vfs.ppart_masc_pl ; + VPastPart Fem Sg => vfs.ppart_fem_sg ; + VPastPart Fem Pl => vfs.ppart_fem_pl ; + VPastPart Neutr Sg => vfs.ppart_neutr_sg ; + VPastPart Neutr Pl => vfs.ppart_neutr_pl + } + in P.mkV forms ; lin 'Ćaba_13871_PN' = mkPN {gender = P.feminine ; snom = "Ćaba" ; sgen = "Ćabe" ; sdat = "Ćabi" ; sacc = "Ćabu" ; svoc = "Ćabo" ; sins = "Ćabom"} ; lin 'ćaknut_44346_A' = mkA {msnom = "ćaknut" ; fsnom = "ćaknuta" ; nsnom = "ćaknuto" ; msgen = "ćaknuta" ; fsgen = "ćaknute" ; msdat = "ćaknutu" ; fsdat = "ćaknutoj" ; fsacc = "ćaknutu" ; msins = "ćaknutim" ; fsins = "ćaknutom" ; mpnom = "ćaknuti" ; mpgen = "ćaknutih" ; cmsnom = "ćaknutiji"} ; diff --git a/src/croatian/wiktionary/smart-results.txt b/src/croatian/wiktionary/smart-results.txt new file mode 100644 index 000000000..73873efc3 --- /dev/null +++ b/src/croatian/wiktionary/smart-results.txt @@ -0,0 +1,30 @@ +gf -run MorphoDictHrv.gf