forked from GitHub/gf-core
german AForm and verb endings
This commit is contained in:
@@ -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
|
||||
} ;
|
||||
|
||||
} ;
|
||||
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
|
||||
@@ -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 <gn,c> of {
|
||||
<GSg _, Nom> => e ;
|
||||
<GSg Masc,Acc> => en ;
|
||||
<GSg _, Acc> => e ;
|
||||
_ => en
|
||||
}
|
||||
} ;
|
||||
|
||||
-- This is used twice in NounGer.
|
||||
|
||||
|
||||
@@ -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 <g,c> of {
|
||||
<_,Nom> => teur+"e" ;
|
||||
<Masc,Acc> => 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$.
|
||||
|
||||
@@ -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 <a,gn,c> is
|
||||
much less storage-efficient.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user