forked from GitHub/gf-rgl
polarity handling for Fin, e.g. "kukaan ei nuku" as equivalent to "nobody sleeps"
This commit is contained in:
@@ -49,7 +49,7 @@ concrete CatFin of Cat = CommonX ** open ResFin, Prelude in {
|
|||||||
|
|
||||||
CN = {s : NForm => Str} ;
|
CN = {s : NForm => Str} ;
|
||||||
Pron = {s : NPForm => Str ; a : Agr} ;
|
Pron = {s : NPForm => Str ; a : Agr} ;
|
||||||
NP = {s : NPForm => Str ; a : Agr ; isPron : Bool} ;
|
NP = {s : NPForm => Str ; a : Agr ; isPron : Bool ; isNeg : Bool} ;
|
||||||
Det = {
|
Det = {
|
||||||
s1 : Case => Str ; -- minun kolme
|
s1 : Case => Str ; -- minun kolme
|
||||||
s2 : Str ; -- -ni
|
s2 : Str ; -- -ni
|
||||||
@@ -57,12 +57,13 @@ concrete CatFin of Cat = CommonX ** open ResFin, Prelude in {
|
|||||||
n : Number ; -- Pl (agreement feature for verb)
|
n : Number ; -- Pl (agreement feature for verb)
|
||||||
isNum : Bool ; -- True (a numeral is present)
|
isNum : Bool ; -- True (a numeral is present)
|
||||||
isPoss : Bool ; -- True (a possessive suffix is present)
|
isPoss : Bool ; -- True (a possessive suffix is present)
|
||||||
isDef : Bool -- True (verb agrees in Pl, Nom is not Part)
|
isDef : Bool ; -- True (verb agrees in Pl, Nom is not Part)
|
||||||
|
isNeg : Bool -- False (only True for "mikään", "kukaan")
|
||||||
} ;
|
} ;
|
||||||
---- QuantSg, QuantPl = {s1 : Case => Str ; s2 : Str ; isPoss, isDef : Bool} ;
|
---- QuantSg, QuantPl = {s1 : Case => Str ; s2 : Str ; isPoss, isDef : Bool} ;
|
||||||
Ord = {s : NForm => Str} ;
|
Ord = {s : NForm => Str} ;
|
||||||
Predet = {s : Number => NPForm => Str} ;
|
Predet = {s : Number => NPForm => Str} ;
|
||||||
Quant = {s1,sp : Number => Case => Str ; s2 : Str ; isPoss : Bool ; isDef : Bool} ;
|
Quant = {s1,sp : Number => Case => Str ; s2 : Str ; isPoss : Bool ; isDef : Bool ; isNeg : Bool} ;
|
||||||
Card = {s : Number => Case => Str ; n : Number} ;
|
Card = {s : Number => Case => Str ; n : Number} ;
|
||||||
Num = {s : Number => Case => Str ; isNum : Bool ; n : Number} ;
|
Num = {s : Number => Case => Str ; isNum : Bool ; n : Number} ;
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ concrete ConjunctionFin of Conjunction =
|
|||||||
|
|
||||||
ConjNP conj ss = conjunctDistrTable NPForm conj ss ** {
|
ConjNP conj ss = conjunctDistrTable NPForm conj ss ** {
|
||||||
a = conjAgr (Ag conj.n P3) ss.a ; -- P3 is the maximum
|
a = conjAgr (Ag conj.n P3) ss.a ; -- P3 is the maximum
|
||||||
isPron = False
|
isPron = False ; isNeg = ss.isNeg
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
ConjAP conj ss = conjunctDistrTable2 Bool NForm conj ss ;
|
ConjAP conj ss = conjunctDistrTable2 Bool NForm conj ss ;
|
||||||
@@ -28,8 +28,8 @@ concrete ConjunctionFin of Conjunction =
|
|||||||
ConsS = consrSS comma ;
|
ConsS = consrSS comma ;
|
||||||
BaseAdv = twoSS ;
|
BaseAdv = twoSS ;
|
||||||
ConsAdv = consrSS comma ;
|
ConsAdv = consrSS comma ;
|
||||||
BaseNP x y = twoTable NPForm x y ** {a = conjAgr x.a y.a} ;
|
BaseNP x y = twoTable NPForm x y ** {a = conjAgr x.a y.a ; isNeg = orB x.isNeg y.isNeg} ;
|
||||||
ConsNP xs x = consrTable NPForm comma xs x ** {a = conjAgr xs.a x.a} ;
|
ConsNP xs x = consrTable NPForm comma xs x ** {a = conjAgr xs.a x.a ; isNeg = orB xs.isNeg x.isNeg} ;
|
||||||
BaseAP x y = twoTable2 Bool NForm x y ;
|
BaseAP x y = twoTable2 Bool NForm x y ;
|
||||||
ConsAP xs x = consrTable2 Bool NForm comma xs x ;
|
ConsAP xs x = consrTable2 Bool NForm comma xs x ;
|
||||||
BaseRS x y = twoTable Agr x y ** {c = y.c} ;
|
BaseRS x y = twoTable Agr x y ** {c = y.c} ;
|
||||||
@@ -40,7 +40,7 @@ concrete ConjunctionFin of Conjunction =
|
|||||||
lincat
|
lincat
|
||||||
[S] = {s1,s2 : Str} ;
|
[S] = {s1,s2 : Str} ;
|
||||||
[Adv] = {s1,s2 : Str} ;
|
[Adv] = {s1,s2 : Str} ;
|
||||||
[NP] = {s1,s2 : NPForm => Str ; a : Agr} ;
|
[NP] = {s1,s2 : NPForm => Str ; a : Agr ; isNeg : Bool} ;
|
||||||
[AP] = {s1,s2 : Bool => NForm => Str} ;
|
[AP] = {s1,s2 : Bool => NForm => Str} ;
|
||||||
[RS] = {s1,s2 : Agr => Str ; c : NPForm} ;
|
[RS] = {s1,s2 : Agr => Str ; c : NPForm} ;
|
||||||
[CN] = {s1,s2 : NForm => Str} ;
|
[CN] = {s1,s2 : NForm => Str} ;
|
||||||
|
|||||||
@@ -9,8 +9,9 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
|
|||||||
s2 = [] ;
|
s2 = [] ;
|
||||||
isNum = False ;
|
isNum = False ;
|
||||||
isPoss = False ;
|
isPoss = False ;
|
||||||
isDef = True --- "Jussin kolme autoa ovat" ; thus "...on" is missing
|
isDef = True ; --- "Jussin kolme autoa ovat" ; thus "...on" is missing
|
||||||
} ;
|
isNeg = False
|
||||||
|
} ;
|
||||||
|
|
||||||
GenCN n1 n2 = {s = \\nf => n1.s ! NPCase Gen ++ n2.s ! nf} ;
|
GenCN n1 n2 = {s = \\nf => n1.s ! NPCase Gen ++ n2.s ! nf} ;
|
||||||
|
|
||||||
@@ -118,7 +119,7 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
|
|||||||
c => acn.s ! c
|
c => acn.s ! c
|
||||||
} ;
|
} ;
|
||||||
a = acn.a ;
|
a = acn.a ;
|
||||||
isPron = False
|
isPron = False ; isNeg = False
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
vai_Conj = {s1 = [] ; s2 = "vai" ; n = Sg} ;
|
vai_Conj = {s1 = [] ; s2 = "vai" ; n = Sg} ;
|
||||||
@@ -153,7 +154,8 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
|
|||||||
s2 = BIND ++ possSuffix p.a ;
|
s2 = BIND ++ possSuffix p.a ;
|
||||||
isNum = False ;
|
isNum = False ;
|
||||||
isPoss = True ;
|
isPoss = True ;
|
||||||
isDef = True --- "minun kolme autoani ovat" ; thus "...on" is missing
|
isDef = True ; --- "minun kolme autoani ovat" ; thus "...on" is missing
|
||||||
|
isNeg = False
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
|
|||||||
@@ -43,7 +43,8 @@ concrete IdiomFin of Idiom = CatFin **
|
|||||||
adv = vp.adv ;
|
adv = vp.adv ;
|
||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
sc = vp.sc ;
|
sc = vp.sc ;
|
||||||
qp = vp.qp
|
qp = vp.qp ;
|
||||||
|
isNeg = vp.isNeg
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
ProgrVP vp =
|
ProgrVP vp =
|
||||||
@@ -56,7 +57,7 @@ concrete IdiomFin of Idiom = CatFin **
|
|||||||
adv = vp.adv ;
|
adv = vp.adv ;
|
||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
sc = vp.sc ;
|
sc = vp.sc ;
|
||||||
qp = vp.qp
|
qp = vp.qp ; isNeg = vp.isNeg
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- This gives "otetaan oluet" instead of "ottakaamme oluet".
|
-- This gives "otetaan oluet" instead of "ottakaamme oluet".
|
||||||
|
|||||||
@@ -843,13 +843,15 @@ caseTable : Number -> CommonNoun -> Case => Str = \n,cn ->
|
|||||||
n : Number ; -- Pl (agreement feature for verb)
|
n : Number ; -- Pl (agreement feature for verb)
|
||||||
isNum : Bool ; -- True (a numeral is present)
|
isNum : Bool ; -- True (a numeral is present)
|
||||||
isPoss : Bool ; -- True (a possessive suffix is present)
|
isPoss : Bool ; -- True (a possessive suffix is present)
|
||||||
isDef : Bool -- True (verb agrees in Pl, Nom is not Part)
|
isDef : Bool ; -- True (verb agrees in Pl, Nom is not Part)
|
||||||
|
isNeg : Bool
|
||||||
} = \n, noun -> heavyDet {
|
} = \n, noun -> heavyDet {
|
||||||
s1 = \\c => noun.s ! NCase n c ;
|
s1 = \\c => noun.s ! NCase n c ;
|
||||||
s2 = [] ;
|
s2 = [] ;
|
||||||
n = n ;
|
n = n ;
|
||||||
isNum, isPoss = False ;
|
isNum, isPoss = False ;
|
||||||
isDef = True --- does this hold for all new dets?
|
isDef = True ; --- does this hold for all new dets?
|
||||||
|
isNeg = False
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Here we define personal and relative pronouns.
|
-- Here we define personal and relative pronouns.
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, Prelude in {
|
|||||||
<False,True> => Sg ; -- kolme kytkintä on
|
<False,True> => Sg ; -- kolme kytkintä on
|
||||||
_ => det.n
|
_ => det.n
|
||||||
}) ;
|
}) ;
|
||||||
isPron = False
|
isPron = False ; isNeg = det.isNeg
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
DetNP det =
|
DetNP det =
|
||||||
@@ -54,32 +54,35 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, Prelude in {
|
|||||||
False => Sg ; -- autoja menee; kolme autoa menee
|
False => Sg ; -- autoja menee; kolme autoa menee
|
||||||
_ => det.n
|
_ => det.n
|
||||||
}) ;
|
}) ;
|
||||||
isPron = False
|
isPron = False ; isNeg = det.isNeg
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
UsePN pn = {
|
UsePN pn = {
|
||||||
s = \\c => pn.s ! npform2case Sg c ;
|
s = \\c => pn.s ! npform2case Sg c ;
|
||||||
a = agrP3 Sg ;
|
a = agrP3 Sg ;
|
||||||
isPron = False
|
isPron = False ; isNeg = False
|
||||||
} ;
|
} ;
|
||||||
UsePron p = p ** {isPron = True} ;
|
UsePron p = p ** {isPron = True ; isNeg = False} ;
|
||||||
|
|
||||||
PredetNP pred np = {
|
PredetNP pred np = {
|
||||||
s = \\c => pred.s ! complNumAgr np.a ! c ++ np.s ! c ;
|
s = \\c => pred.s ! complNumAgr np.a ! c ++ np.s ! c ;
|
||||||
a = np.a ;
|
a = np.a ;
|
||||||
isPron = np.isPron -- kaikki minun - ni
|
isPron = np.isPron ; -- kaikki minun - ni
|
||||||
|
isNeg = np.isNeg
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
PPartNP np v2 = {
|
PPartNP np v2 = {
|
||||||
s = \\c => np.s ! c ++ v2.s ! PastPartPass (AN (NCase (complNumAgr np.a) Ess)) ;
|
s = \\c => np.s ! c ++ v2.s ! PastPartPass (AN (NCase (complNumAgr np.a) Ess)) ;
|
||||||
a = np.a ;
|
a = np.a ;
|
||||||
isPron = np.isPron -- minun täällä - ni
|
isPron = np.isPron ; -- minun täällä - ni
|
||||||
|
isNeg = np.isNeg
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
AdvNP np adv = {
|
AdvNP np adv = {
|
||||||
s = \\c => np.s ! c ++ adv.s ;
|
s = \\c => np.s ! c ++ adv.s ;
|
||||||
a = np.a ;
|
a = np.a ;
|
||||||
isPron = np.isPron -- minun täällä - ni
|
isPron = np.isPron ; -- minun täällä - ni
|
||||||
|
isNeg = np.isNeg
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
DetQuantOrd quant num ord = {
|
DetQuantOrd quant num ord = {
|
||||||
@@ -89,7 +92,8 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, Prelude in {
|
|||||||
n = num.n ;
|
n = num.n ;
|
||||||
isNum = num.isNum ;
|
isNum = num.isNum ;
|
||||||
isPoss = quant.isPoss ;
|
isPoss = quant.isPoss ;
|
||||||
isDef = quant.isDef
|
isDef = quant.isDef ;
|
||||||
|
isNeg = quant.isNeg
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
DetQuant quant num = {
|
DetQuant quant num = {
|
||||||
@@ -99,7 +103,7 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, Prelude in {
|
|||||||
n = num.n ;
|
n = num.n ;
|
||||||
isNum = num.isNum ; -- case num.n of {Sg => False ; _ => True} ;
|
isNum = num.isNum ; -- case num.n of {Sg => False ; _ => True} ;
|
||||||
isPoss = quant.isPoss ;
|
isPoss = quant.isPoss ;
|
||||||
isDef = quant.isDef
|
isDef = quant.isDef ; isNeg = quant.isNeg
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
PossPron p = {
|
PossPron p = {
|
||||||
@@ -107,7 +111,8 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, Prelude in {
|
|||||||
s2 = BIND ++ possSuffix p.a ;
|
s2 = BIND ++ possSuffix p.a ;
|
||||||
isNum = False ;
|
isNum = False ;
|
||||||
isPoss = True ;
|
isPoss = True ;
|
||||||
isDef = True --- "minun kolme autoani ovat" ; thus "...on" is missing
|
isDef = True ; --- "minun kolme autoani ovat" ; thus "...on" is missing
|
||||||
|
isNeg = False
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
NumSg = {s = \\_,_ => [] ; isNum = False ; n = Sg} ;
|
NumSg = {s = \\_,_ => [] ; isNum = False ; n = Sg} ;
|
||||||
@@ -138,7 +143,7 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, Prelude in {
|
|||||||
s1 = \\_,_ => [] ;
|
s1 = \\_,_ => [] ;
|
||||||
sp = table {Sg => pronSe.s ; Pl => pronNe.s} ;
|
sp = table {Sg => pronSe.s ; Pl => pronNe.s} ;
|
||||||
s2 = [] ;
|
s2 = [] ;
|
||||||
isNum,isPoss = False ;
|
isNum,isPoss,isNeg = False ;
|
||||||
isDef = True -- autot ovat
|
isDef = True -- autot ovat
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -148,7 +153,7 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, Prelude in {
|
|||||||
(nhn (mkSubst "ä" "yksi" "yhde" "yhte" "yhtä" "yhteen" "yksi" "yksi"
|
(nhn (mkSubst "ä" "yksi" "yhde" "yhte" "yhtä" "yhteen" "yksi" "yksi"
|
||||||
"yksien" "yksiä" "yksiin")).s ! NCase n c ;
|
"yksien" "yksiä" "yksiin")).s ! NCase n c ;
|
||||||
s2 = [] ;
|
s2 = [] ;
|
||||||
isNum,isPoss,isDef = False -- autoja on
|
isNum,isPoss,isDef,isNeg = False -- autoja on
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
MassNP cn =
|
MassNP cn =
|
||||||
@@ -159,7 +164,7 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, Prelude in {
|
|||||||
s = \\c => let k = npform2case n c in
|
s = \\c => let k = npform2case n c in
|
||||||
cn.s ! ncase k ;
|
cn.s ! ncase k ;
|
||||||
a = agrP3 Sg ;
|
a = agrP3 Sg ;
|
||||||
isPron = False
|
isPron = False ; isNeg = False
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
UseN n = n ;
|
UseN n = n ;
|
||||||
@@ -198,7 +203,8 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, Prelude in {
|
|||||||
RelNP np rs = {
|
RelNP np rs = {
|
||||||
s = \\c => np.s ! c ++ "," ++ rs.s ! np.a ;
|
s = \\c => np.s ! c ++ "," ++ rs.s ! np.a ;
|
||||||
a = np.a ;
|
a = np.a ;
|
||||||
isPron = np.isPron ---- correct ?
|
isPron = np.isPron ; ---- correct ?
|
||||||
|
isNeg = np.isNeg
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
AdvCN cn ad = {s = \\nf => cn.s ! nf ++ ad.s} ;
|
AdvCN cn ad = {s = \\nf => cn.s ! nf ++ ad.s} ;
|
||||||
|
|||||||
@@ -188,6 +188,7 @@ oper
|
|||||||
adv : Polarity => Str ; -- ainakin/ainakaan
|
adv : Polarity => Str ; -- ainakin/ainakaan
|
||||||
ext : Str ;
|
ext : Str ;
|
||||||
sc : NPForm ;
|
sc : NPForm ;
|
||||||
|
isNeg : Bool ; -- True if some complement is negative
|
||||||
qp : Bool -- True = back vowel
|
qp : Bool -- True = back vowel
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -252,7 +253,8 @@ oper
|
|||||||
adv = \\_ => [] ;
|
adv = \\_ => [] ;
|
||||||
ext = [] ;
|
ext = [] ;
|
||||||
sc = verb.sc ;
|
sc = verb.sc ;
|
||||||
qp = verb.qp
|
qp = verb.qp ;
|
||||||
|
isNeg = False
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
insertObj : (Bool => Polarity => Agr => Str) -> VP -> VP = \obj,vp -> {
|
insertObj : (Bool => Polarity => Agr => Str) -> VP -> VP = \obj,vp -> {
|
||||||
@@ -261,16 +263,18 @@ oper
|
|||||||
adv = vp.adv ;
|
adv = vp.adv ;
|
||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
sc = vp.sc ;
|
sc = vp.sc ;
|
||||||
qp = vp.qp
|
qp = vp.qp ;
|
||||||
|
isNeg = vp.isNeg
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
insertObjPre : (Bool => Polarity => Agr => Str) -> VP -> VP = \obj,vp -> {
|
insertObjPre : Bool -> (Bool => Polarity => Agr => Str) -> VP -> VP = \isNeg, obj,vp -> {
|
||||||
s = vp.s ;
|
s = vp.s ;
|
||||||
s2 = \\fin,b,a => obj ! fin ! b ! a ++ vp.s2 ! fin ! b ! a ;
|
s2 = \\fin,b,a => obj ! fin ! b ! a ++ vp.s2 ! fin ! b ! a ;
|
||||||
adv = vp.adv ;
|
adv = vp.adv ;
|
||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
sc = vp.sc ;
|
sc = vp.sc ;
|
||||||
qp = vp.qp
|
qp = vp.qp ;
|
||||||
|
isNeg = orB vp.isNeg isNeg
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
insertAdv : (Polarity => Str) -> VP -> VP = \adv,vp -> {
|
insertAdv : (Polarity => Str) -> VP -> VP = \adv,vp -> {
|
||||||
@@ -279,7 +283,8 @@ oper
|
|||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
adv = \\b => vp.adv ! b ++ adv ! b ;
|
adv = \\b => vp.adv ! b ++ adv ! b ;
|
||||||
sc = vp.sc ;
|
sc = vp.sc ;
|
||||||
qp = vp.qp
|
qp = vp.qp ;
|
||||||
|
isNeg = vp.isNeg --- missään
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
insertExtrapos : Str -> VP -> VP = \obj,vp -> {
|
insertExtrapos : Str -> VP -> VP = \obj,vp -> {
|
||||||
@@ -288,7 +293,8 @@ oper
|
|||||||
ext = vp.ext ++ obj ;
|
ext = vp.ext ++ obj ;
|
||||||
adv = vp.adv ;
|
adv = vp.adv ;
|
||||||
sc = vp.sc ;
|
sc = vp.sc ;
|
||||||
qp = vp.qp
|
qp = vp.qp ;
|
||||||
|
isNeg = vp.isNeg
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- For $Sentence$.
|
-- For $Sentence$.
|
||||||
@@ -301,6 +307,21 @@ oper
|
|||||||
s : Tense => Anteriority => Polarity => {subj,fin,inf,compl,adv,ext : Str ; qp : Bool}
|
s : Tense => Anteriority => Polarity => {subj,fin,inf,compl,adv,ext : Str ; qp : Bool}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
mkClausePol : Bool -> (Polarity -> Str) -> Agr -> VP -> Clause =
|
||||||
|
\isNeg,sub,agr,vp -> {
|
||||||
|
s = \\t,a,b =>
|
||||||
|
let
|
||||||
|
pol = case isNeg of {
|
||||||
|
True => Neg ;
|
||||||
|
_ => b
|
||||||
|
} ;
|
||||||
|
c = (mkClausePlus sub agr vp).s ! t ! a ! pol
|
||||||
|
in
|
||||||
|
table {
|
||||||
|
SDecl => c.subj ++ c.fin ++ c.inf ++ c.compl ++ c.adv ++ c.ext ;
|
||||||
|
SQuest => c.fin ++ BIND ++ questPart c.qp ++ c.subj ++ c.inf ++ c.compl ++ c.adv ++ c.ext
|
||||||
|
}
|
||||||
|
} ;
|
||||||
mkClause : (Polarity -> Str) -> Agr -> VP -> Clause =
|
mkClause : (Polarity -> Str) -> Agr -> VP -> Clause =
|
||||||
\sub,agr,vp -> {
|
\sub,agr,vp -> {
|
||||||
s = \\t,a,b => let c = (mkClausePlus sub agr vp).s ! t ! a ! b in
|
s = \\t,a,b => let c = (mkClausePlus sub agr vp).s ! t ! a ! b in
|
||||||
@@ -696,12 +717,13 @@ oper
|
|||||||
n : Number ;
|
n : Number ;
|
||||||
isNum : Bool ;
|
isNum : Bool ;
|
||||||
isPoss : Bool ;
|
isPoss : Bool ;
|
||||||
isDef : Bool
|
isDef : Bool ;
|
||||||
|
isNeg : Bool
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
heavyQuant : PQuant -> PQuant ** {sp : Number => Case => Str} = \d ->
|
heavyQuant : PQuant -> PQuant ** {sp : Number => Case => Str} = \d ->
|
||||||
d ** {sp = d.s1} ;
|
d ** {sp = d.s1} ;
|
||||||
PQuant : Type =
|
PQuant : Type =
|
||||||
{s1 : Number => Case => Str ; s2 : Str ; isPoss : Bool ; isDef : Bool} ;
|
{s1 : Number => Case => Str ; s2 : Str ; isPoss : Bool ; isDef : Bool ; isNeg : Bool} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ concrete SentenceFin of Sentence = CatFin ** open Prelude, ResFin in {
|
|||||||
|
|
||||||
lin
|
lin
|
||||||
|
|
||||||
PredVP np vp = mkClause (subjForm np vp.sc) np.a vp ;
|
PredVP np vp = mkClausePol (orB np.isNeg vp.isNeg) (subjForm np vp.sc) np.a vp ;
|
||||||
|
|
||||||
PredSCVP sc vp = mkClause (\_ -> sc.s) (agrP3 Sg) vp ;
|
PredSCVP sc vp = mkClause (\_ -> sc.s) (agrP3 Sg) vp ;
|
||||||
|
|
||||||
|
|||||||
@@ -79,22 +79,22 @@ concrete StructuralFin of Structural = CatFin **
|
|||||||
somebody_NP = {
|
somebody_NP = {
|
||||||
s = \\c => jokuPron ! Sg ! npform2case Sg c ;
|
s = \\c => jokuPron ! Sg ! npform2case Sg c ;
|
||||||
a = agrP3 Sg ;
|
a = agrP3 Sg ;
|
||||||
isPron = False
|
isPron = False ; isNeg = False
|
||||||
} ;
|
} ;
|
||||||
someSg_Det = heavyDet {
|
someSg_Det = heavyDet {
|
||||||
s1 = jokuPron ! Sg ;
|
s1 = jokuPron ! Sg ;
|
||||||
s2 = [] ;
|
s2 = [] ;
|
||||||
isNum,isPoss = False ; isDef = True ; n = Sg
|
isNum,isPoss = False ; isDef = True ; isNeg = False ; n = Sg
|
||||||
} ;
|
} ;
|
||||||
somePl_Det = heavyDet {
|
somePl_Det = heavyDet {
|
||||||
s1 = jokuPron ! Pl ;
|
s1 = jokuPron ! Pl ;
|
||||||
s2 = [] ; isNum,isPoss = False ; isDef = True ;
|
s2 = [] ; isNum,isPoss = False ; isNeg = False ; isDef = True ;
|
||||||
n = Pl
|
n = Pl ; isNeg = False
|
||||||
} ;
|
} ;
|
||||||
something_NP = {
|
something_NP = {
|
||||||
s = \\c => jokinPron ! Sg ! npform2case Sg c ;
|
s = \\c => jokinPron ! Sg ! npform2case Sg c ;
|
||||||
a = agrP3 Sg ;
|
a = agrP3 Sg ;
|
||||||
isPron = False
|
isPron = False ; isNeg = False ; isNeg = False
|
||||||
} ;
|
} ;
|
||||||
somewhere_Adv = ss "jossain" ;
|
somewhere_Adv = ss "jossain" ;
|
||||||
that_Quant = heavyQuant {
|
that_Quant = heavyQuant {
|
||||||
@@ -106,7 +106,7 @@ concrete StructuralFin of Structural = CatFin **
|
|||||||
c => (mkPronoun "nuo" "noiden" "noita" "noina" "noihin" Sg P3).s ! NPCase c
|
c => (mkPronoun "nuo" "noiden" "noita" "noina" "noihin" Sg P3).s ! NPCase c
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
s2 = [] ; isNum,isPoss = False ; isDef = True ;
|
s2 = [] ; isNum,isPoss = False ; isDef = True ; isNeg = False
|
||||||
} ;
|
} ;
|
||||||
that_Subj = ss "että" ;
|
that_Subj = ss "että" ;
|
||||||
there_Adv = ss "siellä" ; --- tuolla
|
there_Adv = ss "siellä" ; --- tuolla
|
||||||
@@ -123,7 +123,7 @@ concrete StructuralFin of Structural = CatFin **
|
|||||||
c => (mkPronoun "nämä" "näiden" "näitä" "näinä" "näihin" Sg P3).s ! NPCase c
|
c => (mkPronoun "nämä" "näiden" "näitä" "näinä" "näihin" Sg P3).s ! NPCase c
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
s2 = [] ; isNum,isPoss = False ; isDef = True ;
|
s2 = [] ; isNum,isPoss = False ; isDef = True ; isNeg = False
|
||||||
} ;
|
} ;
|
||||||
through_Prep = postGenPrep "kautta" ;
|
through_Prep = postGenPrep "kautta" ;
|
||||||
too_AdA = ss "liian" ;
|
too_AdA = ss "liian" ;
|
||||||
@@ -273,7 +273,7 @@ oper
|
|||||||
makeNP noun num = {
|
makeNP noun num = {
|
||||||
s = \\c => noun.s ! NCase num (npform2case num c) ;
|
s = \\c => noun.s ! NCase num (npform2case num c) ;
|
||||||
a = agrP3 num ;
|
a = agrP3 num ;
|
||||||
isPron = False ;
|
isPron, isNeg = False ;
|
||||||
lock_NP = <>
|
lock_NP = <>
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -281,21 +281,21 @@ lin
|
|||||||
not_Predet = {s = \\_,_ => "ei"} ;
|
not_Predet = {s = \\_,_ => "ei"} ;
|
||||||
|
|
||||||
no_Quant = heavyQuant {
|
no_Quant = heavyQuant {
|
||||||
s1 = \\n,c => mikaanPron ! n ! c ; --- requires negative or question polarity
|
s1 = \\n,c => mikaanPron ! n ! c ; -- requires negative or question polarity
|
||||||
s2 = [] ; isNum,isPoss = False ; isDef = True ;
|
s2 = [] ; isNum,isPoss = False ; isDef = True ; isNeg = True
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
if_then_Conj = {s1 = "jos" ; s2 = "niin" ; n = Sg} ;
|
if_then_Conj = {s1 = "jos" ; s2 = "niin" ; n = Sg} ;
|
||||||
nobody_NP = {
|
nobody_NP = {
|
||||||
s = \\c => kukaanPron ! Sg ! npform2case Sg c ; --- requires negative or question polarity
|
s = \\c => kukaanPron ! Sg ! npform2case Sg c ; -- requires negative or question polarity
|
||||||
a = agrP3 Sg ;
|
a = agrP3 Sg ;
|
||||||
isPron = False
|
isPron = False ; isNeg = True
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
nothing_NP = {
|
nothing_NP = {
|
||||||
s = \\c => mikaanPron ! Sg ! npform2case Sg c ; --- requires negative or question polarity
|
s = \\c => mikaanPron ! Sg ! npform2case Sg c ; --- requires negative or question polarity
|
||||||
a = agrP3 Sg ;
|
a = agrP3 Sg ;
|
||||||
isPron = False
|
isPron = False ; isNeg = True
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
at_least_AdN = ss "vähintään" ;
|
at_least_AdN = ss "vähintään" ;
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ concrete VerbFin of Verb = CatFin ** open Prelude, ResFin in {
|
|||||||
ap.s ! False ! (NCase Sg (npform2case Sg v.c3.c))) ----agr to obj
|
ap.s ! False ! (NCase Sg (npform2case Sg v.c3.c))) ----agr to obj
|
||||||
(predV v) ** {c2 = v.c2} ;
|
(predV v) ** {c2 = v.c2} ;
|
||||||
|
|
||||||
ComplSlash vp np = insertObjPre (\\fin,b,_ => appCompl fin b vp.c2 np) vp ;
|
ComplSlash vp np = insertObjPre np.isNeg (\\fin,b,_ => appCompl fin b vp.c2 np) vp ;
|
||||||
|
|
||||||
UseComp comp =
|
UseComp comp =
|
||||||
insertObj (\\_,_ => comp.s) (predV (verbOlla ** {sc = NPCase Nom ; qp = True})) ;
|
insertObj (\\_,_ => comp.s) (predV (verbOlla ** {sc = NPCase Nom ; qp = True})) ;
|
||||||
@@ -68,7 +68,7 @@ concrete VerbFin of Verb = CatFin ** open Prelude, ResFin in {
|
|||||||
) ** {c2 = vp.c2} ; ---- correct ??
|
) ** {c2 = vp.c2} ; ---- correct ??
|
||||||
|
|
||||||
SlashV2VNP v np vp =
|
SlashV2VNP v np vp =
|
||||||
insertObjPre
|
insertObjPre np.isNeg
|
||||||
(\\fin,b,a => appCompl True b v.c2 np ++ ---- fin -> stack overflow
|
(\\fin,b,a => appCompl True b v.c2 np ++ ---- fin -> stack overflow
|
||||||
infVP v.sc b a vp v.vi)
|
infVP v.sc b a vp v.vi)
|
||||||
(predV v) ** {c2 = vp.c2} ;
|
(predV v) ** {c2 = vp.c2} ;
|
||||||
@@ -77,7 +77,7 @@ concrete VerbFin of Verb = CatFin ** open Prelude, ResFin in {
|
|||||||
|
|
||||||
AdVVP adv vp = insertAdv (\\_ => adv.s) vp ;
|
AdVVP adv vp = insertAdv (\\_ => adv.s) vp ;
|
||||||
|
|
||||||
ReflVP v = insertObjPre (\\fin,b,agr => appCompl fin b v.c2 (reflPron agr)) v ;
|
ReflVP v = insertObjPre False (\\fin,b,agr => appCompl fin b v.c2 (reflPron agr)) v ;
|
||||||
|
|
||||||
PassV2 v = let vp = predV v in {
|
PassV2 v = let vp = predV v in {
|
||||||
s = \\_ => vp.s ! VIPass ;
|
s = \\_ => vp.s ! VIPass ;
|
||||||
@@ -85,6 +85,7 @@ concrete VerbFin of Verb = CatFin ** open Prelude, ResFin in {
|
|||||||
adv = \\_ => [] ;
|
adv = \\_ => [] ;
|
||||||
ext = [] ;
|
ext = [] ;
|
||||||
qp = v.qp ;
|
qp = v.qp ;
|
||||||
|
isNeg = False ;
|
||||||
sc = v.c2.c -- minut valitaan ; minua rakastetaan ; minulle kuiskataan
|
sc = v.c2.c -- minut valitaan ; minua rakastetaan ; minulle kuiskataan
|
||||||
} ; ---- talon valitaan: should be marked like inf.
|
} ; ---- talon valitaan: should be marked like inf.
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ incomplete concrete ConjunctionRomance of Conjunction =
|
|||||||
|
|
||||||
ConjNP conj ss = heavyNP (conjunctDistrTable Case conj ss ** {
|
ConjNP conj ss = heavyNP (conjunctDistrTable Case conj ss ** {
|
||||||
a = conjAgr (Ag Masc conj.n P3) ss.a ;
|
a = conjAgr (Ag Masc conj.n P3) ss.a ;
|
||||||
hasClit = False
|
hasClit = False ; isNeg = ss.isNeg
|
||||||
}) ;
|
}) ;
|
||||||
ConjAP conj ss = conjunctDistrTable AForm conj ss ** {
|
ConjAP conj ss = conjunctDistrTable AForm conj ss ** {
|
||||||
isPre = ss.isPre
|
isPre = ss.isPre
|
||||||
@@ -33,12 +33,12 @@ incomplete concrete ConjunctionRomance of Conjunction =
|
|||||||
BaseNP x y = {
|
BaseNP x y = {
|
||||||
s1 = \\c => (x.s ! c).ton ;
|
s1 = \\c => (x.s ! c).ton ;
|
||||||
s2 = \\c => (y.s ! conjunctCase c).ton ; ----e (conjunctCase c) ;
|
s2 = \\c => (y.s ! conjunctCase c).ton ; ----e (conjunctCase c) ;
|
||||||
a = conjAgr x.a y.a
|
a = conjAgr x.a y.a ; isNeg = orB x.isNeg y.isNeg
|
||||||
} ;
|
} ;
|
||||||
ConsNP x xs = {
|
ConsNP x xs = {
|
||||||
s1 = \\c => (x.s ! c).ton ++ comma ++ xs.s1 ! conjunctCase c ; ----e (conjunctCase c) ;
|
s1 = \\c => (x.s ! c).ton ++ comma ++ xs.s1 ! conjunctCase c ; ----e (conjunctCase c) ;
|
||||||
s2 = \\c => xs.s2 ! c ; ----e (conjunctCase c) ;
|
s2 = \\c => xs.s2 ! c ; ----e (conjunctCase c) ;
|
||||||
a = conjAgr x.a xs.a
|
a = conjAgr x.a xs.a ; isNeg = orB x.isNeg xs.isNeg
|
||||||
} ;
|
} ;
|
||||||
BaseAP x y = twoTable AForm x y ** {isPre = andB x.isPre y.isPre} ;
|
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} ;
|
ConsAP xs x = consrTable AForm comma xs x ** {isPre = andB xs.isPre x.isPre} ;
|
||||||
@@ -53,7 +53,7 @@ incomplete concrete ConjunctionRomance of Conjunction =
|
|||||||
[S] = {s1,s2 : Mood => Str} ;
|
[S] = {s1,s2 : Mood => Str} ;
|
||||||
[Adv] = {s1,s2 : Str} ;
|
[Adv] = {s1,s2 : Str} ;
|
||||||
[IAdv] = {s1,s2 : Str} ;
|
[IAdv] = {s1,s2 : Str} ;
|
||||||
[NP] = {s1,s2 : Case => Str ; a : Agr} ;
|
[NP] = {s1,s2 : Case => Str ; a : Agr ; isNeg : Bool} ;
|
||||||
[AP] = {s1,s2 : AForm => Str ; isPre : Bool} ;
|
[AP] = {s1,s2 : AForm => Str ; isPre : Bool} ;
|
||||||
[RS] = {s1,s2 : Mood => Agr => Str ; c : Case} ;
|
[RS] = {s1,s2 : Mood => Agr => Str ; c : Case} ;
|
||||||
[CN] = {s1,s2 : Number => Str ; g : Gender} ;
|
[CN] = {s1,s2 : Number => Str ; g : Gender} ;
|
||||||
|
|||||||
Reference in New Issue
Block a user