finishing TestGerman

This commit is contained in:
aarne
2006-01-13 22:33:15 +00:00
parent f3f346d6d9
commit 1a262ce1f8
10 changed files with 133 additions and 43 deletions

View File

@@ -20,10 +20,10 @@ concrete AdjectiveGer of Adjective = CatGer ** open ResGer, Prelude in {
isPre = True isPre = True
} ; } ;
-- ReflA2 a = { ReflA2 a = {
-- s = \\ag => a.s ! AAdj Posit ++ a.c2 ++ reflPron ! ag ; s = \\af => a.s ! Posit ! APred ++ appPrep a.c2 (reflPron ! agrP3 Sg) ; --- agr
-- isPre = False isPre = True
-- } ; } ;
SentAP ap sc = { SentAP ap sc = {
s = \\a => ap.s ! a ++ sc.s ; s = \\a => ap.s ! a ++ sc.s ;

View File

@@ -15,7 +15,7 @@ concrete AdverbGer of Adverb = CatGer ** open ResGer, Prelude in {
AdAdv = cc2 ; AdAdv = cc2 ;
SubjS subj s = {s = subj.s ++ s.s ! Sub} ; SubjS subj s = {s = subj.s ++ s.s ! Sub} ;
-- AdvSC s = s ; --- this rule give stack overflow in ordinary parsing AdvSC s = s ;
AdnCAdv cadv = {s = cadv.s ++ conjThan} ; AdnCAdv cadv = {s = cadv.s ++ conjThan} ;

View File

@@ -74,7 +74,7 @@ concrete CatGer of Cat = open ResGer, Prelude in {
-- Open lexical classes, e.g. Basic -- Open lexical classes, e.g. Basic
V, VS, VQ, VA = ResGer.Verb ; -- = {s : VForm => Str} ; V, VS, VQ, VA = ResGer.Verb ; -- = {s : VForm => Str} ;
VV = Verb ** {part : Str} ; VV = Verb ** {isAux : Bool} ;
V2, V2A = Verb ** {c2 : Preposition} ; V2, V2A = Verb ** {c2 : Preposition} ;
V3 = Verb ** {c2, c3 : Preposition} ; V3 = Verb ** {c2, c3 : Preposition} ;

View File

@@ -7,12 +7,12 @@ concrete LexGer of Lex = CatGer ** open ResGer, Prelude in {
mkV mkV
"gehen" "gehe" "gehst" "geht" "geht" "geh" "gehen" "gehe" "gehst" "geht" "geht" "geh"
"ging" "gingst" "gingt" "gingen" "ging" "gingst" "gingt" "gingen"
"ginge" "gegangen" VSein ; "ginge" "gegangen" "aus" VSein ;
help_V2 = help_V2 =
mkV mkV
"helfen" "helfe" "hilfst" "hilft" "helft" "hilf" "helfen" "helfe" "hilfst" "hilft" "helft" "hilf"
"half" "halfst" "halft" "halfen" "half" "halfst" "halft" "halfen"
"hälfe" "geholfen" VHaben ** "hälfe" "geholfen" [] VHaben **
{c2 = {s = [] ; c = Dat}} ; {c2 = {s = [] ; c = Dat}} ;
show_V3 = show_V3 =
regV "zeigen" ** regV "zeigen" **
@@ -21,13 +21,13 @@ concrete LexGer of Lex = CatGer ** open ResGer, Prelude in {
(mkV (mkV
"wollen" "will" "willst" "will" "wollt" "woll" "wollen" "will" "willst" "will" "wollt" "woll"
"wollte" "wolltest" "wollten" "wolltet" "wollte" "wolltest" "wollten" "wolltet"
"wollte" "gewollen" "wollte" "gewollen" []
VHaben) ; VHaben) ;
claim_VS = claim_VS =
mkV mkV
"behaupten" "behaupte" "bahauptest" "behauptet" "behauptet" "behaupte" "behaupten" "behaupte" "bahauptest" "behauptet" "behauptet" "behaupte"
"behauptete" "behauptetest" "behauptetet" "behaupteten" "behauptete" "behauptetest" "behauptetet" "behaupteten"
"behauptete" "behauptet" VHaben ; "behauptete" "behauptet" [] VHaben ;
ask_VQ = ask_VQ =
regV "fragen" ; regV "fragen" ;

View File

@@ -58,6 +58,7 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
NoOrd = {s = \\_ => []} ; NoOrd = {s = \\_ => []} ;
NumInt n = {s = \\_,_ => n.s} ; NumInt n = {s = \\_,_ => n.s} ;
OrdInt n = {s = \\_ => n.s ++ "."} ;
NumNumeral numeral = {s = \\_,_ => numeral.s ! NCard} ; NumNumeral numeral = {s = \\_,_ => numeral.s ! NCard} ;
OrdNumeral numeral = {s = \\af => numeral.s ! NOrd af} ; OrdNumeral numeral = {s = \\af => numeral.s ! NOrd af} ;

View File

@@ -1,4 +1,4 @@
concrete PhraseGer of Phrase = CatGer, TenseX ** open ResGer in { concrete PhraseGer of Phrase = CatGer, TenseX ** open Prelude, ResGer in {
flags optimize=all_subs ; flags optimize=all_subs ;
@@ -13,7 +13,11 @@ concrete PhraseGer of Phrase = CatGer, TenseX ** open ResGer in {
UttIP ip = {s = ip.s ! Nom} ; --- Acc also UttIP ip = {s = ip.s ! Nom} ; --- Acc also
UttIAdv iadv = iadv ; UttIAdv iadv = iadv ;
UttNP np = {s = np.s ! Acc} ; UttNP np = {s = np.s ! Acc} ;
---- UttVP vp = {s = infMark ++ infVP vp (agrP3 Sg)} ; UttVP vp =
let
vpi = vp.s ! agrP3 Sg ! VPInfinit Simul --- agr
in
ss (vp.n2 ! agrP3 Sg ++ vp.a2 ++ vpi.fin ++ infPart False ++ vpi.inf) ;
UttAdv adv = adv ; UttAdv adv = adv ;
NoPConj = {s = []} ; NoPConj = {s = []} ;

View File

@@ -62,10 +62,10 @@ resource ResGer = ParamGer ** open Prelude in {
-- suffixes "t" and "st". Auxiliaries like "sein" will have to -- suffixes "t" and "st". Auxiliaries like "sein" will have to
-- make extra cases even for this. -- make extra cases even for this.
Verb : Type = {s : VForm => Str ; aux : VAux} ; Verb : Type = {s : VForm => Str ; prefix : Str ; aux : VAux} ;
mkV : (x1,_,_,_,_,_,_,_,_,_,_,x12 : Str) -> VAux -> Verb = mkV : (x1,_,_,_,_,_,_,_,_,_,_,x12 : Str) -> Str -> VAux -> Verb =
\geben,gebe,gibst,gibt,gebt,gib,gab,gabst,gaben,gabt,gaebe,gegeben,aux -> \geben,gebe,gibst,gibt,gebt,gib,gab,gabst,gaben,gabt,gaebe,gegeben,ein,aux ->
{s = table { {s = table {
VInf => geben ; VInf => geben ;
VPresInd Sg P1 => gebe ; VPresInd Sg P1 => gebe ;
@@ -90,6 +90,7 @@ resource ResGer = ParamGer ** open Prelude in {
VImpfSubj Pl _ => gaebe + "n" ; VImpfSubj Pl _ => gaebe + "n" ;
VPastPart a => (regA gegeben).s ! Posit ! a VPastPart a => (regA gegeben).s ! Posit ! a
} ; } ;
prefix = ein ;
aux = aux aux = aux
} ; } ;
@@ -113,7 +114,7 @@ resource ResGer = ParamGer ** open Prelude in {
legen lege (leg+"st") legt legt leg legen lege (leg+"st") legt legt leg
legte (legte + "st") (legte + "n") (legte + "t") legte (legte + "st") (legte + "n") (legte + "t")
legte ("ge" + legt) legte ("ge" + legt)
VHaben ; [] VHaben ;
-- Prepositions for complements indicate the complement case. -- Prepositions for complements indicate the complement case.
@@ -204,11 +205,13 @@ resource ResGer = ParamGer ** open Prelude in {
ext : Str -- S-Ext dass sie kommt ext : Str -- S-Ext dass sie kommt
} ; } ;
predV : Verb -> VP = \verb -> predV : Verb -> VP = predVGen False ;
predVGen : Bool -> Verb -> VP = \isAux, verb ->
let let
vfin : Tense -> Agr -> Str = \t,a -> verb.s ! vFin t a ; vfin : Tense -> Agr -> Str = \t,a -> verb.s ! vFin t a ;
vpart = verb.s ! VPastPart APred ;
vinf = verb.s ! VInf ; vinf = verb.s ! VInf ;
vpart = if_then_Str isAux vinf (verb.s ! VPastPart APred) ;
vHaben = auxPerfect verb ; vHaben = auxPerfect verb ;
hat : Tense -> Agr -> Str = \t,a -> vHaben ! vFin t a ; hat : Tense -> Agr -> Str = \t,a -> vHaben ! vFin t a ;
@@ -217,8 +220,10 @@ resource ResGer = ParamGer ** open Prelude in {
wird : Agr -> Str = \a -> werden_V.s ! VPresInd a.n a.p ; wird : Agr -> Str = \a -> werden_V.s ! VPresInd a.n a.p ;
wuerde : Agr -> Str = \a -> werden_V.s ! VImpfSubj a.n a.p ; wuerde : Agr -> Str = \a -> werden_V.s ! VImpfSubj a.n a.p ;
auf = verb.prefix ;
vf : Str -> Str -> {fin,inf : Str} = \fin,inf -> { vf : Str -> Str -> {fin,inf : Str} = \fin,inf -> {
fin = fin ; inf = inf fin = fin ; inf = auf ++ inf
} ; } ;
in { in {
@@ -254,14 +259,21 @@ resource ResGer = ParamGer ** open Prelude in {
"haben" "habe" "hast" "hat" "habt" "hab" "haben" "habe" "hast" "hat" "habt" "hab"
"hatte" "hattest" "hatten" "hattet" "hatte" "hattest" "hatten" "hattet"
"hätte" "gehabt" "hätte" "gehabt"
VHaben ; [] VHaben ;
werden_V : Verb = werden_V : Verb =
mkV mkV
"werden" "werde" "wirst" "wird" "werdet" "werd" "werden" "werde" "wirst" "wird" "werdet" "werd"
"wurde" "wurdest" "wurden" "wurdet" "wurde" "wurdest" "wurden" "wurdet"
"würde" "geworden" "würde" "geworden"
VSein ; [] VSein ;
werdenPass : Verb =
mkV
"werden" "werde" "wirst" "wird" "werdet" "werd"
"wurde" "wurdest" "wurden" "wurdet"
"würde" "worden"
[] VSein ;
sein_V : Verb = sein_V : Verb =
let let
@@ -269,7 +281,7 @@ resource ResGer = ParamGer ** open Prelude in {
"sein" "bin" "bist" "ist" "seid" "sei" "sein" "bin" "bist" "ist" "seid" "sei"
"war" "warst" "waren" "wart" "war" "warst" "waren" "wart"
"wäre" "gewesen" "wäre" "gewesen"
VSein [] VSein
in in
{s = table { {s = table {
VPresInd Pl (P1 | P3) => "sind" ; VPresInd Pl (P1 | P3) => "sind" ;
@@ -280,10 +292,11 @@ resource ResGer = ParamGer ** open Prelude in {
VPresPart a => (regA "seiend").s ! Posit ! a ; VPresPart a => (regA "seiend").s ! Posit ! a ;
v => sein.s ! v v => sein.s ! v
} ; } ;
prefix = [] ;
aux = VSein aux = VSein
} ; } ;
auxVV : Verb -> Verb ** {part : Str} = \v -> v ** {part = []} ; auxVV : Verb -> Verb ** {isAux : Bool} = \v -> v ** {isAux = True} ;
negation : Polarity => Str = table { negation : Polarity => Str = table {
Pos => [] ; Pos => [] ;
@@ -300,6 +313,14 @@ resource ResGer = ParamGer ** open Prelude in {
ext = vp.ext ext = vp.ext
} ; } ;
insertAdV : Str -> VP -> VP = \adv,vp -> {
s = vp.s ;
a1 = \\a => vp.a1 ! a ++ adv ;
n2 = vp.n2 ;
a2 = vp.a2 ;
ext = vp.ext
} ;
insertAdv : Str -> VP -> VP = \adv,vp -> { insertAdv : Str -> VP -> VP = \adv,vp -> {
s = vp.s ; s = vp.s ;
a1 = vp.a1 ; a1 = vp.a1 ;
@@ -338,19 +359,27 @@ resource ResGer = ParamGer ** open Prelude in {
} }
} ; } ;
reflPron : Agr => Str = table { -- The nominative case is not used as reflexive, but defined here
{n = Sg ; p = P1} => "mich" ; -- so that we can reuse this in personal pronouns.
{n = Sg ; p = P2} => "dich" ; -- The missing Sg "ihrer" shows that a dependence on gender would
{n = Sg ; p = P3} => "sich" ; -- -- be needed.
{n = Pl ; p = P1} => "uns" ;
{n = Pl ; p = P2} => "euch" ; reflPron : Agr => Case => Str = table {
{n = Pl ; p = P3} => "sich" {n = Sg ; p = P1} => caselist "ich" "mich" "mir" "meiner" ;
{n = Sg ; p = P2} => caselist "du" "dich" "dir" "deiner" ;
{n = Sg ; p = P3} => caselist "er" "sich" "sich" "seiner" ; --- ihrer
{n = Pl ; p = P1} => caselist "wir" "uns" "uns" "unser" ;
{n = Pl ; p = P2} => caselist "ihr" "euch" "euch" "euer" ;
{n = Pl ; p = P3} => caselist "sie" "sich" "sich" "ihrer"
} ; } ;
conjThat : Str = "daß" ; conjThat : Str = "daß" ;
conjThan : Str = "als" ; conjThan : Str = "als" ;
-- The infinitive particle "zu" is used if and only if $vv.isAux = False$.
infPart : Bool -> Str = \b -> if_then_Str b [] "zu" ;
-- For $Numeral$. -- For $Numeral$.
-- --

View File

@@ -22,7 +22,8 @@ concrete SentenceGer of Sentence = CatGer ** open ResGer in {
SlashVVV2 np vv v2 = SlashVVV2 np vv v2 =
mkClause (np.s ! Nom) np.a mkClause (np.s ! Nom) np.a
(insertObj (\\a => vv.part ++ v2.s ! VInf) (predV vv)) ** (insertObj (\\a => v2.prefix ++ infPart vv.isAux ++ v2.s ! VInf)
(predVGen vv.isAux vv)) **
{c2 = v2.c2} ; {c2 = v2.c2} ;
AdvSlash slash adv = { AdvSlash slash adv = {

View File

@@ -1,4 +1,4 @@
concrete VerbGer of Verb = CatGer ** open ResGer in { concrete VerbGer of Verb = CatGer ** open Prelude, ResGer in {
flags optimize=all_subs ; flags optimize=all_subs ;
@@ -10,16 +10,23 @@ concrete VerbGer of Verb = CatGer ** open ResGer in {
insertObj (\\_ => appPrep v.c2 np.s ++ appPrep v.c3 np2.s) (predV v) ; insertObj (\\_ => appPrep v.c2 np.s ++ appPrep v.c3 np2.s) (predV v) ;
ComplVV v vp = ComplVV v vp =
insertObj (\\a => v.part ++ (vp.s ! a ! VPInfinit Simul).inf) (predV v) ; let
compl : Agr => Str = \\a =>
let
vpi = vp.s ! a ! VPInfinit Simul
in
vp.n2 ! a ++ vp.a2 ++ vpi.fin ++ infPart v.isAux ++ vpi.inf
in
insertObj compl (predVGen v.isAux v) ;
ComplVS v s = ComplVS v s =
insertExtrapos (conjThat ++ s.s ! Sub) (predV v) ; insertExtrapos (conjThat ++ s.s ! Sub) (predV v) ;
ComplVQ v q = ComplVQ v q =
insertExtrapos (q.s ! QIndir) (predV v) ; insertExtrapos (q.s ! QIndir) (predV v) ;
-- ComplVA v ap = insertObj (ap.s) (predV v) ; ComplVA v ap = insertObj (\\ _ => ap.s ! APred) (predV v) ;
-- ComplV2A v np ap = ComplV2A v np ap =
-- insertObj (\\_ => v.c2 ++ np.s ! Acc ++ ap.s ! np.a) (predV v) ; insertObj (\\_ => appPrep v.c2 np.s ++ ap.s ! APred) (predV v) ;
--
UseComp comp = insertObj comp.s (predV sein_V) ; UseComp comp = insertObj comp.s (predV sein_V) ;
@@ -28,11 +35,11 @@ concrete VerbGer of Verb = CatGer ** open ResGer in {
CompAdv a = {s = \\_ => a.s} ; CompAdv a = {s = \\_ => a.s} ;
AdvVP vp adv = insertAdv adv.s vp ; AdvVP vp adv = insertAdv adv.s vp ;
-- AdVVP adv vp = insertAdV adv.s vp ; AdVVP adv vp = insertAdV adv.s vp ;
--
-- ReflV2 v = insertObj (\\a => v.c2 ++ reflPron ! a) (predV v) ; ReflV2 v = insertObj (\\a => appPrep v.c2 (reflPron ! a)) (predV v) ;
--
-- PassV2 v = {s = \\_ => v.s ! VPPart} ; PassV2 v = insertObj (\\_ => v.s ! VPastPart APred) (predV werdenPass) ;
UseVS, UseVQ = \v -> v ** {c2 = noPreposition Acc} ; UseVS, UseVQ = \v -> v ** {c2 = noPreposition Acc} ;

View File

@@ -140,3 +140,51 @@ wc german/*.gfc
Now we have finished most of TestGer in two days, 4 + 8 hours. But we had the Now we have finished most of TestGer in two days, 4 + 8 hours. But we had the
old morphology and other files, and the Scandinavian v 1.0 as help. old morphology and other files, and the Scandinavian v 1.0 as help.
--------------------
13/1
CatGer: add prefix to V*, isAux to VV - the latter mostly to deal with double infinitives
ResGer: generalize predV to predVGen
LexGer: experiment with gehen --> ausgehen
> l -table PredVP (UsePron he_Pron) (ComplVV want_VV (UseV walk_V))
--- the auxiliary is still in wrong place in subordinate double infinitives
ResGer: reflPron
VerbGer: ReflV2
AdjectiveGer: ReflA2 --- with missing person agreement
> p -cat=Cl -mcfg "ich helfe mir"
PredVP (UsePron i_Pron) (ComplV2 help_V2 (UsePron i_Pron))
PredVP (UsePron i_Pron) (ReflV2 help_V2)
> p -cat=Cl -mcfg "er hilft sich"
PredVP (UsePron he_Pron) (ReflV2 help_V2)
> pm -printer=missing
AdVVP AdvSC OrdInt UttVP
A round of filling these completes the implementation of TestGer.
ResGer: insertAdV
> p -cat=Cl -mcfg "er hilft immer seinem Hund"
PredVP (UsePron he_Pron) (AdVVP always_AdV (ComplV2 help_V2
(DetCN (DetSg (PossSg he_Pron) NoOrd) (UseN dog_N))))
wc german/*.gfc
63 203 4768 german/AdjectiveGer.gfc
63 198 1649 german/AdverbGer.gfc
55 184 7490 german/CatGer.gfc
76 260 4489 german/ConjunctionGer.gfc
94 315 13968 german/LexGer.gfc
121 445 2736 german/MorphoGer.gfc
86 306 6637 german/NounGer.gfc
41 160 1419 german/ParamGer.gfc
81 245 2256 german/PhraseGer.gfc
63 219 3333 german/QuestionGer.gfc
63 219 3800 german/RelativeGer.gfc
87 343 2081 german/ResGer.gfc
112 393 20890 german/SentenceGer.gfc
230 696 4752 german/TestGer.gfc
61 185 1483 german/UntensedGer.gfc
110 366 41629 german/VerbGer.gfc
1406 4737 123380 total
Ca. 4h more work was needed, so we have spent 16h now.