diff --git a/lib/src/finnish/ParadigmsFin.gf b/lib/src/finnish/ParadigmsFin.gf index 1cb796bf0..f6c6af475 100644 --- a/lib/src/finnish/ParadigmsFin.gf +++ b/lib/src/finnish/ParadigmsFin.gf @@ -387,7 +387,7 @@ mkVS = overload { infFirst = Inf1 ; infElat = Inf3Elat ; infIllat = Inf3Illat ; infIness = Inf3Iness ; infPresPart = InfPresPart ; infPresPartAgr = InfPresPartAgr ; prePrep : Case -> Str -> Prep = - \c,p -> lin Prep {c = NPCase c ; s = []>} ; -- no possessive suffix + \c,p -> lin Prep {c = NPCase c ; s = []>} ; -- no possessive suffix postPrep : Case -> Str -> Prep = \c,p -> @@ -397,9 +397,10 @@ mkVS = overload { Gen => \\a => p ++ possSuffixGen h a ; _ => \\a => p } ; + pt = tagFeature (tagPOS "ADP" p) "AdvType" "Post" ; in case p of { - mukaa + "n" => lin Prep {c = NPCase c ; s = <[],p, a2p>} ; - _ => lin Prep {c = NPCase c ; s = <[],p, a2p>} + mukaa + "n" => lin Prep {c = NPCase c ; s = <[],pt, a2p>} ; ---- p --> mukaa + _ => lin Prep {c = NPCase c ; s = <[],pt, a2p>} } ; postGenPrep = postPrep genitive ; diff --git a/lib/src/finnish/StemFin.gf b/lib/src/finnish/StemFin.gf index 7f03f510f..fab2888f4 100644 --- a/lib/src/finnish/StemFin.gf +++ b/lib/src/finnish/StemFin.gf @@ -8,6 +8,7 @@ oper -- other classes not treated below are POS tagged when the grammar is used with Omorfi tagPOS : Str -> Str -> Str = \_,s -> s ; + tagFeature : Str -> Str -> Str -> Str = \s,_,_ -> s ; oper SNForm : Type = NForm ; diff --git a/lib/src/finnish/StructuralFin.gf b/lib/src/finnish/StructuralFin.gf index cea1e4414..4ecb59f2c 100644 --- a/lib/src/finnish/StructuralFin.gf +++ b/lib/src/finnish/StructuralFin.gf @@ -17,7 +17,7 @@ concrete StructuralFin of Structural = CatFin ** k => kaiket ! k } } ; - almost_AdA, almost_AdN = ss "melkein" ; + almost_AdA, almost_AdN = ssp "ADV" "melkein" ; although_Subj = ssp "CONJ" "vaikka" ; always_AdV = ssp "ADV" "aina" ; and_Conj = {s1 = [] ; s2 = tagPOS "CONJ" "ja" ; n = Pl} ; @@ -25,23 +25,23 @@ concrete StructuralFin of Structural = CatFin ** before_Prep = prePrep partitive "ennen" ; behind_Prep = postGenPrep "takana" ; between_Prep = postGenPrep "välissä" ; - both7and_DConj = sd2 "sekä" "että" ** {n = Pl} ; + both7and_DConj = sd2 (tagPOS "CONJ" "sekä") (tagPOS "CONJ" "että") ** {n = Pl} ; but_PConj = ssp "CONJ" "mutta" ; by8agent_Prep = postGenPrep "toimesta" ; by8means_Prep = casePrep adessive ; can8know_VV = mkVV (mkV "osata" "osasi") ; can_VV = mkVV (mkV "voida" "voi") ; during_Prep = postGenPrep "aikana" ; - either7or_DConj = sd2 "joko" "tai" ** {n = Sg} ; - everybody_NP = lin NP (makeNP (((mkN "jokainen"))) Sg) ; - every_Det = MorphoFin.mkDet Sg (snoun2nounBind (mkN "jokainen")) ; + either7or_DConj = sd2 (tagPOS "CONJ" "joko") (tagPOS "CONJ" "tai") ** {n = Sg} ; + everybody_NP = lin NP (makeNP (((mkN "jokainen"))) Sg) ; --UD + every_Det = MorphoFin.mkDet Sg (snoun2nounBind (mkN "jokainen")) ; --UD everything_NP = makeNP ((((mkN "kaikki" "kaiken" "kaikkena")))) Sg ; - everywhere_Adv = mkAdv "kaikkialla" ; - few_Det = MorphoFin.mkDet Sg (snoun2nounBind (mkN "harva")) ; + everywhere_Adv = mkAdv "kaikkialla" ; --UD + few_Det = MorphoFin.mkDet Sg (snoun2nounBind (mkN "harva")) ; --UD --- first_Ord = {s = \\n,c => (mkN "ensimmäinen").s ! NCase n c} ; for_Prep = casePrep allative ; from_Prep = casePrep elative ; - he_Pron = mkPronoun "hän" "hänen" "häntä" "hänenä" "häneen" Sg P3 ; + he_Pron = mkPersonPronoun "hän" "hänen" "häntä" "hänenä" "häneen" Sg P3 ; here_Adv = mkAdv "täällä" ; here7to_Adv = mkAdv "tänne" ; here7from_Adv = mkAdv "täältä" ; @@ -51,7 +51,7 @@ concrete StructuralFin of Structural = CatFin ** {s = \\c => "kuinka" ++ (snoun2nounBind (mkN "moni" "monia")).s ! NCase Sg c ; n = Sg ; isNum = False} ; if_Subj = ssp "CONJ" "jos" ; in8front_Prep = postGenPrep "edessä" ; - i_Pron = mkPronoun "minä" "minun" "minua" "minuna" "minuun" Sg P1 ; + i_Pron = mkPersonPronoun "minä" "minun" "minua" "minuna" "minuun" Sg P1 ; in_Prep = casePrep inessive ; it_Pron = { s = \\c => pronSe.s ! npform2case Sg c ; @@ -75,7 +75,7 @@ concrete StructuralFin of Structural = CatFin ** please_Voc = ss ["ole hyvä"] ; --- number possess_Prep = casePrep genitive ; quite_Adv = ssp "ADV" "melko" ; - she_Pron = mkPronoun "hän" "hänen" "häntä" "hänenä" "häneen" Sg P3 ; + she_Pron = mkPersonPronoun "hän" "hänen" "häntä" "hänenä" "häneen" Sg P3 ; so_AdA = ssp "ADV" "niin" ; somebody_NP = { s = \\c => jokuPron ! Sg ! npform2case Sg c ; @@ -101,10 +101,10 @@ concrete StructuralFin of Structural = CatFin ** that_Quant = heavyQuant { s1 = table (MorphoFin.Number) { Sg => table (MorphoFin.Case) { - c => (mkPronoun "tuo" "tuon" "tuota" "tuona" "tuohon" Sg P3).s ! NPCase c + c => (mkPersonPronoun "tuo" "tuon" "tuota" "tuona" "tuohon" Sg P3).s ! NPCase c } ; Pl => table (MorphoFin.Case) { - c => (mkPronoun "nuo" "noiden" "noita" "noina" "noihin" Sg P3).s ! NPCase c + c => (mkPersonPronoun "nuo" "noiden" "noita" "noina" "noihin" Sg P3).s ! NPCase c } } ; s2 = \\_ => [] ; isNum,isPoss = False ; isDef = True ; isNeg = False @@ -114,14 +114,14 @@ concrete StructuralFin of Structural = CatFin ** there7to_Adv = ssp "ADV" "sinne" ; there7from_Adv = ssp "ADV" "sieltä" ; therefore_PConj = ssp "ADV" "siksi" ; - they_Pron = mkPronoun "he" "heidän" "heitä" "heinä" "heihin" Pl P3 ; --- ne + they_Pron = mkPersonPronoun "he" "heidän" "heitä" "heinä" "heihin" Pl P3 ; --- ne this_Quant = heavyQuant { s1 = table (MorphoFin.Number) { Sg => table (MorphoFin.Case) { - c => (mkPronoun "tämä" "tämän" "tätä" "tänä" "tähän" Sg P3).s ! NPCase c + c => (mkPersonPronoun "tämä" "tämän" "tätä" "tänä" "tähän" Sg P3).s ! NPCase c } ; Pl => table (MorphoFin.Case) { - c => (mkPronoun "nämä" "näiden" "näitä" "näinä" "näihin" Sg P3).s ! NPCase c + c => (mkPersonPronoun "nämä" "näiden" "näitä" "näinä" "näihin" Sg P3).s ! NPCase c } } ; s2 = \\_ => [] ; isNum,isPoss = False ; isDef = True ; isNeg = False @@ -132,7 +132,7 @@ concrete StructuralFin of Structural = CatFin ** under_Prep = postGenPrep "alla" ; very_AdA = ssp "ADV" "erittäin" ; want_VV = mkVV (mkV "tahtoa") ; - we_Pron = mkPronoun "me" "meidän" "meitä" "meinä" "meihin" Pl P1 ; + we_Pron = mkPersonPronoun "me" "meidän" "meitä" "meinä" "meihin" Pl P1 ; whatPl_IP = { s = table {NPAcc => "mitkä" ; c => mikaInt ! Pl ! npform2case Pl c} ; n = Pl @@ -159,10 +159,10 @@ concrete StructuralFin of Structural = CatFin ** without_Prep = prePrep partitive "ilman" ; with_Prep = postGenPrep "kanssa" ; yes_Utt = ssp "INTERJ" "kyllä" ; - youSg_Pron = mkPronoun "sinä" "sinun" "sinua" "sinuna" "sinuun" Sg P2 ; - youPl_Pron = mkPronoun "te" "teidän" "teitä" "teinä" "teihin" Pl P2 ; + youSg_Pron = mkPersonPronoun "sinä" "sinun" "sinua" "sinuna" "sinuun" Sg P2 ; + youPl_Pron = mkPersonPronoun "te" "teidän" "teitä" "teinä" "teihin" Pl P2 ; youPol_Pron = - let p = mkPronoun "te" "teidän" "teitä" "teinä" "teihin" Pl P2 in + let p = mkPersonPronoun "te" "teidän" "teitä" "teinä" "teihin" Pl P2 in {s = p.s ; a = AgPol ; hasPoss = True ; poss = p.poss} ; oper @@ -313,5 +313,8 @@ lin oper ssp : Str -> Str -> {s : Str} = \p,s -> ss (tagPOS p s) ; -- used in tagged/ for Omorfi, otherwise =ss + + mkPersonPronoun : (_,_,_,_,_ : Str) -> Number -> Person -> Pron = \a,b,c,d,e,n,p -> + lin Pron (MorphoFin.mkPronoun a b c d e n p) ; } diff --git a/lib/src/finnish/stemmed/StemFin.gf b/lib/src/finnish/stemmed/StemFin.gf index c3b0e1c43..d412114f0 100644 --- a/lib/src/finnish/stemmed/StemFin.gf +++ b/lib/src/finnish/stemmed/StemFin.gf @@ -8,7 +8,7 @@ oper -- other classes not treated below are POS tagged when the grammar is used with Omorfi tagPOS : Str -> Str -> Str = \_,s -> s ; - + tagFeature : Str -> Str -> Str -> Str = \s,_,_ -> s ; oper SNForm : Type = Predef.Ints 10 ; diff --git a/lib/src/finnish/tagged/LargeFin.gf b/lib/src/finnish/tagged/LargeFin.gf index 7af0549cb..0fda90d5b 100644 --- a/lib/src/finnish/tagged/LargeFin.gf +++ b/lib/src/finnish/tagged/LargeFin.gf @@ -7,17 +7,18 @@ concrete LargeFin of LargeFinAbs = VerbFin, AdjectiveFin, AdverbFin, - NumeralFin, +-- NumeralFin, SentenceFin, QuestionFin, RelativeFin, ConjunctionFin, PhraseFin, - StructuralFin, +-- StructuralFin - [mkPronoun], IdiomFin, - TenseX, - ExtraFin, - WordsFin ** open TagFin, StemFin in { + TenseX +---- ,ExtraFin +-- ,WordsFin + ** open TagFin, StemFin, ResFin, ParadigmsFin, Prelude in { lincat Top = {s : Str} ; @@ -26,5 +27,32 @@ lin PhrPunctTop phr pu = {s = phr.s ++ pu.s} ; PhrTop phr = phr ; - fullstopPunct = {s = tagPOS "PUNCT" "."} ; + thePunct = {s = tagPOS "PUNCT" ""} ; + +lin + theN = mkN [] ; + theA = mkA [] ; + theV = mkSVerb [] ** {sc = SCNom ; p = []} ; + theAdv = mkAdv [] ; + + theV2 = mkV2 theV ; ---- plus other complement cases? + + sg1Pron = mkPron Sg P1 ; + sg2Pron = mkPron Sg P2 ; + sg3Pron = mkPron Sg P3 ; + pl1Pron = mkPron Pl P1 ; + pl2Pron = mkPron Pl P2 ; + pl3Pron = mkPron Pl P3 ; + + + +oper + mkPron : Number -> Person -> Pron = \n,p -> lin Pron { + s = \\npf => tagWord (tagPron "Prs" (Ag n p) npf) (mkTag "PRON") ; + a = Ag n p ; + hasPoss = True ; + poss = [] ; ---- + } ; + + } \ No newline at end of file diff --git a/lib/src/finnish/tagged/LargeFinAbs.gf b/lib/src/finnish/tagged/LargeFinAbs.gf index dbbcd2a7f..b5b777482 100644 --- a/lib/src/finnish/tagged/LargeFinAbs.gf +++ b/lib/src/finnish/tagged/LargeFinAbs.gf @@ -5,17 +5,18 @@ abstract LargeFinAbs = Verb, Adjective, Adverb, - Numeral, +-- Numeral, Sentence, Question, Relative, Conjunction, Phrase, Idiom, - Structural, - Tense, - ExtraFinAbs, - WordsFinAbs ** { +-- Structural, + Tense +---- ,ExtraFinAbs +-- ,WordsFinAbs + ** { flags startcat = Top ; @@ -25,8 +26,29 @@ cat fun PhrPunctTop : Phr -> Punct -> Top ; PhrTop : Phr -> Top ; - fullstopPunct : Punct ; - + thePunct : Punct ; +fun + theN : N ; + theA : A ; + theV : V ; + theAdv : Adv ; + + theV2 : V2 ; + + sg1Pron : Pron ; + sg2Pron : Pron ; + sg3Pron : Pron ; + sg4Pron : Pron ; + sg5Pron : Pron ; + sg6Pron : Pron ; + + theConj : Conj ; + theDistrConj : Conj ; + theSubj : Subj ; + + theSgDet : Det ; + thePlDet : Det ; + } diff --git a/lib/src/finnish/tagged/StemFin.gf b/lib/src/finnish/tagged/StemFin.gf index 9555dcc3c..4f56f44d9 100644 --- a/lib/src/finnish/tagged/StemFin.gf +++ b/lib/src/finnish/tagged/StemFin.gf @@ -8,6 +8,7 @@ oper -- other classes not treated below are POS tagged when the grammar is used with Omorfi tagPOS : Str -> Str -> Str = \p,s -> tagWord ("+" + p) s ; + tagFeature : Str -> Str -> Str -> Str = \s,f,v -> s ++ mkTag f v ; oper SNForm : Type = Predef.Ints 0 ; --- not really needed diff --git a/lib/src/finnish/tagged/TagFin.gf b/lib/src/finnish/tagged/TagFin.gf index 8ef850c30..10fbe4bec 100644 --- a/lib/src/finnish/tagged/TagFin.gf +++ b/lib/src/finnish/tagged/TagFin.gf @@ -33,6 +33,20 @@ oper NCompound => pairTag (mkTag "Form" "Comp") (tagNumber Sg) ---- TODO: how is this in UD? } ; + tagPron : Str -> Agr -> NPForm -> Tag = \typ,agr,npf -> + let tagr : Number * Person = case agr of { + Ag n p => ; + AgPol => ---- Plur in ud? + } ; + n = tagr.p1 ; p = tagr.p2 ; + pt : Tag = mkTag "PronType" typ ; -- Dem Ind Int Prs Rel + in + case npf of { + NPCase c => consTag (tagNForm (NCase n c))(tagPerson p) pt ; + NPAcc => consTag (mkTag "Case" "Acc") (tagNumber n) (tagPerson p) pt ; ---- effect for pronouns only? + NPSep => consTag (tagNForm (NCase n Nom))(tagPerson p) pt ---- correct pro-drop effect? + } ; + tagDegreeAForm : Degree -> AForm -> Str = \d,af -> case af of { AN nf => let ts = tagNForms nf in consTag ts.p1 (tagDegree d) ts.p2 ; AAdv => consTag adverbTag (tagDegree d) ---- TODO: how is this in UD?