From de492a866a2ed5ce59664f871c4cb0a8823bb7b3 Mon Sep 17 00:00:00 2001 From: aarne Date: Mon, 16 Jan 2006 09:24:38 +0000 Subject: [PATCH] german AForm and verb endings --- lib/resource-1.0/german/MorphoGer.gf | 18 ++++++++++++++++++ lib/resource-1.0/german/ParadigmsGer.gf | 21 +++++++++++---------- lib/resource-1.0/german/ParamGer.gf | 19 +++++++++++++++++-- lib/resource-1.0/german/ResGer.gf | 18 ++++++------------ lib/resource-1.0/german/log.txt | 8 +++++++- 5 files changed, 59 insertions(+), 25 deletions(-) diff --git a/lib/resource-1.0/german/MorphoGer.gf b/lib/resource-1.0/german/MorphoGer.gf index 9ae799918..aa6bf5108 100644 --- a/lib/resource-1.0/german/MorphoGer.gf +++ b/lib/resource-1.0/german/MorphoGer.gf @@ -42,6 +42,24 @@ oper _ => variants {hund ; hund + "e"} } ; +-- Duden, p. 119 + + verbT : Str -> Str = \v -> case v of { + _ + ("t" | "d") => v + "et" ; -- gründen, reden, betten + _ + ("ch" | "k" | "p" | "t" | "g" | "b" | "d" | "f" | "s") + + ("m" | "n") => v + "et" ; -- atmen, widmen, öffnen, rechnen + _ => v + "t" -- lernen, lärmen, qualmen etc + } ; + + verbST : Str -> Str = \v -> case v of { + _ + ("s" | "ss" | "ß" | "sch" | "x" | "z") => v + "t" ; + _ => v + "st" + } ; + + stemVerb : Str -> Str = \v -> case v of { + _ + ("rn" | "ln") => init v ; + _ => Predef.tk 2 v + } ; } ; diff --git a/lib/resource-1.0/german/ParadigmsGer.gf b/lib/resource-1.0/german/ParadigmsGer.gf index bf5d38f05..75fd44acc 100644 --- a/lib/resource-1.0/german/ParadigmsGer.gf +++ b/lib/resource-1.0/german/ParadigmsGer.gf @@ -289,12 +289,13 @@ oper mkV geben gibt gib gab gaebe gegeben = let - gebe = init geben ; ---- - gibst = init gibt + "st" ; ---- - gebt = init gebe ; ---- - gabst = gab + "st" ; ---- + geb = stemVerb geben ; + gebe = geb + "e" ; + gibst = verbST (init gibt) ; + gebt = verbT geb ; + gabst = verbST gab ; gaben = pluralN gab ; - gabt = gab + "t" ---- + gabt = verbT gab in MorphoGer.mkV geben gebe gibst gibt gebt gib gab gabst gaben gabt gaebe gegeben @@ -302,16 +303,16 @@ oper regV fragen = let - frag = Predef.tk 2 fragen ; ---- - fragt = frag + "t" ; ---- - fragte = fragt + "e" ; + frag = stemVerb fragen ; + fragt = verbT frag ; + fragte = fragt + "e" ; gefragt = "ge" + fragt ; in - mkV fragen fragt frag fragte fragte gefragt ; + mkV fragen fragt (frag + "e") fragte fragte gefragt ; irregV singen singt sang saenge gesungen = let - sing = Predef.tk 2 singen ; ---- + sing = stemVerb singen ; in mkV singen singt sing sang saenge gesungen ; diff --git a/lib/resource-1.0/german/ParamGer.gf b/lib/resource-1.0/german/ParamGer.gf index e2126c1da..c7c7de72e 100644 --- a/lib/resource-1.0/german/ParamGer.gf +++ b/lib/resource-1.0/german/ParamGer.gf @@ -35,7 +35,7 @@ resource ParamGer = ParamX ** { -- The predicative form of adjectives is not inflected further. - param AForm = APred | AMod Adjf GenNum Case ; + param AForm = APred | AMod GenNum Case ; --2 For $Verb$ @@ -93,8 +93,23 @@ resource ParamGer = ParamX ** { GPl => Pl } ; +-- Used in $NounGer$. + agrAdj : Gender -> Adjf -> Number -> Case -> AForm = \g,a,n,c -> - AMod a (gennum g n) c ; + let + gn = gennum g n ; + e = AMod (GSg Fem) Nom ; + en = AMod (GSg Masc) Acc ; + in + case a of { + Strong => AMod gn c ; + _ => case of { + => e ; + => en ; + => e ; + _ => en + } + } ; -- This is used twice in NounGer. diff --git a/lib/resource-1.0/german/ResGer.gf b/lib/resource-1.0/german/ResGer.gf index c35bd736a..acffb9956 100644 --- a/lib/resource-1.0/german/ResGer.gf +++ b/lib/resource-1.0/german/ResGer.gf @@ -164,7 +164,7 @@ resource ResGer = ParamGer ** open Prelude in { appAdj : Adjective -> Number => Gender => Case => Str = \adj -> let ad : GenNum -> Case -> Str = \gn,c -> - adj.s ! Posit ! AMod Strong gn c + adj.s ! Posit ! AMod gn c in \\n,g,c => case n of { Sg => ad (GSg g) c ; @@ -176,20 +176,14 @@ resource ResGer = ParamGer ** open Prelude in { adjForms : (x1,x2 : Str) -> AForm => Str = \teuer,teur -> table { APred => teuer ; - AMod Strong (GSg Masc) c => + AMod (GSg Masc) c => caselist (teur+"er") (teur+"en") (teur+"em") (teur+"es") ! c ; - AMod Strong (GSg Fem) c => + AMod (GSg Fem) c => caselist (teur+"e") (teur+"e") (teur+"er") (teur+"er") ! c ; - AMod Strong (GSg Neut) c => + AMod (GSg Neut) c => caselist (teur+"es") (teur+"es") (teur+"em") (teur+"es") ! c ; - AMod Strong GPl c => - caselist (teur+"e") (teur+"e") (teur+"en") (teur+"er") ! c ; - AMod Weak (GSg g) c => case of { - <_,Nom> => teur+"e" ; - => teur+"en" ; - <_,Acc> => teur+"e" ; - _ => teur+"en" } ; - AMod Weak GPl c => teur+"en" + AMod GPl c => + caselist (teur+"e") (teur+"e") (teur+"en") (teur+"er") ! c } ; -- For $Verb$. diff --git a/lib/resource-1.0/german/log.txt b/lib/resource-1.0/german/log.txt index ba604e4f3..1c3ced2f1 100644 --- a/lib/resource-1.0/german/log.txt +++ b/lib/resource-1.0/german/log.txt @@ -190,10 +190,16 @@ Ca. 4h more work was needed, so we have spent 16h now. -------------------- -14/1 +15/1 (3h) TensedGer: just uncomment, except S StructuralGer: almost complete with some determiner forms to revisit ParadigmsGer: almost complete with verb form variations to revisit MorphoGer: very few functions in this module +16/1 + +ParamGer: removed Strong/Weak from AForm to save lexicon storage. Done in agrAdj instead. + Only affects NounGer and QuestionGer. Notice that making case analysis on is + much less storage-efficient. +