more general discourse particles in Finnish

This commit is contained in:
aarne
2011-02-09 16:42:15 +00:00
parent c2d382746e
commit 0bc1fbccf5
10 changed files with 164 additions and 94 deletions

View File

@@ -9,16 +9,17 @@ abstract Discourse =
flags startcat = S ;
cat
Clause ; -- clause with subject, verb, object
Part ; -- discource particle
Marker ; -- discourse marker
fun
ClauseS : Part -> Temp -> Pol -> Clause -> S ; -- Jussihan juo nyt maitoa
SubjKinS : Part -> Temp -> Pol -> Clause -> S ; -- Jussikinhan juo nyt maitoa
VerbKinS : Part -> Temp -> Pol -> Clause -> S ; -- Jussihan juokin nyt maitoa
AdvKinS : Part -> Temp -> Pol -> Adv -> Clause -> S ; -- Jussihan juo nytkin maitoa
ObjKinS : Part -> Temp -> Pol -> Clause -> S ; -- Jussihan juo nyt maitoakin
ClauseS : Marker -> Temp -> Pol -> NP -> VP -> S ; -- Jussihan juo maitoa nyt
FocSubjS : Marker -> Temp -> Pol -> NP -> VP -> S ; -- Jussikinhan juo maitoa nyt
FocVerbS : Marker -> Temp -> Pol -> NP -> VP -> S ; -- Jussihan juokin maitoa nyt
FocObjS : Marker -> Temp -> Pol -> NP -> VPSlash -> NP -> S ; -- Jussihan juo maitoakin nyt
FocAdvS : Marker -> Temp -> Pol -> NP -> VP -> Adv -> S ; -- Jussihan juo maitoa nytkin
{-
PreAdvS : Part -> Temp -> Pol -> Adv -> Clause -> S ; -- nythän Jussi juo maitoa
PreAdvKinS : Part -> Temp -> Pol -> Adv -> Clause -> S ; -- nytkinhän Jussi juo maitoa
PreAdvSubjKinS : Part -> Temp -> Pol -> Adv -> Clause -> S ; -- nythän Jussikin juo maitoa
@@ -29,14 +30,12 @@ fun
PreObjSubjKinS : Part -> Temp -> Pol -> Clause -> S ; -- maitoahan Jussikin juo nyt
PreObjVerbKinS : Part -> Temp -> Pol -> Clause -> S ; -- maitoahan Jussi juokin nyt
PreVerbS : Part -> Temp -> Pol -> Clause -> S ; -- juohan Jussi nyt maitoa
PreVerbSubKinS : Part -> Temp -> Pol -> Clause -> S ; -- juohan Jussikin nyt maitoa
PreVerbS : Part -> Temp -> Pol -> Clause -> S ; -- juohan Jussi maitoa nyt
PreVerbSubKinS : Part -> Temp -> Pol -> Clause -> S ; -- juohan Jussikin maitoa nyt
PreVerbAdvKinS : Part -> Temp -> Pol -> Adv -> Clause -> S ; -- juohan Jussi nytkin maitoa
PreVerbObjKinS : Part -> Temp -> Pol -> NP -> Clause -> S ; -- juohan Jussi nyt maitoakin
PreVerbObjKinS : Part -> Temp -> Pol -> NP -> Clause -> S ; -- juohan Jussi maitoa nytkin
-}
PredClause : NP -> VP -> Clause ;
noPart, han_Part, pas_Part : Part ;
neutralMarker, remindMarker, contrastMarker : Marker ;
}

View File

