German numerals and coordination

This commit is contained in:
aarne
2006-01-05 21:37:53 +00:00
parent 37cfc1b012
commit 258e6e3aa9
8 changed files with 103 additions and 78 deletions

View File

@@ -9,7 +9,7 @@ concrete AdjectiveGer of Adjective = CatGer ** open ResGer, Prelude in {
isPre = True
} ;
ComparA a np = {
s = \\af => a.s ! Compar ! af ++ "als" ++ np.s ! Nom ;
s = \\af => a.s ! Compar ! af ++ conjThan ++ np.s ! Nom ;
isPre = True
} ;

View File

@@ -38,7 +38,7 @@ concrete CatGer of Cat = open ResGer, Prelude in {
Det, Quant = {s : Gender => Case => Str ; n : Number ; a : Adjf} ;
Predet = {s : Number => Gender => Case => Str} ;
Num = {s : Gender => Case => Str} ;
Ord = {s : Adjf => Gender => Case => Str} ;
Ord = {s : AForm => Str} ;
CN = {s : Adjf => Number => Case => Str ; g : Gender} ;
N = {s : Number => Case => Str ; g : Gender} ;
@@ -54,11 +54,11 @@ concrete CatGer of Cat = open ResGer, Prelude in {
RP = {s : GenNum => Case => Str ; a : RAgr} ;
-- Numeral = {s : CardOrd => Str ; n : Number} ;
Numeral = {s : CardOrd => Str ; n : Number} ;
CAdv = {s : Str} ;
-- Conj = {s : Str ; n : Number} ;
-- DConj = {s1,s2 : Str ; n : Number} ;
--
Conj = {s : Str ; n : Number} ;
DConj = {s1,s2 : Str ; n : Number} ;
}

View File

@@ -1,45 +1,45 @@
concrete ConjunctionGer of Conjunction =
CatGer ** open ResGer, Coordination, Prelude in {
--
-- flags optimize=all_subs ;
--
-- lin
--
-- ConjS = conjunctSS ;
-- DConjS = conjunctDistrSS ;
--
-- ConjAdv = conjunctSS ;
-- DConjAdv = conjunctDistrSS ;
--
-- ConjNP conj ss = conjunctTable Case conj ss ** {
-- a = {n = conjNumber conj.n ss.a.n ; p = ss.a.p}
-- } ;
-- DConjNP conj ss = conjunctDistrTable Case conj ss ** {
-- a = {n = conjNumber conj.n ss.a.n ; p = ss.a.p}
-- } ;
--
-- ConjAP conj ss = conjunctTable Agr conj ss ** {
-- isPre = ss.isPre
-- } ;
-- DConjAP conj ss = conjunctDistrTable Agr conj ss ** {
-- isPre = ss.isPre
-- } ;
--
---- These fun's are generated from the list cat's.
--
-- BaseS = twoSS ;
-- ConsS = consrSS comma ;
-- BaseAdv = twoSS ;
-- ConsAdv = consrSS comma ;
-- BaseNP x y = twoTable Case x y ** {a = conjAgr x.a y.a} ;
-- ConsNP xs x = consrTable Case comma xs x ** {a = conjAgr xs.a x.a} ;
-- BaseAP x y = twoTable Agr x y ** {isPre = andB x.isPre y.isPre} ;
-- ConsAP xs x = consrTable Agr comma xs x ** {isPre = andB xs.isPre x.isPre} ;
--
-- lincat
-- [S] = {s1,s2 : Str} ;
-- [Adv] = {s1,s2 : Str} ;
-- [NP] = {s1,s2 : Case => Str ; a : Agr} ;
-- [AP] = {s1,s2 : Agr => Str ; isPre : Bool} ;
--
flags optimize=all_subs ;
lin
ConjS conj ss = conjunctTable Order conj ss ;
DConjS conj ss = conjunctDistrTable Order conj ss ;
ConjAdv conj ss = conjunctSS conj ss ;
DConjAdv conj ss = conjunctDistrSS conj ss ;
ConjNP conj ss = conjunctTable Case conj ss ** {
a = {n = conjNumber conj.n ss.a.n ; p = ss.a.p}
} ;
DConjNP conj ss = conjunctDistrTable Case conj ss ** {
a = {n = conjNumber conj.n ss.a.n ; p = ss.a.p}
} ;
ConjAP conj ss = conjunctTable AForm conj ss ** {
isPre = ss.isPre
} ;
DConjAP conj ss = conjunctDistrTable AForm conj ss ** {
isPre = ss.isPre
} ;
-- These fun's are generated from the list cat's.
BaseS = twoTable Order ;
ConsS = consrTable Order comma ;
BaseAdv = twoSS ;
ConsAdv = consrSS comma ;
BaseNP x y = twoTable Case x y ** {a = conjAgr x.a y.a} ;
ConsNP xs x = consrTable Case comma xs x ** {a = conjAgr xs.a x.a} ;
BaseAP x y = twoTable AForm x y ** {isPre = andB x.isPre y.isPre} ;
ConsAP xs x = consrTable AForm comma xs x ** {isPre = andB xs.isPre x.isPre} ;
lincat
[S] = {s1,s2 : Order => Str} ;
[Adv] = {s1,s2 : Str} ;
[NP] = {s1,s2 : Case => Str ; a : Agr} ;
[AP] = {s1,s2 : AForm => Str ; isPre : Bool} ;
}

View File

@@ -45,13 +45,19 @@ concrete LexGer of Lex = CatGer ** open ResGer, Prelude in {
whichPl_IDet = {s = appAdj (regA "welch") ! Sg ; n = Pl} ;
-- one_Numeral = {s = table {NCard => "one" ; NOrd => "first"} ; n = Sg} ;
-- forty_Numeral = {s = table {NCard => "forty" ; NOrd => "fortieth"} ; n = Pl} ;
forty_Numeral = {
s = table {
NCard => "vierzig" ;
NOrd af => (regA "vierzigt").s ! Posit ! af
} ;
n = Pl
} ;
in_Prep = {s = "in" ; c = Dat} ;
of_Prep = {s = "von" ; c = Dat} ;
-- and_Conj = {s = "and" ; n = Pl} ;
-- either7or_DConj = {s1 = "either" ; s2 = "or" ; n = Sg} ;
and_Conj = {s = "und" ; n = Pl} ;
either7or_DConj = {s1 = "entweder" ; s2 = "oder" ; n = Sg} ;
if_Subj = ss "wenn" ;
because_Subj = ss "weil" ;

View File

@@ -4,16 +4,10 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
lin
DetCN det cn = {
s = \\c => det.s ! cn.g ! c ++ cn.s ! adjfCase c ! det.n ! c ;
s = \\c => det.s ! cn.g ! c ++ cn.s ! adjfCase det.a c ! det.n ! c ;
a = agrP3 det.n ;
isPron = False
}
where {
adjfCase : Case -> Adjf = \c -> case <det.a,c> of {
<Strong, Nom|Acc> => Strong ;
_ => Weak
}
} ;
} ;
UsePN pn = pn ** {a = agrP3 Sg} ;
UsePron pron = {
@@ -27,7 +21,7 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
a = quant.a
in {
s = \\g,c => pred.s ! n ! g ! c ++ quant.s ! g ! c ++
num.s ! g ! c ++ ord.s ! a ! g ! c ;
num.s ! g ! c ++ ord.s ! agrAdj g (adjfCase a c) n c ;
n = n ;
a = a
} ;
@@ -46,17 +40,16 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
NoPredet = {s = \\_,_,_ => []} ;
NoNum = {s = \\_,_ => []} ;
NoOrd = {s = \\_,_,_ => []} ;
NoOrd = {s = \\_ => []} ;
NumInt n = {s = \\_,_ => n.s} ;
--
-- NumNumeral numeral = {s = numeral.s ! NCard} ;
-- OrdNumeral numeral = {s = numeral.s ! NOrd} ;
--
-- AdNum adn num = {s = adn.s ++ num.s} ;
--
-- OrdSuperl a = {s = a.s ! AAdj Superl} ;
NumNumeral numeral = {s = \\_,_ => numeral.s ! NCard} ;
OrdNumeral numeral = {s = \\af => numeral.s ! NOrd af} ;
AdNum adn num = {s = \\g,c => adn.s ++ num.s ! g ! c} ;
OrdSuperl a = {s = a.s ! Superl} ;
DefSg = {
s = \\g,c => artDef ! GSg g ! c ;

View File

@@ -68,10 +68,10 @@ resource ParamGer = ParamX ** {
RAgr = RNoAg | RAg {n : Number ; p : Person} ;
----2 For $Numeral$
--
-- CardOrd = NCard | NOrd ;
-- DForm = unit | teen | ten ;
--2 For $Numeral$
CardOrd = NCard | NOrd AForm ;
DForm = unit | teen | ten ;
--2 Transformations between parameter types
@@ -96,6 +96,13 @@ resource ParamGer = ParamX ** {
agrAdj : Gender -> Adjf -> Number -> Case -> AForm = \g,a,n,c ->
AMod a (gennum g n) c ;
-- This is used twice in NounGer.
adjfCase : Adjf -> Case -> Adjf = \a,c -> case <a,c> of {
<Strong, Nom|Acc> => Strong ;
_ => Weak
} ;
vFin : Tense -> Agr -> VForm = \t,a ->
case t of {
Pres => VPresInd a.n a.p ;
@@ -103,9 +110,9 @@ resource ParamGer = ParamX ** {
_ => VInf --- never used
} ;
-- conjAgr : Agr -> Agr -> Agr = \a,b -> {
-- n = conjNumber a.n b.n ;
-- p = conjPerson a.p b.p
-- } ;
--
conjAgr : Agr -> Agr -> Agr = \a,b -> {
n = conjNumber a.n b.n ;
p = conjPerson a.p b.p
} ;
}

View File

@@ -61,7 +61,8 @@ concrete QuestionGer of Question = CatGer ** open ResGer in {
n = idet.n
in {
s = \\c =>
idet.s ! g ! c ++ num.s ! g ! c ++ ord.s ! Weak ! g ! c ++ cn.s ! Weak ! n ! c ;
idet.s ! g ! c ++ num.s ! g ! c ++ ord.s ! agrAdj g Weak n c ++
cn.s ! Weak ! n ! c ;
n = n
} ;

View File

@@ -117,5 +117,23 @@ NounGer: RelCN
> p -cat=RCl -mcfg "der geht" | l -table
> p -cat=NP -mcfg "der Hund dem wir helfen wollen" | l -table
NounGer: Num and Ord related rules
CatGer: Ord has parametric AForm; Num has no params
ParamGer: CardOrd
LexGer: Numeral
> p -cat=NP "meine vierzig warmen Hünde"
> p -cat=NP "mein vierzigter Hund"
CatGer: Conj, DConj
ConjunctionGer: all (mostly from Scand)
LexGer: Conj, DConj
> p -cat=NP "ich und der Hund" | l -table
> p -cat=S -mcfg "ich und der Hund sind entweder warm oder warm"
> pm -printer=missing
TestGer
AdVVP AdvSC ComplV2A ComplVA EmbedQS EmbedS EmbedVP PassV2 ReflA2 ReflV2 UttVP
one_Numeral
wc german/*.gfc
1231 4116 98878 total