From 4eb210da056afb70581341a6e64379b397c9e9c6 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 28 Apr 2020 12:32:10 +0200 Subject: [PATCH] (Hun) Add 9-argument worst case noun constructor --- src/hungarian/LexiconHun.gf | 12 ++++++++---- src/hungarian/NounMorphoHun.gf | 33 ++++++++++++++++++++++++++++----- src/hungarian/ParadigmsHun.gf | 3 +++ 3 files changed, 39 insertions(+), 9 deletions(-) diff --git a/src/hungarian/LexiconHun.gf b/src/hungarian/LexiconHun.gf index 372161f7..fb18af66 100644 --- a/src/hungarian/LexiconHun.gf +++ b/src/hungarian/LexiconHun.gf @@ -41,7 +41,7 @@ lin boat_N = mkN "hajó" "hajót" "hajók" "hajója" ; -- lin bone_N = mkN "" ; -- lin boot_N = mkN "" ; -- lin boss_N = mkN "" ; -lin book_N = mkN "könyv" harmE ; -- TODO Sg Sup könyvön, Sg All könyvhöz, all others in HarmE +lin book_N = mkN "könyv" "könyvet" ; lin boy_N = mkN "fiú" ; lin bread_N = mkN "kenyér" "kenyeret"; lin break_V2 = mkV2 "szünet" ; @@ -132,7 +132,9 @@ lin floor_N = mkN "padló" "padlót" ; -- lin flow_V = mkV "" ; lin flower_N = mkN "virág" "virágot" "virágok" "virága" ; lin fly_V = mkV "repül" ; -lin fog_N = mkN "köd" "ködöt"; -- TODO ködöket +lin fog_N = mkN "köd" "ködöt" "ködön" "ködhöz" + "ködök" "ködöket" + "köde" "ködünk" "ködei" ; lin foot_N = leg_N ; --same as leg, to specify "lábfej" lin forest_N = mkN "erdő" "erdőt" ; -- lin forget_V2 = mkV2 "" ; @@ -318,7 +320,9 @@ lin shirt_N = mkN "ing" "inget"; --shirt like t-shirt or the more formal? lin shoe_N = mkN "cipő" "cipőt" ; lin shop_N = mkN "üzlet" "üzletet"; lin short_A = mkA "rövid" ; --in short text, if human length then "alacsony" -lin silver_N = mkN "ezüst" "ezüstet"; -- TODO fix: ezüstöket +lin silver_N = mkN "ezüst" "ezüstöt" "ezüstön" "ezüsthöz" + "ezüstök" "ezüstöket" + "ezüstje" "ezüstünk" "ezüstjei" ; -- lin sing_V = mkV "" ; -- lin sister_N = mkN "" ; -- lin sit_V = mkV "" ; @@ -332,7 +336,7 @@ lin smooth_A = mkA "sima" ; lin snake_N = mkN "kígyó" "kígyót" ; lin snow_N = mkN "hó" "havat" ; lin sock_N = mkN "zokni" "zoknit"; -lin song_N = mkN "dal" "dalat"; -- TODO fix: dalokat +lin song_N = mkN "dal" "dalt" ; -- lin speak_V2 = mkV2 "" ; -- lin spit_V = mkV "" ; -- lin split_V2 = mkV2 "" ; diff --git a/src/hungarian/NounMorphoHun.gf b/src/hungarian/NounMorphoHun.gf index d8ce9934..ec83c239 100644 --- a/src/hungarian/NounMorphoHun.gf +++ b/src/hungarian/NounMorphoHun.gf @@ -172,7 +172,8 @@ oper -- NB. plafon, papír with dPlafon False => case tolla of { -- hegy, hegy|et -> hegy|e - _ + ("ty"|"gy"|"ny"|"j"|"ly"|"m"|"h") + ("e"|"a"|"ö"|"o") => init tolla ; + _ + ("ty"|"gy"|"ny"|"j"|"ly"|"m"|"h") + + ("e"|"a"|"ö"|"o") => init tolla ; -- ház, ház|at -> ház|a _ + #c + ("a"|"e") => init tolla ; @@ -180,9 +181,9 @@ oper -- orr, orr|ot -> orr|a -- TODO fails for gyümölcs, gyümölcs|öt -> gyümölcs|e -- I don't know what this list means /IL - _ + #v + ("sz"|"z"|"s"|"zs"|"j"|"ly"|"l" - |"r"|"n"|"ny"|"ssz"|"zz"|"ss" - |"ll"|"rr"|"nn"|"ns"|"nsz"|"nz") + ("o"|"ö") => init tolla ; + _ + #v + ("sz"|"z"|"s"|"zs"|"j"|"ly"|"l"|"r"|"n"|"ny" + |"ssz"|"zz"|"ss"|"ll"|"rr"|"nn"|"ns"|"nsz"|"nz") + + ("o"|"ö") => init tolla ; -- nap, nap|ot -> napj|a -- bank, bank|ot -> bankj|a @@ -193,7 +194,6 @@ oper -- háború, háború|t -> háborúj|a _ => tolla + "j" } } ; - in nTolla ** { s = \\nc => case nc of { -- All plural forms and Sg Acc use the "tolla" stem @@ -240,6 +240,29 @@ oper -- https://cl.lingfil.uu.se/~bea/publ/megyesi-hungarian.pdf -- TODO: teher ~ terhet (consonant-crossing) + -- Worst case constructor: takes all stems + worstCaseNoun : (x1,_,_,_,_,_,_,_,x10 : Str) -> Harm -> Noun = + \nomsg,accsg,supsg,allsg,nompl,accpl,possdSg_possrP3sg,possdSg_PossrPl1,possdPl,h -> + let sgstem = tk 3 allsg ; -- remove -hoz/hez/höz + sginsstem : Str = case vowFinal sgstem of { + True => sgstem + "v" ; + False => duplicateLast sgstem } ; + in {s = table { + SgNom => nomsg ; + SgSup => supsg ; + SgAll => allsg ; + SgStem => sgstem ; + SgAccStem => init accsg ; -- remove t; same stem used for other forms + SgInsStem => sginsstem ; + PlStem => nompl ; + PlAcc => accpl ; + PossdSg_PossrP3 => init possdSg_possrP3sg ; -- remove -a/e + PossdSg_PossrPl1 => tk 2 possdSg_PossrPl1 ; -- remove -nk + PossdPl => possdPl } ; + h = h ; + } ; + + -- All regNoun* are /smart paradigms/: they take one or a couple of forms, -- and decides which (non-smart) paradigm is the most likely to match. regNoun4 : (nomsg, accsg, nompl, possdSg_possrP3sg : Str) -> Noun = diff --git a/src/hungarian/ParadigmsHun.gf b/src/hungarian/ParadigmsHun.gf index 543288e3..4d61ef17 100644 --- a/src/hungarian/ParadigmsHun.gf +++ b/src/hungarian/ParadigmsHun.gf @@ -135,6 +135,9 @@ oper mkN : (x1,_,_,x4 : Str) -> N = \n,a,pln,possd -> lin N (regNoun4 n a pln possd) ; + mkN : (x1,_,_,_,_,_,_,_,x9 : Str) -> N = + \a,b,c,d,e,f,g,h,i -> lin N (worstCaseNoun a b c d e f g h i (getHarm a)) ; + mkN : Str -> Harmony -> N = \s,h -> lin N (mkNounHarm h (pluralAllomorph s) s) ;