german AForm and verb endings

This commit is contained in:
aarne
2006-01-16 09:24:38 +00:00
parent bc8bfdea4d
commit de492a866a
5 changed files with 59 additions and 25 deletions

View File

@@ -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
} ;
} ;

View File

@@ -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 ;

View File

@@ -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.

View File

@@ -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$.

View File

@@ -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.