@@ -2,49 +2,29 @@
concrete DiscourseFin of Discourse =
LexiconFin,
NounFin, VerbFin - [SlashV2VNP,SlashVV],
NounFin, VerbFin - [SlashV2VNP,SlashVV, Slash2V3, Slash3V3],
AdjectiveFin, AdverbFin,
StructuralFin - [nobody_NP,nothing_NP],
TenseX
** open SyntaxFin, (P = ParadigmsFin), (R = ParamX), (E = ExtraFin), Prelude in {
lincat
Clause = {subj : NP ; vp : VP} ;
OClause = {subj : NP ; v : V2 ; obj : NP} ;
Part = Adv ;
Marker = E.Part ;
lin
ClauseS part temp pol cl =
mkS temp pol (mkCl (mkNP cl.subj part) cl.vp) ;
SubjKinS part temp pol cl =
mkS temp pol (mkCl (mkNP (mkNP cl.subj (kin.s ! pol.p)) part) cl.vp) ;
VerbKinS part temp pol cl =
mkS temp pol (mkCl (mkNP cl.subj part) (mkVP cl.vp (kin.s ! pol.p))) ;
AdvKinS part temp pol adv cl =
mkS temp pol (mkCl (mkNP cl.subj part) (mkVP (mkVP cl.vp adv) (kin.s ! pol.p))) ;
ClauseS marker temp pol np vp =
E.S_SVO marker temp pol (E.PredClPlus np vp) ;
FocSubjS marker temp pol np vp =
E.S_SVO marker temp pol (E.PredClPlusFocSubj np vp) ;
FocVerbS marker temp pol np vp =
E.S_SVO marker temp pol (E.PredClPlusFocVerb np vp) ;
FocObjS marker temp pol np vp obj =
E.S_SVO marker temp pol (E.PredClPlusFocObj np vp obj) ;
FocAdvS marker temp pol np vp adv =
E.S_SVO marker temp pol (E.PredClPlusFocAdv np vp adv) ;
PreAdvS part temp pol adv cl =
mkS adv (mkS part (mkS temp pol (mkCl cl.subj cl.vp))) ;
PreAdvKinS part temp pol adv cl =
mkS adv (mkS part (mkS (kin.s ! pol.p) (mkS temp pol (mkCl cl.subj cl.vp)))) ;
PreAdvSubjKinS part temp pol adv cl =
mkS adv (mkS part (mkS temp pol (mkCl (mkNP cl.subj (kin.s ! pol.p)) cl.vp))) ;
PreAdvVerbKinS part temp pol adv cl =
mkS adv (mkS part (mkS temp pol (mkCl cl.subj (mkVP cl.vp (kin.s ! pol.p))))) ;
PredClause subj v = {subj = subj ; vp = v} ;
PredOClause subj v obj = {subj = subj ; v = v ; obj = obj} ;
UseOClause oc = {subj = oc.subj ; vp = mkVP oc.v oc.obj} ;
noPart = P.mkAdv [] ;
han_Part = P.mkAdv (glueTok "han") ;
pa_Part = P.mkAdv (glueTok "pa") ;
pas_Part = P.mkAdv (glueTok "pas") ;
oper
kin : {s : R.Polarity => Adv} =
{s = table {R.Pos => P.mkAdv (glueTok "kin") ; R.Neg => P.mkAdv (glueTok "kaan")}} ;
glueTok : Str -> Str = \s -> "&+" ++ s ;
neutralMarker = E.noPart ;
remindMarker = E.han_Part ;
contrastMarker = E.pas_Part ;
}

View File

@@ -1,6 +1,6 @@
--# -path=.:../abstract:../common:prelude
concrete AllFin of AllFinAbs =
LangFin,
ExtraFin
LangFin - [SlashV2VNP,SlashVV, TFut], ---- to speed up linking; to remove spurious parses
ExtraFin - [ProDrop, ProDropPoss, S_OSV, S_VSO, S_ASV] -- to exclude spurious parses
** {} ;

View File

