fixed problems with position of Dutch negation

This commit is contained in:
andrea.christina.unger
2015-07-21 12:48:09 +00:00
parent 3d22d05bdc
commit b70f55ed2e
8 changed files with 53 additions and 46 deletions

View File

@@ -16,12 +16,12 @@ concrete ExtraDut of ExtraDutAbs = CatDut **
ComplVPIVV v vpi = ComplVPIVV v vpi =
insertInf (vpi.s ! v.isAux) ( insertInf (vpi.s ! v.isAux) (
predVGen v.isAux v) ; ---- predVGen v.isAux BeforeObjs v) ; ----
--{- --{-
-- insertExtrapos vpi.p3 ( -- insertExtrapos vpi.p3 (
-- insertInf vpi.p2 ( -- insertInf vpi.p2 (
-- insertObj vpi.p1 ( -- insertObj vpi.p1 (
-- predVGen v.isAux v))) ; -- predVGen v.isAux vpi.negPos v))) ;
---} ---}
-- --
-- PPzuAdv cn = {s = case cn.g of { -- PPzuAdv cn = {s = case cn.g of {
@@ -122,7 +122,7 @@ lin
lin lin
NominalizeVPSlashNP vpslash np = NominalizeVPSlashNP vpslash np =
--False for negation place; doesn't matter because vp.a1 ! Pos is chosen --False for negation place; doesn't matter because vp.a1 ! Pos is chosen
let vp : ResDut.VP = insertObjNP np.isPron False (\\_ => appPrep vpslash.c2.p1 np.s) vpslash ; let vp : ResDut.VP = insertObjNP np.isPron AfterObjs (\\_ => appPrep vpslash.c2.p1 np.s) vpslash ;
agrDef : Agr = agrP3 Sg ; agrDef : Agr = agrP3 Sg ;
compl : Str = vp.n0 ! agrDef ++ vp.a1 ! Pos ++ vp.n2 ! agrDef ++ vp.s.prefix ; compl : Str = vp.n0 ! agrDef ++ vp.a1 ! Pos ++ vp.n2 ! agrDef ++ vp.s.prefix ;
inf : Str = vp.inf.p1 ; inf : Str = vp.inf.p1 ;

View File

@@ -4,7 +4,7 @@ concrete IdiomDut of Idiom = CatDut **
flags optimize=all_subs ; flags optimize=all_subs ;
lin lin
ImpersCl vp = mkClause "'t" (agrP3 Sg) vp ; ImpersCl vp = mkClause "het" (agrP3 Sg) vp ; -- cunger: 't -> het
GenericCl vp = mkClause "men" (agrP3 Sg) vp ; GenericCl vp = mkClause "men" (agrP3 Sg) vp ;
CleftNP np rs = mkClause "'t" (agrP3 Sg) CleftNP np rs = mkClause "'t" (agrP3 Sg)
@@ -41,7 +41,7 @@ concrete IdiomDut of Idiom = CatDut **
vvp = insertExtrapos vpi.p3 ( vvp = insertExtrapos vpi.p3 (
insertInf vpi.p2 ( insertInf vpi.p2 (
insertObj vpi.p1 ( insertObj vpi.p1 (
predVGen True v))) ; predVGen True vp.negPos v))) ;
in in
{s = (mkClause "we" {g = Utr ; n = Pl ; p = P1} vvp).s ! {s = (mkClause "we" {g = Utr ; n = Pl ; p = P1} vvp).s !
Pres ! Simul ! Pos ! Inv Pres ! Simul ! Pos ! Inv

View File

@@ -52,7 +52,7 @@ lin heffen_V = mkV "heffen" "hief" "hieven" "geheven" ;
lin helpen_V = mkV "helpen" "hielp" "hielpen" "geholpen" ; lin helpen_V = mkV "helpen" "hielp" "hielpen" "geholpen" ;
lin heten_V = mkV "heten" "heette" "heetten" "geheten" ; lin heten_V = mkV "heten" "heette" "heetten" "geheten" ;
lin hijsen_V = mkV "hijsen" "hees" "hesen" "gehesen" ; lin hijsen_V = mkV "hijsen" "hees" "hesen" "gehesen" ;
lin hoeven_V = mkV "hoeven" "hoeft" "hoeven" "hoefde" "hoefden" "gehoefd" ; lin hoeven_V = mkV "hoef" "hoeft" "hoeven" "hoefde" "hoefden" "gehoefd" ;
lin houden_V = mkV "houden" "hield" "hielden" "gehouden" ; lin houden_V = mkV "houden" "hield" "hielden" "gehouden" ;
lin houwen_V = mkV "houwen" "houwde" "houwden" "gehouwen" ; lin houwen_V = mkV "houwen" "houwde" "houwden" "gehouwen" ;
lin jagen_V = mkV "jagen" "joeg" "joegen" "gejaagd" ; lin jagen_V = mkV "jagen" "joeg" "joegen" "gejaagd" ;

View File

@@ -45,7 +45,7 @@ lin
married_A2 = mkA2 (mkA "getrouwd") (mkPrep "met") ; married_A2 = mkA2 (mkA "getrouwd") (mkPrep "met") ;
mother_N2 = mkN2 (mkN "moeder") ; mother_N2 = mkN2 (mkN "moeder") ;
now_Adv = mkAdv "nu" ; now_Adv = mkAdv "nu" ;
paint_V2A = mkV2A (mkV "schilderen" "schildert") noPrep ; paint_V2A = mkV2A (mkV "schilderen" "schildert") ;
paris_PN = mkPN "Parijs" ; paris_PN = mkPN "Parijs" ;
red_A = mkA "rood" ; red_A = mkA "rood" ;
say_VS = mkVS zeggen_V ; say_VS = mkVS zeggen_V ;
@@ -246,7 +246,7 @@ queen_N = mkN "koningin" utrum ;
question_N = mkN "vraag" utrum ; question_N = mkN "vraag" utrum ;
radio_N = mkN "radio" utrum ; radio_N = mkN "radio" utrum ;
rain_N = mkN "regen" utrum ; rain_N = mkN "regen" utrum ;
rain_V0 = mkV "regenen" ; rain_V0 = mkV "regen" "regent" "regenen" "regende" "regenden" "geregend" ;
read_V2 = mkV2 lezen_V ; read_V2 = mkV2 lezen_V ;
ready_A = mkA "klaar" ; ready_A = mkA "klaar" ;
reason_N = mkN "reden" utrum ; reason_N = mkN "reden" utrum ;

View File

@@ -485,8 +485,11 @@ oper
-- sein_V = MorphoDut.sein_V ** {lock_V = <>} ; -- sein_V = MorphoDut.sein_V ** {lock_V = <>} ;
-- werden_V = MorphoDut.werden_V ** {lock_V = <>} ; -- werden_V = MorphoDut.werden_V ** {lock_V = <>} ;
-- --
prepV2 : V -> Prep -> V2 ; prepV2 : V -> Prep -> V2 ;
prepV2 v c = lin V2 (v ** {c2 = <c.s,True>}) ; --if it has prep, needed for word order (place of negation) prepV2 v c = lin V2 (v ** {c2 = <c.s,True>}) ; --if it has prep, needed for word order (place of negation)
noprepV2 : V -> V2 ;
noprepV2 v = lin V2 (v ** {c2 = <[],False>}) ;
-- dirV2 v = prepV2 v (mkPrep [] accusative) ; -- dirV2 v = prepV2 v (mkPrep [] accusative) ;
-- datV2 v = prepV2 v (mkPrep [] dative) ; -- datV2 v = prepV2 v (mkPrep [] dative) ;
-- --
@@ -504,23 +507,23 @@ oper
mkV2V = overload { mkV2V = overload {
mkV2V : V -> Prep -> V2V = \v,p -> lin V2V (prepV2 v p ** {isAux = False}) ; mkV2V : V -> Prep -> V2V = \v,p -> lin V2V (prepV2 v p ** {isAux = False}) ;
mkV2V : V -> V2V = \v -> lin V2V (prepV2 v (mkPrep []) ** {isAux = False}) ; mkV2V : V -> V2V = \v -> lin V2V (noprepV2 v ** {isAux = False}) ;
} ; } ;
auxV2V = overload { auxV2V = overload {
auxV2V : V -> Prep -> V2V = \v,p -> lin V2V (prepV2 v p ** {isAux = True}) ; auxV2V : V -> Prep -> V2V = \v,p -> lin V2V (prepV2 v p ** {isAux = True}) ;
auxV2V : V -> V2V = \v -> lin V2V (prepV2 v (mkPrep []) ** {isAux = True}) ; auxV2V : V -> V2V = \v -> lin V2V (noprepV2 v ** {isAux = True}) ;
} ; } ;
mkV2S = overload { mkV2S = overload {
mkV2S : V -> Prep -> V2S = \v,p -> lin V2S (prepV2 v p) ; mkV2S : V -> Prep -> V2S = \v,p -> lin V2S (prepV2 v p) ;
mkV2S : V -> V2S = \v -> lin V2S (prepV2 v (mkPrep [])) ; mkV2S : V -> V2S = \v -> lin V2S (noprepV2 v) ;
} ; } ;
mkV2A = overload { mkV2A = overload {
mkV2A : V -> Prep -> V2A = \v,p -> lin V2A (prepV2 v p) ; mkV2A : V -> Prep -> V2A = \v,p -> lin V2A (prepV2 v p) ;
mkV2A : V -> V2A = \v -> lin V2A (prepV2 v (mkPrep [])) ; mkV2A : V -> V2A = \v -> lin V2A (noprepV2 v) ;
} ; } ;
mkV2Q = overload { mkV2Q = overload {
mkV2Q : V -> Prep -> V2Q = \v,p -> lin V2Q (prepV2 v p) ; mkV2Q : V -> Prep -> V2Q = \v,p -> lin V2Q (prepV2 v p) ;
mkV2Q : V -> V2Q = \v -> lin V2Q (prepV2 v (mkPrep [])) ; mkV2Q : V -> V2Q = \v -> lin V2Q (noprepV2 v) ;
} ; } ;

View File

@@ -388,7 +388,7 @@ param
a = {g = g ; n = n ; p = p} a = {g = g ; n = n ; p = p}
} ; } ;
het_Pron : Pronoun = mkPronoun "'t" "'t" "ze" "hij" "hem" "zijn" "zijne" Neutr Sg P3 ; het_Pron : Pronoun = mkPronoun "het" "het" "ze" "hij" "hem" "zijn" "zijne" Neutr Sg P3 ; -- cunger: 't -> het
-- Complex $CN$s, like adjectives, have strong and weak forms. -- Complex $CN$s, like adjectives, have strong and weak forms.
@@ -475,6 +475,8 @@ param
_ => AAttr _ => AAttr
} ; } ;
param NegPosition = BeforeObjs | AfterObjs | BetweenObjs;
oper VP : Type = { oper VP : Type = {
s : VVerb ; s : VVerb ;
a1 : Polarity => Str ; -- niet a1 : Polarity => Str ; -- niet
@@ -482,15 +484,14 @@ param
n2 : Agr => Str ; -- je vrouw n2 : Agr => Str ; -- je vrouw
a2 : Str ; -- vandaag a2 : Str ; -- vandaag
isAux : Bool ; -- is a double infinitive isAux : Bool ; -- is a double infinitive
negBeforeObj : Bool ; -- ik schoop X niet ; ik houd niet van X ; dat is niet leuk negPos : NegPosition ; -- ik schoop X niet ; ik houd niet van X ; dat is niet leuk
inf : Str * Bool ; -- zeggen (True = non-empty) inf : Str * Bool ; -- zeggen (True = non-empty)
ext : Str -- dat je komt ext : Str -- dat je komt
} ; } ;
predV : VVerb -> VP = predVGen False ; predV : VVerb -> VP = predVGen False AfterObjs;
predVGen : Bool -> NegPosition -> VVerb -> VP = \isAux, negPos, verb -> {
predVGen : Bool -> VVerb -> VP = \isAux, verb -> {
s = verb ; s = verb ;
a1 : Polarity => Str = negation ; a1 : Polarity => Str = negation ;
n0 : Agr => Str = \\a => case verb.vtype of { n0 : Agr => Str = \\a => case verb.vtype of {
@@ -499,8 +500,8 @@ param
} ; } ;
n2 : Agr => Str = \\a => [] ; n2 : Agr => Str = \\a => [] ;
a2 : Str = [] ; a2 : Str = [] ;
isAux = isAux ; ---- isAux = isAux ;
negBeforeObj = False ; negPos = negPos ;
inf : Str * Bool = <[],False> ; inf : Str * Bool = <[],False> ;
ext : Str = [] ext : Str = []
} ; } ;
@@ -512,18 +513,18 @@ param
-- Extending a verb phrase with new constituents. -- Extending a verb phrase with new constituents.
--when we call it with a normal VP, just copy the negBeforeObj field of the vp --when we call it with a normal VP, just copy the negPos field of the vp
insertObj : (Agr => Str) -> VP -> VP = \obj,vp -> insertObjNP False vp.negBeforeObj obj vp; insertObj : (Agr => Str) -> VP -> VP = \obj,vp -> insertObjNP False vp.negPos obj vp;
--this is needed when we call insertObjNP in ComplSlash: VPSlash is a subtype of VP so it works --this is needed when we call insertObjNP in ComplSlash: VPSlash is a subtype of VP so it works
insertObjNP : Bool -> Bool -> (Agr => Str) -> VP -> VP = \isPron,negBeforeObj,obj,vp -> { insertObjNP : Bool -> NegPosition -> (Agr => Str) -> VP -> VP = \isPron,negPos,obj,vp -> {
s = vp.s ; s = vp.s ;
a1 = vp.a1 ; a1 = vp.a1 ;
n0 = \\a => case isPron of {True => obj ! a ; _ => []} ++ vp.n0 ! a ; n0 = \\a => case isPron of {True => obj ! a ; _ => []} ++ vp.n0 ! a ;
n2 = \\a => case isPron of {False => obj ! a ; _ => []} ++ vp.n2 ! a ; n2 = \\a => case isPron of {False => obj ! a ; _ => []} ++ vp.n2 ! a ;
a2 = vp.a2 ; a2 = vp.a2 ;
isAux = vp.isAux ; isAux = vp.isAux ;
negBeforeObj = negBeforeObj ; negPos = negPos ;
inf = vp.inf ; inf = vp.inf ;
ext = vp.ext ext = vp.ext
} ; } ;
@@ -535,7 +536,7 @@ param
n2 = vp.n2 ; n2 = vp.n2 ;
a2 = vp.a2 ; a2 = vp.a2 ;
isAux = vp.isAux ; isAux = vp.isAux ;
negBeforeObj = vp.negBeforeObj ; negPos = vp.negPos ;
inf = vp.inf ; inf = vp.inf ;
ext = vp.ext ext = vp.ext
} ; } ;
@@ -547,7 +548,7 @@ param
n2 = vp.n2 ; n2 = vp.n2 ;
a2 = vp.a2 ++ adv ; a2 = vp.a2 ++ adv ;
isAux = vp.isAux ; isAux = vp.isAux ;
negBeforeObj = vp.negBeforeObj ; negPos = vp.negPos ;
inf = vp.inf ; inf = vp.inf ;
ext = vp.ext ext = vp.ext
} ; } ;
@@ -559,7 +560,7 @@ param
n2 = vp.n2 ; n2 = vp.n2 ;
a2 = vp.a2 ; a2 = vp.a2 ;
isAux = vp.isAux ; isAux = vp.isAux ;
negBeforeObj = vp.negBeforeObj ; negPos = vp.negPos ;
inf = vp.inf ; inf = vp.inf ;
ext = vp.ext ++ ext ext = vp.ext ++ ext
} ; } ;
@@ -571,7 +572,7 @@ param
n2 = vp.n2 ; n2 = vp.n2 ;
a2 = vp.a2 ; a2 = vp.a2 ;
isAux = vp.isAux ; ---- isAux = vp.isAux ; ----
negBeforeObj = vp.negBeforeObj ; negPos = vp.negPos ;
inf = <inf ++ vp.inf.p1, True> ; inf = <inf ++ vp.inf.p1, True> ;
ext = vp.ext ext = vp.ext
} ; } ;
@@ -603,9 +604,10 @@ param
obj0 = vp.n0 ! agr ; obj0 = vp.n0 ! agr ;
obj = vp.n2 ! agr ; obj = vp.n2 ! agr ;
part = vp.s.particle ; part = vp.s.particle ;
compl = case vp.negBeforeObj of { compl = case vp.negPos of {
True => neg ++ obj0 ++ obj ++ part ++ vp.a2 ++ vp.s.prefix ; BeforeObjs => neg ++ obj0 ++ obj ++ part ++ vp.a2 ++ vp.s.prefix ;
_ => obj0 ++ obj ++ neg ++ part ++ vp.a2 ++ vp.s.prefix AfterObjs => obj0 ++ obj ++ neg ++ part ++ vp.a2 ++ vp.s.prefix ;
BetweenObjs => obj0 ++ neg ++ obj ++ part ++ vp.a2 ++ vp.s.prefix
} ; } ;
inf : Str = inf : Str =
case <vp.isAux, vp.inf.p2, a> of { case <vp.isAux, vp.inf.p2, a> of {

View File

@@ -20,11 +20,13 @@ concrete SentenceDut of Sentence = CatDut ** open ResDut, Prelude in {
verb = vp.s.s ! ps.p1 ; verb = vp.s.s ! ps.p1 ;
inf = vp.inf.p1 ; inf = vp.inf.p1 ;
in in
case vp.negBeforeObj of { case vp.negPos of {
True => verb ++ ps.p2 ++ vp.a1 ! pol ++ vp.n0 ! agr ++ BeforeObjs => verb ++ ps.p2 ++ vp.a1 ! pol ++ vp.n0 ! agr ++
vp.n2 ! agr ++ vp.a2 ++ inf ++ vp.ext ; vp.n2 ! agr ++ vp.a2 ++ inf ++ vp.ext ;
_ => verb ++ ps.p2 ++ vp.n0 ! agr ++ vp.n2 ! agr ++ AfterObjs => verb ++ ps.p2 ++ vp.n0 ! agr ++ vp.n2 ! agr ++
vp.a1 ! pol ++ vp.a2 ++ inf ++ vp.ext vp.a1 ! pol ++ vp.a2 ++ inf ++ vp.ext ;
BetweenObjs => verb ++ ps.p2 ++ vp.n0 ! agr ++ vp.a1 ! pol ++ vp.n2 ! agr ++
vp.a2 ++ inf ++ vp.ext
} ; } ;
} ; } ;

View File

@@ -12,13 +12,13 @@ concrete VerbDut of Verb = CatDut ** open Prelude, ResDut in {
insertExtrapos vpi.p3 ( insertExtrapos vpi.p3 (
insertInf vpi.p2 ( insertInf vpi.p2 (
insertObj vpi.p1 ( insertObj vpi.p1 (
predVGen v.isAux (v2v v)))) ; ---- subtyp predVGen v.isAux vp.negPos (v2v v)))) ; ---- subtyp
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 ! APred) (predV v) ; ComplVA v ap = insertObj (\\ _ => ap.s ! APred) (predVGen False BetweenObjs v) ;
SlashV2a v = predV (v2v v) ** {c2 = v.c2} ; SlashV2a v = predV (v2v v) ** {c2 = v.c2} ;
@@ -37,13 +37,13 @@ concrete VerbDut of Verb = CatDut ** open Prelude, ResDut in {
in in
insertExtrapos vpi.p3 ( insertExtrapos vpi.p3 (
insertInf vpi.p2 ( insertInf vpi.p2 (
insertObj vpi.p1 ((predVGen v.isAux v)))) ** {c2 = v.c2} ; insertObj vpi.p1 ((predVGen v.isAux vp.negPos v)))) ** {c2 = v.c2} ;
SlashV2A v ap = SlashV2A v ap =
insertObj (\\_ => ap.s ! APred) (predVv v) ** {c2 = v.c2} ; insertObj (\\_ => ap.s ! APred) (predVGen False BetweenObjs (v2v v)) ** {c2 = v.c2} ;
--vp.c2.p2: if the verb has a preposition or not --vp.c2.p2: if the verb has a preposition or not
ComplSlash vp np = insertObjNP np.isPron vp.c2.p2 (\\_ => appPrep vp.c2.p1 np.s) vp ; ComplSlash vp np = insertObjNP np.isPron (case vp.c2.p2 of {True => BeforeObjs; False => vp.negPos}) (\\_ => appPrep vp.c2.p1 np.s) vp ;
SlashVV v vp = SlashVV v vp =
let let
@@ -52,7 +52,7 @@ concrete VerbDut of Verb = CatDut ** open Prelude, ResDut in {
insertExtrapos vpi.p3 ( insertExtrapos vpi.p3 (
insertInf vpi.p2 ( insertInf vpi.p2 (
insertObj vpi.p1 ( insertObj vpi.p1 (
predVGen v.isAux (v2v v)))) ** {c2 = vp.c2} ; predVGen v.isAux vp.negPos (v2v v)))) ** {c2 = vp.c2} ;
SlashV2VNP v np vp = SlashV2VNP v np vp =
let let
@@ -62,13 +62,13 @@ concrete VerbDut of Verb = CatDut ** open Prelude, ResDut in {
insertInf vpi.p2 ( insertInf vpi.p2 (
insertObj vpi.p1 ( insertObj vpi.p1 (
insertObj (\\_ => appPrep v.c2.p1 np.s) ( insertObj (\\_ => appPrep v.c2.p1 np.s) (
predVGen v.isAux v)))) ** {c2 = v.c2} ; predVGen v.isAux vp.negPos v)))) ** {c2 = v.c2} ;
-- True, because negation comes before copula complement -- BeforeObjs, because negation comes before copula complement
-- "ik ben niet groot" but "ik begrijp hem niet" -- "ik ben niet groot" but "ik begrijp hem niet"
UseComp comp = insertObjNP False True comp.s (predV zijn_V) ; -- agr not used UseComp comp = insertObjNP False BeforeObjs comp.s (predV zijn_V) ; -- agr not used
UseCopula = predV zijn_V ; UseCopula = predV zijn_V;
CompCN cn = {s = \\a => cn.s ! Strong ! NF a.n Nom} ; CompCN cn = {s = \\a => cn.s ! Strong ! NF a.n Nom} ;
CompAP ap = {s = \\_ => ap.s ! APred} ; CompAP ap = {s = \\_ => ap.s ! APred} ;