From 31e1a657f98aa459181601b494b2825812cb3eef Mon Sep 17 00:00:00 2001 From: Nick Frolov Date: Thu, 24 Nov 2011 16:13:08 +0000 Subject: [PATCH] Symbolic and Nound fixes for Russian --- Setup.hs | 2 +- examples/phrasebook/SentencesRus.gf | 6 +++-- examples/phrasebook/WordsRus.gf | 5 ++-- lib/src/russian/CatRus.gf | 5 ++-- lib/src/russian/NounRus.gf | 39 ++++++++++++++++++++--------- lib/src/russian/StructuralRus.gf | 22 ++++++++-------- lib/src/russian/SymbolRus.gf | 28 ++++++++++++++++++--- 7 files changed, 74 insertions(+), 33 deletions(-) diff --git a/Setup.hs b/Setup.hs index cf3db3518..179088374 100644 --- a/Setup.hs +++ b/Setup.hs @@ -231,7 +231,7 @@ langsLang = langs `except` ["Amh","Ara","Lat","Hin","Tha","Tur"] langsAPI = langsLang `except` ["Hin","Ina","Tha"] -- languages for which to compile Symbolic -langsSymbolic = langsAPI `except` ["Rus"] +langsSymbolic = langsAPI -- `except` ["Rus"] -- languages for which to run demo test langsDemo = langsLang `except` ["Ara","Hin","Ina","Tha"] diff --git a/examples/phrasebook/SentencesRus.gf b/examples/phrasebook/SentencesRus.gf index a88953ea1..67e06d7f1 100644 --- a/examples/phrasebook/SentencesRus.gf +++ b/examples/phrasebook/SentencesRus.gf @@ -2,8 +2,8 @@ concrete SentencesRus of Sentences = NumeralRus ** SentencesI - [ NameNN, SHave, SHaveNo, SHaveNoMass, QDoHave, AHaveCurr ] with (Syntax = SyntaxRus), --- (Symbolic = SymbolicRus), - (Lexicon = LexiconRus), (Grammar = GrammarRus) ** open Prelude, SyntaxRus in { + (Symbolic = SymbolicRus), + (Lexicon = LexiconRus), (Grammar = GrammarRus) ** open Prelude, SyntaxRus, (P = ParadigmsRus) in { lin SHave p obj = mkS (mkCl (mkVP have_V3 obj p.name)) ; SHaveNo p obj = mkS (mkCl (mkVP have_not_V3 (mkNP obj) p.name)) ; @@ -12,4 +12,6 @@ concrete SentencesRus of Sentences = NumeralRus ** SentencesI - [ AHaveCurr p curr = mkCl (mkVP have_V3 (mkNP aPl_Det curr) p.name) ; + lin NameNN = mkNP (P.mkN "NN") ; + } \ No newline at end of file diff --git a/examples/phrasebook/WordsRus.gf b/examples/phrasebook/WordsRus.gf index 63b2e6e8b..ea9348eba 100644 --- a/examples/phrasebook/WordsRus.gf +++ b/examples/phrasebook/WordsRus.gf @@ -185,6 +185,7 @@ flags coding = utf8 ; Husband = xOf sing (P.mkN "муж") ; Son = xOf sing (P.mkN "сын") ; Daughter = xOf sing (P.mkN "дочь" "дочери" "дочери" "дочь" "дочерью" "дочери" "дочь" "дочери" "дочерей" "дочерям" "дочерей" "дочерьми" "дочерях" P.feminine P.animate) ; +-- Daughter = xOf sing E.daughter_N ; Children = xOf plur L.child_N ; @@ -256,8 +257,8 @@ flags coding = utf8 ; relativePerson n (mkCN x) (\a,b,c -> mkNP (mkNP the_Quant a c) (SyntaxRus.mkAdv possess_Prep b)) p ; mkTransport : N -> {name : CN ; by : Adv} = \n -> { - name = mkCN n ; - by = SyntaxRus.mkAdv on_Prep (mkNP the_Det n) + name = mkCN n ; + by = SyntaxRus.mkAdv on_Prep (mkNP the_Det n) } ; far_IAdv = ss "как далеко" ** {lock_IAdv = <>} ; diff --git a/lib/src/russian/CatRus.gf b/lib/src/russian/CatRus.gf index e71eabf69..123132b74 100644 --- a/lib/src/russian/CatRus.gf +++ b/lib/src/russian/CatRus.gf @@ -58,9 +58,10 @@ concrete CatRus of Cat = CommonX ** open ResRus, Prelude in { -- Gender parameter is due to multiple determiners (Numerals in Russian) -- like "mnogo" -- The determined noun has the case parameter specific for the determiner +-- 'q' is for 'quantity', quantity determiners demand genitive for the noun - Det = {s : AdjForm => Str; n: Number; g: PronGen; c: Case} ; - Predet, Quant = {s : AdjForm => Str; g: PronGen; c: Case} ; + Det = {s : AdjForm => Str; n: Number; g: PronGen; c: Case; q: Bool} ; + Predet, Quant = {s : AdjForm => Str; g: PronGen; c: Case; q: Bool} ; -- Numeral diff --git a/lib/src/russian/NounRus.gf b/lib/src/russian/NounRus.gf index f62e55cac..80f9147dc 100644 --- a/lib/src/russian/NounRus.gf +++ b/lib/src/russian/NounRus.gf @@ -6,13 +6,24 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { lin DetCN kazhduj okhotnik = { - s = \\c => case kazhduj.c of { - Nom => - kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ - okhotnik.s ! NF kazhduj.n (extCase c) ; - _ => - kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ - okhotnik.s ! NF kazhduj.n kazhduj.c }; + s = \\c => case kazhduj.q of { + False => + case kazhduj.c of { + Nom => + kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ + okhotnik.s ! NF kazhduj.n (extCase c) ; + _ => + kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ + okhotnik.s ! NF kazhduj.n kazhduj.c } ; + True => + case kazhduj.c of { + Nom => + kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ + okhotnik.s ! NF kazhduj.n Gen ; + _ => + kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ + okhotnik.s ! NF kazhduj.n Gen } + }; n = kazhduj.n ; p = P3 ; pron = False; @@ -74,14 +85,18 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { s = \\af => quant.s !af ++ num.s! (caseAF af) ! (genAF af) ++ ord.s!af ; n = num.n ; g = quant.g; - c = quant.c + c = quant.c; +-- q = notB (isNil (num.s ! Nom ! Masc)) + q = False; } ; DetQuant quant num = { s = \\af => quant.s !af ++ num.s! (caseAF af) ! (genAF af) ; n = num.n ; g = quant.g; - c = quant.c + c = quant.c; +-- q = notB (isNil (num.s ! Nom ! Masc)) + q = False; } ; {- DetArtOrd quant num ord = { @@ -131,7 +146,7 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { anim = okhotnik.anim } ; -} - PossPron p = {s = \\af => p.s ! mkPronForm (caseAF af) No (Poss (gennum (genAF af) (numAF af) )); c=Nom; g = PNoGen} ; + PossPron p = {s = \\af => p.s ! mkPronForm (caseAF af) No (Poss (gennum (genAF af) (numAF af) )); c=Nom; g = PNoGen; q = False} ; NumCard c = c ; NumSg = {s = \\_,_ => [] ; n = Sg} ; @@ -149,8 +164,8 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in { OrdSuperl a = {s = a.s!Posit}; - DefArt = {s = \\_=>[] ; c=Nom; g = PNoGen }; - IndefArt = { s = \\_=>[] ; c=Nom; g = PNoGen }; + DefArt = {s = \\_=>[] ; c=Nom; g = PNoGen; q = False }; + IndefArt = { s = \\_=>[] ; c=Nom; g = PNoGen; q = False }; UseN noun = noun ; UseN2 noun = noun ; diff --git a/lib/src/russian/StructuralRus.gf b/lib/src/russian/StructuralRus.gf index be5daa8fa..ef955b1c1 100644 --- a/lib/src/russian/StructuralRus.gf +++ b/lib/src/russian/StructuralRus.gf @@ -14,7 +14,7 @@ lin above_Prep = { s = "над" ; c = Inst} ; after_Prep = { s = "после" ; c = Gen }; -- all8mass_Det = vesDet ** {n = Sg; g = PNoGen; c = Nom} ; - all_Predet = vseDetPl ** { g = PNoGen; c = Nom} ; + all_Predet = vseDetPl ** { g = PNoGen; c = Nom; q = False} ; almost_AdA = {s= "почти"} ; almost_AdN = {s= "почти"} ; although_Subj = ss "хотя" ; @@ -33,11 +33,11 @@ lin during_Prep = { s = ["в течение"] ; c = Gen}; either7or_DConj = sd2 "либо" [", либо"] ** {n = Sg} ; -- comma is not visible in GUI! - every_Det = kazhdujDet ** {n = Sg ; g = PNoGen; c= Nom} ; + every_Det = kazhdujDet ** {n = Sg ; g = PNoGen; c= Nom; q = False} ; everybody_NP = mkNP Pl (UseN ((eEnd_Decl "вс")**{lock_N=<>})) ; everything_NP = UsePron (pronVseInanimate ** {lock_Pron=<>}) ; everywhere_Adv = ss "везде" ; - few_Det = nemnogoSgDet **{lock_Det= <>; n= Sg; g = PNoGen; c = Nom}; + few_Det = nemnogoSgDet **{lock_Det= <>; n= Sg; g = PNoGen; c = Nom; q = True}; --- DEPREC first_Ord = (uy_j_EndDecl "перв" ) ** {lock_A = <>}; --AStaruyj for_Prep = { s = "для" ; c = Gen }; from_Prep = { s = "от" ; c = Gen }; @@ -54,19 +54,19 @@ lin in_Prep = { s = "в" ; c = Prepos PrepVNa } ; it_Pron = pronOno ; less_CAdv = {s="менее"; p=""} ; - many_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen} ; + many_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen; q = True} ; more_CAdv = {s="более"; p=""} ; - most_Predet = bolshinstvoSgDet ** {n = Sg; g = (PGen Neut); c= Gen} ; + most_Predet = bolshinstvoSgDet ** {n = Sg; g = (PGen Neut); c= Gen; q = True} ; -- inanimate, Sg: "большинство телефонов безмолству-ет" -- most8many_Det = bolshinstvoPlDet ** {n = Pl; g = (PGen Neut); c= Gen} ; -- animate, Pl: "большинство учащихся хорошо подготовлен-ы" - much_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen} ; -- same as previous + much_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen; q = True} ; -- same as previous must_VV = verbDolzhen ; no_Utt = ss ["Нет"] ; on_Prep = { s = "на" ; c = Prepos PrepVNa }; --- DEPREC one_Quant = odinDet ** {lock_QuantSg = <>; n= Sg; g = PNoGen; c = Nom }; --AStaruyj : - only_Predet = (uy_j_EndDecl "единственн" ) ** {lock_Predet = <>; n= Sg; g = PNoGen; c = Nom }; + only_Predet = (uy_j_EndDecl "единственн" ) ** {lock_Predet = <>; n= Sg; g = PNoGen; c = Nom; q = False }; or_Conj = {s1= [] ; s2 = "или" ; n = Sg} ; otherwise_PConj = ss "иначе" ; part_Prep = { s = "" ; c = Nom}; -- missing in Russian @@ -76,17 +76,17 @@ lin she_Pron = pronOna ; so_AdA = ss "так"; somebody_NP = UsePron (pronKtoTo** {lock_Pron = <>}); - someSg_Det = nekotorujDet ** {n = Sg; g = PNoGen; c= Nom} ; - somePl_Det = nekotorujDet ** {n = Pl; g = PNoGen; c= Nom} ; + someSg_Det = nekotorujDet ** {n = Sg; g = PNoGen; c= Nom; q = False} ; + somePl_Det = nekotorujDet ** {n = Pl; g = PNoGen; c= Nom; q = False} ; something_NP = UsePron (pronChtoTo** {lock_Pron=<> }) ; somewhere_Adv = ss "где-нибудь" ; - that_Quant = totDet ** {n = Sg; g = PNoGen; c= Nom} ; + that_Quant = totDet ** {n = Sg; g = PNoGen; c= Nom; q = False} ; there_Adv = ss "там" ; there7to_Adv = ss "туда" ; there7from_Adv = ss "оттуда" ; therefore_PConj = ss "следовательно" ; they_Pron = pronOni; - this_Quant = etotDet ** {n = Sg; g = PNoGen; c= Nom} ; + this_Quant = etotDet ** {n = Sg; g = PNoGen; c= Nom; q = False} ; through_Prep = { s = "через" ; c = Acc }; to_Prep = { s = "к" ; c = Dat }; too_AdA = ss "слишком" ; diff --git a/lib/src/russian/SymbolRus.gf b/lib/src/russian/SymbolRus.gf index 87caab222..d1d8eca47 100644 --- a/lib/src/russian/SymbolRus.gf +++ b/lib/src/russian/SymbolRus.gf @@ -3,8 +3,29 @@ concrete SymbolRus of Symbol = CatRus ** open Prelude, ResRus in { {- TODO! -} --- lin --- SymbPN i = {s = i.s ; g = Neut } ; +lin + SymbPN i = {s = table {_ => i.s} ; g = Neut; anim = Inanimate } ; + IntPN i = {s = table {_ => i.s} ; g = Neut; anim = Inanimate } ; + FloatPN i = {s = table {_ => i.s} ; g = Neut; anim = Inanimate } ; + NumPN n = {s = table {_ => n.s ! Nom ! Neut} ; g = Neut; anim = Inanimate } ; + + CNIntNP cn i = {s = \\cas => cn.s ! NF Sg (extCase cas) ++ i.s; + n = Sg ; p = P3 ; + g = PGen cn.g ; anim = cn.anim ; pron = False } ; + CNNumNP cn n = {s = \\cas => cn.s ! NF Sg (extCase cas) + ++ n.s ! (extCase cas) ! cn.g; + n = Sg ; p = P3 ; + g = PGen cn.g ; anim = cn.anim ; pron = False } ; + + CNSymbNP d cn ss = {s = \\cas => cn.s ! NF Sg (extCase cas); + n = Sg ; p = P3 ; + g = PGen cn.g ; anim = cn.anim ; pron = False } ; + + SymbS sy = sy ; + + SymbNum sy = { s = \\_,_=>sy.s; n=Pl }; + + SymbOrd sy = { s = \\af => sy.s } ; lincat @@ -13,7 +34,8 @@ lincat lin MkSymb s = s ; --- BaseSymb = infixSS "and" ; + BaseSymb = infixSS "и" ; ConsSymb = infixSS "," ; + }