@@ -1,7 +1,7 @@
--# -path=.:abstract:common:prelude
concrete ExtraFin of ExtraFinAbs = CatFin **
open ResFin, MorphoFin, Coordination, Prelude, NounFin, StructuralFin in {
open ResFin, MorphoFin, Coordination, Prelude, NounFin, StructuralFin, (R = ParamX) in {
lin
GenNP np = {
@@ -48,7 +48,7 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
mkClause (\_ -> adv.s) np.a (insertObj
(\\_,b,_ => np.s ! NPCase Nom) (predV v)) ;
i_implicPron = mkPronoun [] "minun" "minua" "minuna" "minuun" Sg P1 ;
-- i_implicPron = mkPronoun [] "minun" "minua" "minuna" "minuun" Sg P1 ;
whatPart_IP = {
s = table {
NPCase Nom | NPAcc => "mitä" ;
@@ -104,35 +104,58 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
isDef = True --- "minun kolme autoani ovat" ; thus "...on" is missing
} ;
lincat ClPlus = ClausePlus ;
lincat
ClPlus, ClPlusObj, ClPlusAdv = ClausePlus ;
Part = {s : Bool => Str} ;
lin
S_SVO t p clp =
let cl = clp.s ! t.t ! t.a ! p.p
S_SVO part t p clp =
let
cl = clp.s ! t.t ! t.a ! p.p ;
pa = part.s ! True ----
in
{s = t.s ++ p.s ++ cl.subj ++ cl.fin ++ cl.inf ++ cl.compl ++ cl.ext} ;
S_SOV t p clp =
let cl = clp.s ! t.t ! t.a ! p.p
{s = t.s ++ p.s ++ cl.subj ++ pa ++ cl.fin ++ cl.inf ++ cl.compl ++ cl.adv ++ cl.ext} ;
S_OSV part t p clp =
let
cl = clp.s ! t.t ! t.a ! p.p ;
pa = part.s ! True ----
in
{s = t.s ++ p.s ++ cl.subj ++ cl.compl ++ cl.fin ++ cl.inf ++ cl.ext} ;
S_OSV t p clp =
let cl = clp.s ! t.t ! t.a ! p.p
{s = t.s ++ p.s ++ cl.compl ++ pa ++ cl.subj ++ cl.fin ++ cl.inf ++ cl.adv ++ cl.ext} ;
S_VSO part t p clp =
let
cl = clp.s ! t.t ! t.a ! p.p ;
pa = part.s ! cl.qp
in
{s = t.s ++ p.s ++ cl.compl ++ cl.subj ++ cl.fin ++ cl.inf ++ cl.ext} ;
S_OVS t p clp =
let cl = clp.s ! t.t ! t.a ! p.p
{s = t.s ++ p.s ++ cl.fin ++ pa ++ cl.subj ++ cl.inf ++ cl.compl ++ cl.adv ++ cl.ext} ;
S_ASV part t p clp =
let
cl = clp.s ! t.t ! t.a ! p.p ;
pa = part.s ! cl.qp
in
{s = t.s ++ p.s ++ cl.compl ++ cl.fin ++ cl.inf ++ cl.subj ++ cl.ext} ;
S_VSO t p clp =
let cl = clp.s ! t.t ! t.a ! p.p
in
{s = t.s ++ p.s ++ cl.fin ++ cl.subj ++ cl.inf ++ cl.compl ++ cl.ext} ;
S_VOS t p clp =
let cl = clp.s ! t.t ! t.a ! p.p
in
{s = t.s ++ p.s ++ cl.fin ++ cl.inf ++ cl.compl ++ cl.subj ++ cl.ext} ;
{s = t.s ++ p.s ++ cl.adv ++ pa ++ cl.subj ++ cl.fin ++ cl.inf ++ cl.compl ++ cl.ext} ;
PredClPlus np vp = mkClausePlus (subjForm np vp.sc) np.a vp ;
PredClPlusFocSubj np vp = insertKinClausePlus 0 (mkClausePlus (subjForm np vp.sc) np.a vp) ;
PredClPlusFocVerb np vp = insertKinClausePlus 1 (mkClausePlus (subjForm np vp.sc) np.a vp) ;
PredClPlusObj np vps obj =
insertObjClausePlus 0 False (\\b => appCompl True b vps.c2 obj) (mkClausePlus (subjForm np vps.sc) np.a vps) ;
PredClPlusFocObj np vps obj =
insertObjClausePlus 0 True (\\b => appCompl True b vps.c2 obj) (mkClausePlus (subjForm np vps.sc) np.a vps) ;
PredClPlusAdv np vp adv =
insertObjClausePlus 1 False (\\_ => adv.s) (mkClausePlus (subjForm np vp.sc) np.a vp) ;
PredClPlusFocAdv np vp adv =
insertObjClausePlus 1 True (\\_ => adv.s) (mkClausePlus (subjForm np vp.sc) np.a vp) ;
ClPlusWithObj c = c ;
ClPlusWithAdv c = c ;
noPart = {s = \\_ => []} ;
han_Part = mkPart "han" "hän" ;
pa_Part = mkPart "pa" "pä" ;
pas_Part = mkPart "pas" "päs" ;
ko_Part = mkPart "ko" "kö" ;
kos_Part = mkPart "kos" "kös" ;
kohan_Part = mkPart "kohan" "köhän" ;
pahan_Part = mkPart "pahan" "pähän" ;
}

View File

@@ -8,7 +8,7 @@ abstract ExtraFinAbs = Extra [
RelExistNP : Prep -> RP -> NP -> RCl ; -- jossa on jazzia
i_implicPron : Pron ; -- (minä), minut, ...
-- i_implicPron : Pron ; -- (minä), minut, ...
whatPart_IP : IP ;
PartCN : CN -> NP ; -- olutta
@@ -21,19 +21,33 @@ abstract ExtraFinAbs = Extra [
cat
ClPlus ; -- clause with more variation
ClPlusObj ; -- which has a focusable object
ClPlusAdv ; -- which has a focusable adverb
Part ; -- discourse particle
fun
S_SVO : Temp -> Pol -> ClPlus -> S ; -- mepäs juomme maitoa
S_SOV : Temp -> Pol -> ClPlus -> S ; -- mepäs maitoa juomme
S_OSV : Temp -> Pol -> ClPlus -> S ; -- maitoapas me juomme
S_OVS : Temp -> Pol -> ClPlus -> S ; -- maitoapas juomme me
S_VSO : Temp -> Pol -> ClPlus -> S ; -- juommepas me maitoa
S_VOS : Temp -> Pol -> ClPlus -> S ; -- juommepas maitoa me
S_SVO : Part -> Temp -> Pol -> ClPlus -> S ; -- mepäs juomme maitoa nyt
S_OSV : Part -> Temp -> Pol -> ClPlusObj -> S ; -- maitoapas me juomme nyt
S_VSO : Part -> Temp -> Pol -> ClPlus -> S ; -- juommepas me maitoa nyt
S_ASV : Part -> Temp -> Pol -> ClPlusAdv -> S ; -- nytpäs me juomme maitoa
PredClPlus : NP -> VP -> ClPlus ;
-- S_SOV : Part -> Temp -> Pol -> ClPlus -> S ; -- mepäs maitoa juomme
-- S_OVS : Part -> Temp -> Pol -> ClPlus -> S ; -- maitoapas juomme me
-- S_VOS : Part -> Temp -> Pol -> ClPlus -> S ; -- juommepas maitoa me
---- noPart, han_Part, pa_Part, pas_Part, ko_Part, kos_Part,
---- kohan_Part, pahan_Part : Part ;
PredClPlus : NP -> VP -> ClPlus ; -- me nukumme
PredClPlusFocSubj : NP -> VP -> ClPlus ; -- mekin nukumme
PredClPlusFocVerb : NP -> VP -> ClPlus ; -- me nukummekin
PredClPlusObj : NP -> VPSlash -> NP -> ClPlusObj ; -- maitoa me juomme
PredClPlusFocObj : NP -> VPSlash -> NP -> ClPlusObj ; -- maitoakin me juomme
PredClPlusAdv : NP -> VP -> Adv -> ClPlusAdv ; -- nyt me nukumme
PredClPlusFocAdv : NP -> VP -> Adv -> ClPlusAdv ; -- nytkin me nukumme
ClPlusWithObj : ClPlusObj -> ClPlus ; -- to make non-fronted obj focusable
ClPlusWithAdv : ClPlusAdv -> ClPlus ; -- to make non-fronted adv focusable
noPart, han_Part, pa_Part, pas_Part, ko_Part, kos_Part,
kohan_Part, pahan_Part : Part ;
}

View File

@@ -40,6 +40,7 @@ concrete IdiomFin of Idiom = CatFin **
GenericCl vp = mkClause noSubj (agrP3 Sg) {
s = \\_ => vp.s ! VIPass ;
s2 = vp.s2 ;
adv = vp.adv ;
ext = vp.ext ;
sc = vp.sc ;
qp = vp.qp
@@ -52,6 +53,7 @@ concrete IdiomFin of Idiom = CatFin **
in {
s = on.s ;
s2 = \\b,p,a => inf ++ vp.s2 ! b ! p ! a ;
adv = vp.adv ;
ext = vp.ext ;
sc = vp.sc ;
qp = vp.qp

View File

@@ -1,8 +1,8 @@
--# -path=.:../abstract:../common:../prelude
concrete LangFin of Lang =
GrammarFin - [SlashV2VNP,SlashVV], ---- to speed up compilation
-- GrammarFin,
-- GrammarFin - [SlashV2VNP,SlashVV], ---- to speed up compilation
GrammarFin,
LexiconFin
** {

View File

@@ -67,10 +67,10 @@ lin
doctor_N = mk2N "tohtori" "tohtoreita" ;
dog_N = mkN "koira" ;
door_N = mkN "ovi" "ovia" ;
drink_V2 = mkV2 (mkV "juoda") ;
drink_V2 = mkV2 (mkV "juoda") (casePrep partitive) ;
easy_A2V = mkA2 (mkA (mkN "helppo") "helpompi" "helpoin")
(casePrep allative) ;
eat_V2 = mkV2 (mkV "syödä") ;
eat_V2 = mkV2 (mkV "syödä") (casePrep partitive) ;
empty_A = mkA (mkN "tyhjä") "tyhjempi" "tyhjin" ;
enemy_N = mkN "vihollinen" ;
factory_N = mkN "tehdas" ;

View File

@@ -185,6 +185,7 @@ oper
VP = {
s : VIForm => Anteriority => Polarity => Agr => {fin, inf : Str} ;
s2 : Bool => Polarity => Agr => Str ; -- talo/talon/taloa
adv : Polarity => Str ; -- ainakin/ainakaan
ext : Str ;
sc : NPForm ;
qp : Bool -- True = back vowel
@@ -248,6 +249,7 @@ oper
} ;
s2 = \\_,_,_ => [] ;
adv = \\_ => [] ;
ext = [] ;
sc = verb.sc ;
qp = verb.qp
@@ -256,6 +258,7 @@ oper
insertObj : (Bool => Polarity => Agr => Str) -> VP -> VP = \obj,vp -> {
s = vp.s ;
s2 = \\fin,b,a => vp.s2 ! fin ! b ! a ++ obj ! fin ! b ! a ;
adv = vp.adv ;
ext = vp.ext ;
sc = vp.sc ;
qp = vp.qp
@@ -264,15 +267,26 @@ oper
insertObjPre : (Bool => Polarity => Agr => Str) -> VP -> VP = \obj,vp -> {
s = vp.s ;
s2 = \\fin,b,a => obj ! fin ! b ! a ++ vp.s2 ! fin ! b ! a ;
adv = vp.adv ;
ext = vp.ext ;
sc = vp.sc ;
qp = vp.qp
} ;
insertAdv : (Polarity => Str) -> VP -> VP = \adv,vp -> {
s = vp.s ;
s2 = vp.s2 ;
ext = vp.ext ;
adv = \\b => vp.adv ! b ++ adv ! b ;
sc = vp.sc ;
qp = vp.qp
} ;
insertExtrapos : Str -> VP -> VP = \obj,vp -> {
s = vp.s ;
s2 = vp.s2 ;
ext = vp.ext ++ obj ;
adv = vp.adv ;
sc = vp.sc ;
qp = vp.qp
} ;
@@ -284,15 +298,15 @@ oper
} ;
ClausePlus : Type = {
s : Tense => Anteriority => Polarity => {subj,fin,inf,compl,ext : Str ; qp : Bool}
s : Tense => Anteriority => Polarity => {subj,fin,inf,compl,adv,ext : Str ; qp : Bool}
} ;
mkClause : (Polarity -> Str) -> Agr -> VP -> Clause =
\sub,agr,vp -> {
s = \\t,a,b => let c = (mkClausePlus sub agr vp).s ! t ! a ! b in
table {
SDecl => c.subj ++ c.fin ++ c.inf ++ c.compl ++ c.ext ;
SQuest => c.fin ++ BIND ++ questPart c.qp ++ c.subj ++ c.inf ++ c.compl ++ c.ext
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
}
} ;
@@ -308,12 +322,49 @@ oper
in {subj = sub b ;
fin = verb.fin ;
inf = verb.inf ;
compl = vp.s2 ! agrfin.p2 ! b ! agr ;
compl = vp.s2 ! agrfin.p2 ! b ! agr ;
adv = vp.adv ! b ;
ext = vp.ext ;
qp = selectPart vp a b
}
} ;
insertKinClausePlus : Predef.Ints 1 -> ClausePlus -> ClausePlus = \p,cl -> {
s = \\t,a,b =>
let
c = cl.s ! t ! a ! b
in
case p of {
0 => {subj = c.subj ++ kin b True ; fin = c.fin ; inf = c.inf ; -- Jussikin nukkuu
compl = c.compl ; adv = c.adv ; ext = c.ext ; qp = c.qp} ;
1 => {subj = c.subj ; fin = c.fin ++ kin b c.qp ; inf = c.inf ; -- Jussi nukkuukin
compl = c.compl ; adv = c.adv ; ext = c.ext ; qp = c.qp}
}
} ;
insertObjClausePlus : Predef.Ints 1 -> Bool -> (Polarity => Str) -> ClausePlus -> ClausePlus =
\p,ifKin,obj,cl -> {
s = \\t,a,b =>
let
c = cl.s ! t ! a ! b ;
co = obj ! b ++ if_then_Str ifKin (kin b True) [] ;
in case p of {
0 => {subj = c.subj ; fin = c.fin ; inf = c.inf ;
compl = co ; adv = c.compl ++ c.adv ; ext = c.ext ; qp = c.qp} ; -- Jussi juo maitoakin
1 => {subj = c.subj ; fin = c.fin ; inf = c.inf ;
compl = c.compl ; adv = co ; ext = c.adv ++ c.ext ; qp = c.qp} -- Jussi nukkuu nytkin
}
} ;
kin : Polarity -> Bool -> Str =
\p,b -> case p of {Pos => (mkPart "kin" "kin").s ! b ; Neg => (mkPart "kaan" "kään").s ! b} ;
mkPart : Str -> Str -> {s : Bool => Str} = \ko,koe ->
{s = table {True => glueTok ko ; False => glueTok koe}} ;
glueTok : Str -> Str = \s -> "&+" ++ s ;
-- This is used for subjects of passives: therefore isFin in False.
subjForm : NP -> NPForm -> Polarity -> Str = \np,sc,b ->

View File

@@ -73,15 +73,16 @@ concrete VerbFin of Verb = CatFin ** open Prelude, ResFin in {
infVP v.sc b a vp v.vi)
(predV v) ** {c2 = vp.c2} ;
AdvVP vp adv = insertObj (\\_,_,_ => adv.s) vp ;
AdvVP vp adv = insertAdv (\\_ => adv.s) vp ;
AdVVP adv vp = insertObj (\\_,_,_ => adv.s) vp ;
AdVVP adv vp = insertAdv (\\_ => adv.s) vp ;
ReflVP v = insertObjPre (\\fin,b,agr => appCompl fin b v.c2 (reflPron agr)) v ;
PassV2 v = let vp = predV v in {
s = \\_ => vp.s ! VIPass ;
s2 = \\_,_,_ => [] ;
adv = \\_ => [] ;
ext = [] ;
qp = v.qp ;
sc = v.c2.c -- minut valitaan ; minua rakastetaan ; minulle kuiskataan