1
0
forked from GitHub/gf-core

German relatives

This commit is contained in:
aarne
2006-01-05 20:58:28 +00:00
parent b0d4f03165
commit 37cfc1b012
8 changed files with 132 additions and 71 deletions

View File

@@ -3,19 +3,20 @@ concrete CatGer of Cat = open ResGer, Prelude in {
flags optimize=all_subs ;
lincat
Text, Phr, Utt = {s : Str} ;
Imp = {s : Polarity => Number => Str} ;
S = {s : Order => Str} ;
QS = {s : QForm => Str} ;
-- RS = {s : Agr => Str} ;
RS = {s : GenNum => Str} ;
Cl = {s : Tense => Anteriority => Polarity => Order => Str} ;
Slash = {s : Tense => Anteriority => Polarity => Order => Str} ** {c2 : Preposition} ;
QCl = {s : Tense => Anteriority => Polarity => QForm => Str} ;
RCl = {s : Tense => Anteriority => Polarity => Agr => Str} ;
RCl = {s : Tense => Anteriority => Polarity => GenNum => Str} ;
VP = ResGer.VP ;
V, VS, VQ, VA = ResGer.Verb ; -- = {s : VForm => Str} ;
@@ -51,8 +52,8 @@ concrete CatGer of Cat = open ResGer, Prelude in {
IDet = {s : Gender => Case => Str ; n : Number} ;
IAdv = {s : Str} ;
-- RP = {s : Case => Str ; a : RAgr} ;
--
RP = {s : GenNum => Case => Str ; a : RAgr} ;
-- Numeral = {s : CardOrd => Str ; n : Number} ;
CAdv = {s : Str} ;

View File

@@ -13,12 +13,14 @@ concrete LexGer of Lex = CatGer ** open ResGer, Prelude in {
ask_VQ = regV "fragen" ;
dog_N = mkN4 "Hund" "Hundes" "Hünde" "Hünden" Masc ;
-- son_N2 = regN "son" ** {c2 = "of"} ;
-- way_N3 = regN "way" ** {c2 = "from" ; c3 = "to"} ;
--
son_N2 = mkN4 "Sohn" "Sohnes" "Söhne" "Söhnen" Masc **
{c2 = {s = "von" ; c = Dat}} ;
way_N3 = mkN4 "Weg" "Weges" "Wege" "Wegen" Masc **
{c2 = {s = "von" ; c = Dat} ; c3 = {s = "nach" ; c = Dat}} ;
warm_A = mkA "warm" "warm" "wärmer" "wärmst" ;
-- close_A2 = regA "close" ** {c2 = "to"} ;
--
close_A2 = regA "eng" ** {c2 = {s = "zu" ; c = Dat}} ;
here_Adv = {s = "hier"} ;
very_AdA = {s = "sehr"} ;
always_AdV = {s = "immer"} ;

View File

@@ -79,9 +79,16 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
n = Pl ;
a = Strong
} ;
--
-- ComplN2 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c} ;
-- ComplN3 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ; c2 = f.c3} ;
ComplN2 f x = {
s = \\_,n,c => f.s ! n ! c ++ appPrep f.c2 x.s ;
g = f.g
} ;
ComplN3 f x = {
s = \\n,c => f.s ! n ! c ++ appPrep f.c2 x.s ;
g = f.g ;
c2 = f.c3
} ;
AdjCN ap cn =
let
@@ -94,10 +101,19 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
g = g
} ;
-- RelCN cn rs = {s = \\n,c => cn.s ! n ! c ++ rs.s ! {n = n ; p = P3}} ;
--
-- SentCN cn s = {s = \\n,c => cn.s ! n ! c ++ conjThat ++ s.s} ;
-- QuestCN cn qs = {s = \\n,c => cn.s ! n ! c ++ qs.s ! QIndir} ;
RelCN cn rs = {
s = \\a,n,c => cn.s ! a ! n ! c ++ rs.s ! gennum cn.g n ;
g = cn.g
} ;
SentCN cn s = {
s = \\a,n,c => cn.s ! a ! n ! c ++ conjThat ++ s.s ! Sub ;
g = cn.g
} ;
QuestCN cn qs = {
s = \\a,n,c => cn.s ! a ! n ! c ++ qs.s ! QIndir ;
g = cn.g
} ;
UseN n = {
s = \\_ => n.s ;

View File

@@ -60,13 +60,14 @@ resource ParamGer = ParamX ** {
-- The order of sentence is depends on whether it is used as a main
-- clause, inverted, or subordinate.
param Order = Main | Inv | Sub ;
param
Order = Main | Inv | Sub ;
--2 For $Relative$
RAgr = RNoAg | RAg {n : Number ; p : Person} ;
--
----2 For $Relative$
--
-- RAgr = RNoAg | RAg {n : Number ; p : Person} ;
--
----2 For $Numeral$
--
-- CardOrd = NCard | NOrd ;
@@ -84,6 +85,14 @@ resource ParamGer = ParamX ** {
Pl => GPl
} ;
-- Needed in $RelativeGer$.
numGenNum : GenNum -> Number = \gn ->
case gn of {
GSg _ => Sg ;
GPl => Pl
} ;
agrAdj : Gender -> Adjf -> Number -> Case -> AForm = \g,a,n,c ->
AMod a (gennum g n) c ;

View File

@@ -1,34 +1,45 @@
concrete RelativeGer of Relative = CatGer ** open ResGer in {
--
-- flags optimize=all_subs ;
--
-- lin
--
-- RelCl cl = {
-- s = \\t,a,p,_ => "such" ++ "that" ++ cl.s ! t ! a ! p ! ODir
-- } ;
--
-- RelVP rp vp = {
-- s = \\t,ant,b,ag =>
-- let
-- agr = case rp.a of {
-- RNoAg => ag ;
-- RAg a => a
-- } ;
-- cl = mkClause (rp.s ! Nom) agr vp
-- in
-- cl.s ! t ! ant ! b ! ODir
-- } ;
--
-- RelSlash rp slash = {
-- s = \\t,a,p,_ => slash.c2 ++ rp.s ! Acc ++ slash.s ! t ! a ! p ! ODir
-- } ;
--
-- FunRP p np rp = {
-- s = \\c => np.s ! c ++ p.s ++ rp.s ! Acc ;
-- a = RAg np.a
-- } ;
--
-- IdRP = mkIP "which" "which" "whose" Sg ** {a = RNoAg} ;
--
flags optimize=all_subs ;
lin
RelCl cl = {
s = \\t,a,b,_ => "derart" ++ conjThat ++ cl.s ! t ! a ! b ! Sub
} ;
RelVP rp vp = {
s = \\t,ant,b,gn =>
let
agr = case rp.a of {
RNoAg => agrP3 (numGenNum gn) ;
RAg a => a
} ;
cl = mkClause (rp.s ! gn ! Nom) agr vp
in
cl.s ! t ! ant ! b ! Sub
} ;
RelSlash rp slash = {
s = \\t,a,p,gn =>
appPrep slash.c2 (rp.s ! gn) ++ slash.s ! t ! a ! p ! Sub
} ;
FunRP p np rp = {
s = \\gn,c => np.s ! c ++ appPrep p (rp.s ! gn) ;
a = RAg np.a
} ;
IdRP = {s = relPron ; a = RNoAg} ;
oper
relPron : GenNum => Case => Str = \\gn,c =>
case <gn,c> of {
<GSg Fem,Gen> => "deren" ;
<GSg g,Gen> => "dessen" ;
<GPl,Dat> => "denen" ;
<GPl,Gen> => "deren" ;
_ => artDef ! gn ! c
} ;
}

View File

@@ -17,18 +17,19 @@ concrete SentenceGer of Sentence = CatGer ** open ResGer in {
verb.fin ++ vp.a1 ! pol ++ verb.inf ++ vp.n2 ! agr ++ vp.a2 ++ vp.ext
} ;
-- SlashV2 np v2 =
-- mkClause (np.s ! Nom) np.a (predV v2) ** {c2 = v2.c2} ;
--
-- SlashVVV2 np vv v2 =
-- mkClause (np.s ! Nom) np.a (insertObj (\\_ => "to" ++ v2.s ! VInf) (predV vv)) **
-- {c2 = v2.c2} ;
--
-- AdvSlash slash adv = {
-- s = \\t,a,b,o => slash.s ! t ! a ! b ! o ++ adv.s ;
-- c2 = slash.c2
-- } ;
--
-- SlashPrep cl prep = cl ** {c2 = prep.s} ;
--
SlashV2 np v2 =
mkClause (np.s ! Nom) np.a (predV v2) ** {c2 = v2.c2} ;
SlashVVV2 np vv v2 =
mkClause (np.s ! Nom) np.a
(insertObj (\\a => vv.part ++ v2.s ! VInf) (predV vv)) **
{c2 = v2.c2} ;
AdvSlash slash adv = {
s = \\t,a,b,o => slash.s ! t ! a ! b ! o ++ adv.s ;
c2 = slash.c2
} ;
SlashPrep cl prep = cl ** {c2 = prep} ;
}

View File

@@ -9,7 +9,7 @@ concrete UntensedGer of Untensed = CatGer ** open ResGer in {
PosQCl cl = {s = cl.s ! Pres ! Simul ! Pos} ;
NegQCl cl = {s = cl.s ! Pres ! Simul ! Neg} ;
-- PosRCl cl = {s = cl.s ! Pres ! Simul ! Pos} ;
-- NegRCl cl = {s = cl.s ! Pres ! Simul ! Neg} ;
--
PosRCl cl = {s = cl.s ! Pres ! Simul ! Pos} ;
NegRCl cl = {s = cl.s ! Pres ! Simul ! Neg} ;
}

View File

@@ -98,3 +98,24 @@ QuestionGer: IDetCN (using NounGer.MkDet)
> p -cat=QS -mcfg "welcher Hund geht"
> p -cat=QS -mcfg "in welchem Hund geht er"
wc german/*.gfc
69407 total
NounGer: ComplN2, ComplN3, SentCN, QuestCN
LexGer: N2, N3
> p -cat=NP "der Sohn von dem Hund"
> p -cat=CN -mcfg "Hund ob er geht"
SentenceGer: Slash rules
> p -cat=QS -mcfg "wem hilft er"
CatGer: RP, RS, RCl
ParamGer: RAgr
RelativeGer: all (copied from Scand; tweaking betw GenNum, Agr also in CatGer)
UntensedGer: PosRCl, NegRCl
NounGer: RelCN
> p -cat=RCl -mcfg "der geht" | l -table
> p -cat=NP -mcfg "der Hund dem wir helfen wollen" | l -table