diff --git a/src/russian/ConstructionRus.gf b/src/russian/ConstructionRus.gf index 2d61b2fdd..1afaf5769 100644 --- a/src/russian/ConstructionRus.gf +++ b/src/russian/ConstructionRus.gf @@ -8,13 +8,12 @@ lin tired_VP = mkVP (P.mkA "усталый" "" "1*a/c'" PrefFull) ; scared_VP = mkVP (P.mkV Imperfective "бояться" "боюсь" "боится") ; -- intran ill_VP = mkVP ( P.mkA "больной" "" "1*b" PrefShort) ; - ready_VP = mkVP (P.mkA "готовый" "" "1a" PrefShort) ; + ready_VP = mkVP (P.mkA "готовый" "" "1a" PrefFull) ; -- : NP -> QCl ; -- what is x's name / wie heisst x (Ger) what_name_QCl np = E.PredIAdvVP how_IAdv (ComplSlash (SlashV2a (P.mkV2 (P.mkV Imperfective "звать" "зову" "зовёт") Gen)) np) ; -- languages - lincat Language = N ; Timeunit = N ; @@ -79,9 +78,9 @@ lin -- : Weekday -> Adv ; -- on Mondays weekdayHabitualAdv w = P.mkAdv (EX.along_Prep.s ++ (w.pdat)) ; -- on Sundays -- : Weekday -> Adv ; -- last Monday - weekdayLastAdv w = P.mkAdv (EX.to2_Prep.s ++ (PositA (P.mkA "прошлый")).s ! GSg Fem ! Inanimate ! Acc ++ w.sacc) ; + weekdayLastAdv w = P.mkAdv (EX.to2_Prep.s ++ (PositA (P.mkA "прошлый")).s ! GSg w.g ! Inanimate ! Acc ++ w.sacc) ; -- : Weekday -> Adv ; -- next Monday - weekdayNextAdv w = P.mkAdv (EX.to2_Prep.s ++ (PositA (P.mkA "следующий")).s ! GSg Fem ! Inanimate ! Acc ++ w.sacc) ; + weekdayNextAdv w = P.mkAdv (EX.to2_Prep.s ++ (PositA (P.mkA "следующий")).s ! GSg w.g ! Inanimate ! Acc ++ w.sacc) ; -- : Month -> Adv ; -- in June monthAdv month = P.mkAdv ("в" ++ month.sloc) ; @@ -115,7 +114,7 @@ lin let ap=adjFormsAdjective a in let as_n_units=(how_IAdv.s ++ card.s ! Neut ! Inanimate ! Nom - ++ cn.s ! numSizeNum card.size ! (numSizeCase card.size)) in { + ++ cn.s ! numSizeNum Nom card.size ! (numSizeCase Nom card.size)) in { --? Nom? s=\\gn,anim,cas=> ap.s!gn!anim!cas ++ as_n_units ; short=\\a=> ap.short ! a ++ as_n_units ; preferShort=PrefFull ; @@ -125,7 +124,7 @@ lin -- : Card -> CN -> NP -> NP ; -- x ounces of this flour n_units_of_NP card cn np = { s = \\cas => card.s ! Neut ! Inanimate ! cas - ++ cn.s ! numSizeNum card.size ! (numSizeCase card.size) + ++ cn.s ! numSizeNum cas card.size ! (numSizeCase cas card.size) ++ np.s ! Gen ; pron=False ; a = Ag (gennum cn.g (numSizeNumber card.size)) P3 @@ -135,7 +134,7 @@ lin s=\\n,cas=> cn.s ! n ! cas ++ "на" ++ card.s ! Neut ! Inanimate ! Nom - ++ cn_unit.s ! (numSizeNum card.size) ! (numSizeCase card.size) + ++ cn_unit.s ! numSizeNum Nom card.size ! numSizeCase Nom card.size } ; ---------------------------------------------- diff --git a/src/russian/NounRus.gf b/src/russian/NounRus.gf index bfa589614..c6f51a9b2 100644 --- a/src/russian/NounRus.gf +++ b/src/russian/NounRus.gf @@ -9,8 +9,7 @@ lin -- : Det -> CN -> NP ; -- the man DetCN det cn = let n = numSizeNumber det.size in { - -- TODO: fix some cases in README - s=\\cas => det.s ! cn.g ! cn.anim ! cas ++ sizeNumCase cn.s det.size ; + s=\\cas => det.s ! cn.g ! cn.anim ! cas ++ cn.s ! numSizeNum cas det.size ! numSizeCase cas det.size; pron=False ; a=Ag (gennum det.g n) P3 } ; @@ -26,7 +25,7 @@ lin UsePron pron = lin NP (pronFormsPronoun pron) ; -- : Predet -> NP -> NP ; -- only the man - PredetNP predet np = np ** {s=\\cas => predet.s ! (agrGenNum np.a) ! Inanimate ! cas ++ np.s ! numSizeCase predet.size} ; + PredetNP predet np = np ** {s=\\cas => predet.s ! (agrGenNum np.a) ! Inanimate ! cas ++ np.s ! numSizeCase cas predet.size} ; -- : NP -> V2 -> NP ; -- the man seen PPartNP np v2 = np ** { @@ -43,14 +42,14 @@ lin -- : Det -> NP ; -- these five DetNP det = { - s=\\c => det.s ! det.g ! Inanimate ! c ; + s=\\cas => det.s ! det.g ! Inanimate ! cas ; pron=False ; a=Ag (gennum det.g (numSizeNumber det.size)) P3 } ; -- : CN -> NP ; -- (beer) MassNP cn = { - s = \\c => cn.s ! Sg ! c ; -- can it be plural-only? eg квасцы + s = \\cas => cn.s ! Sg ! cas ; -- can it be plural-only? eg квасцы pron=False ; a = Ag (gennum cn.g Sg) P3 } ; @@ -73,13 +72,13 @@ lin -- : Numeral -> Card ; -- fifty-one NumNumeral n = n ; -- : Card -> Num - NumCard c = c ; + NumCard card = card ; -- : Digits -> Card ; -- 51 NumDigits n = {s = \\_,_,_ => n.s ; size = n.size } ; -- : Quant -> Num -> Det ; -- these five DetQuant quant num = { - s=\\g,a,c => quant.s ! (gennum g (numSizeNumber num.size)) ! a ! c ++ num.s ! g ! a ! c ; + s=\\g,a,cas => quant.s ! (gennum g (numSizeNumber num.size)) ! a ! cas ++ num.s ! g ! a ! cas ; g=quant.g ; c=quant.c ; size=num.size @@ -87,10 +86,9 @@ lin -- : Quant -> Num -> Ord -> Det ; -- these five best DetQuantOrd quant num ord = { - s=\\g,a,c => num.s ! g ! a ! c - ++ quant.s ! (gennum g (numSizeNumber num.size)) ! a ! c - --GenNum => Animacy => Case => Str - ++ (adjFormsAdjective ord).s ! gennum quant.g (numSizeNum num.size) ! Inanimate ! numSizeCase num.size ; + s=\\g,a,cas => num.s ! g ! a ! cas + ++ quant.s ! (gennum g (numSizeNumber num.size)) ! a ! cas + ++ (adjFormsAdjective ord).s ! gennum quant.g (numSizeNum cas num.size) ! Inanimate ! numSizeCase cas num.size ; g=quant.g ; c=quant.c ; size=num.size @@ -115,14 +113,14 @@ lin -- : AdN -> Card -> Card AdNum adn card = card ** { - s=\\g,a,c => adn.s ++ card.s ! g ! a ! c + s=\\g,a,cas => adn.s ++ card.s ! g ! a ! cas } ; --------------- -- Common nouns -- : AP -> CN -> CN ; -- big house - большой дом - AdjCN ap cn = cn ** {s = \\n,c => preOrPost (notB ap.isPost) (ap.s ! (gennum cn.g n) ! cn.anim ! c) (cn.s ! n ! c)} ; + AdjCN ap cn = cn ** {s = \\n,cas => preOrPost (notB ap.isPost) (ap.s ! (gennum cn.g n) ! cn.anim ! cas) (cn.s ! n ! cas)} ; -- : N -> CN UseN n = nounFormsNoun n ; diff --git a/src/russian/QuestionRus.gf b/src/russian/QuestionRus.gf index f3339f20e..9c1c0d90c 100644 --- a/src/russian/QuestionRus.gf +++ b/src/russian/QuestionRus.gf @@ -10,7 +10,7 @@ lin -- : IP -> VP -> QCl ; -- who walks QuestVP ip vp = { subj=ip.nom ; - adv=[] ; + adv=vp.adv ! ip.a ; verb=vp.verb ; dep=vp.dep ; compl=vp.compl ! ip.a ; --??? @@ -63,7 +63,7 @@ lin -- : IDet -> CN -> IP ; -- which five songs IdetCN idet cn = caseTableToRecord (\\cas => idet.s ! cn.g ! cn.anim ! cas - ++ cn.s ! numSizeNum idet.size ! numSizeCase idet.size) + ++ cn.s ! numSizeNum cas idet.size ! numSizeCase cas idet.size) (Ag (gennum cn.g (numSizeNumber idet.size)) P3) cn.anim ; -- : IDet -> IP ; -- which five diff --git a/src/russian/ResRus.gf b/src/russian/ResRus.gf index f1a03fe34..072350219 100644 --- a/src/russian/ResRus.gf +++ b/src/russian/ResRus.gf @@ -1183,13 +1183,6 @@ oper Num2_4 => "тысячи" ; -- NumAll ? _ => "тысяч" } ; - sizeNumCase : (Number => Case => Str) -> NumSize -> Str - = \nt,size -> case size of { - Num1 => nt ! Sg ! Nom ; - Num2_4 => nt ! Sg ! Gen ; --? - Num5 => nt ! Pl ! Gen ; - NumAll => nt ! Pl ! Nom - } ; --------------- -- Adverbs -- Наречия @@ -1215,10 +1208,20 @@ oper = \ns -> case ns of {Num1 => Sg ; NumAll | Num2_4 | Num5 => Pl} ; -- The following two used in tandem to form the word, controlled by numeral - numSizeNum : NumSize -> Number - = \ns -> case ns of {Num1 | Num2_4 => Sg ; Num5 | NumAll => Pl} ; - numSizeCase : NumSize -> Case - = \ns -> case ns of {Num1 | NumAll => Nom ; Num2_4 | Num5 => Gen} ; + numSizeNum : Case -> NumSize -> Number + = \cas,ns -> case of { + => Sg ; + <_,Num1> => Sg ; + _ => Pl + } ; + numSizeCase : Case -> NumSize -> Case + = \cas,ns -> case of { + => Nom ; + => Gen ; + => Nom ; + => Gen ; + _ => cas + } ; oper -- TODO: ComplementCase : Type = {s : Str ; c : Case ; hasPrep : Bool} ; diff --git a/src/russian/SentenceRus.gf b/src/russian/SentenceRus.gf index 9956c6f94..baf5dc944 100644 --- a/src/russian/SentenceRus.gf +++ b/src/russian/SentenceRus.gf @@ -12,8 +12,8 @@ lin Infinitive => let parts = R.verbAgr cl.verb Infinitive temp.t cl.a pol.p in temp.s ++ parts.p1 ++ cl.subj ++ pol.s ++ cl.adv ++ parts.p2 ++ cl.dep ++ cl.compl ; Ind => let parts = R.verbAgr cl.verb Ind temp.t cl.a pol.p in --- temp.s ++ parts.p1 ++ cl.subj ++ pol.s ++ cl.adv ++ parts.p2 ++ cl.dep ++ cl.compl ; - temp.s ++ cl.adv ++ pol.s ++ parts.p1 ++ parts.p2 ++ cl.dep ++ cl.subj ++ cl.compl ; + temp.s ++ parts.p1 ++ cl.subj ++ pol.s ++ cl.adv ++ parts.p2 ++ cl.dep ++ cl.compl ; +-- temp.s ++ cl.adv ++ pol.s ++ parts.p1 ++ parts.p2 ++ cl.dep ++ cl.subj ++ cl.compl ; Sbjv => let parts = R.verbAgr cl.verb Sbjv temp.t cl.a pol.p in temp.s ++ parts.p1 ++ cl.subj ++ pol.s ++ cl.adv ++ parts.p2 ++ cl.dep ++ cl.compl ; Imperative => let parts = R.verbAgr cl.verb Imperative temp.t cl.a pol.p in @@ -102,7 +102,7 @@ lin -- : NP -> VP -> Cl ; -- John walks - Иван гуляет PredVP np vp = { subj=np.s ! Nom ; - adv=[] ; + adv=vp.adv ! np.a ; verb=vp.verb ; dep=vp.dep ; compl=vp.compl ! np.a ; @@ -112,7 +112,7 @@ lin -- : SC -> VP -> Cl ; -- that she goes is good - что она идёт есть хорошо PredSCVP sc vp = { subj=sc.s ; - adv=[] ; + adv=vp.adv ! (Ag (GSg Neut) P3) ; -- ??? verb=vp.verb ; dep=vp.dep ; compl=vp.compl ! Ag (GSg Neut) P3 ; -- ??? diff --git a/src/russian/StructuralRus.gf b/src/russian/StructuralRus.gf index 1d0ca1745..d991c66ea 100644 --- a/src/russian/StructuralRus.gf +++ b/src/russian/StructuralRus.gf @@ -144,8 +144,8 @@ lin => "скольких" -- also as Nom? } ; g=Neut ; - size=NumAll ; --it depends??? - c=Nom --??? + size=Num5 ; --it depends??? + c=Gen --??? } ; almost_AdA = ss "почти" ; diff --git a/src/russian/SymbolRus.gf b/src/russian/SymbolRus.gf index 90f304c76..c2adbb2b4 100644 --- a/src/russian/SymbolRus.gf +++ b/src/russian/SymbolRus.gf @@ -23,7 +23,7 @@ lin -- : Det -> CN -> [Symb] -> NP ; -- (the) (2) numbers x and CNSymbNP det cn xs = { - s=\\cas => det.s ! cn.g ! cn.anim ! cas ++ sizeNumCase cn.s det.size ++ xs.s ; + s=\\cas => det.s ! cn.g ! cn.anim ! cas ++ cn.s ! numSizeNum cas det.size ! numSizeCase cas det.size ++ xs.s ; pron=False ; a=Ag (gennum cn.g (numSizeNumber det.size)) P3 } ; diff --git a/src/russian/VerbRus.gf b/src/russian/VerbRus.gf index e75285c6e..ceab2093a 100644 --- a/src/russian/VerbRus.gf +++ b/src/russian/VerbRus.gf @@ -20,7 +20,7 @@ lin -- : VV -> VP -> VP ; -- want to run ComplVV vv vp = vp ** { verb=vv.v ; - dep=verbInf vp.verb ; + dep=verbInf vp.verb ++ vp.dep ; adv=\\a=>vv.modal ! a ++ vp.adv ! a } ; @@ -111,7 +111,7 @@ lin -- : VPSlash -> NP -> VP ; -- love it ComplSlash vps np = vps ** { - compl=\\a => vps.compl ! a ++ (applyPrep vps.c np) -- hasPrep? order? + compl=\\a => vps.compl ! np.a ++ (applyPrep vps.c np) -- hasPrep? order? compl agr lost? } ; -- : VV -> VPSlash -> VPSlash ; -- want to buy diff --git a/src/russian/ZaliznyakAlgo.gf b/src/russian/ZaliznyakAlgo.gf index e85022526..c723fe496 100644 --- a/src/russian/ZaliznyakAlgo.gf +++ b/src/russian/ZaliznyakAlgo.gf @@ -894,7 +894,8 @@ oper => 6 ; => 4 ; -- после шип -- here and below alternations possible => 5 ; - _ => Predef.error ("Error: guessing verb conjugation does not work for:" + sg1 + sg3.p1 + ":" + inf + ":" + sgP1PresFut + ":" + sgP3PresFut) + -- _ => 1 + _ => Predef.error ("Error: guessing verb conjugation does not work for:" + sg1 + sg3.p1 + ":" + inf + ":" + sgP1PresFut + ":" + sgP3PresFut) } in _B; _ => _A}) _A), refl> ; makeVerb : Str -> Str -> Str -> ZVIndex -> Aspect -> Transitivity -> Reflexivity -> VerbForms diff --git a/src/russian/todo.txt b/src/russian/todo.txt index a96490b2f..64a537e25 100644 --- a/src/russian/todo.txt +++ b/src/russian/todo.txt @@ -1,5 +1,9 @@ # Some problematic places + +AllRusAbs: UseCl (TTAnt TFut ASimul) PPos (PredVP (AdvNP (CountNP much_Det (DetCN (DetQuant DefArt NumSg) (UseN house_N))) (weekdayNextAdv monday_Weekday)) ready_VP) +AllRus: многие из дом в следующий понедельник будет готовым + > l UttS (AdvS (AdAdv quite_Adv (ComparAdvAdj less_CAdv narrow_A everything_NP)) (UseCl (TTAnt TPres ASimul) PNeg (ExistNP something_NP))) довольно менее узко , чем всё не существовает что &+ -то @@ -18,9 +22,6 @@ LangRus: расстояние от вашего брат всего быть г > l (RelNP everybody_NP (UseRCl (TTAnt TFut ASimul) PPos (RelVP IdRP ill_VP))) все , которые будет больны -> l timeunitRange (NumDigits (IDig D_1)) (NumDigits (IDig D_2)) year_Timeunit -от 1 до 2 года - AllRusAbs: UseCl (TTAnt TPres AAnter) PNeg (CleftNP (PredetNP not_Predet (CountNP somePl_Det everybody_NP)) (UseRCl (TTAnt TFut AAnter) PNeg (RelVP IdRP ready_VP))) AllRus: это не не некоторые из всех , которые не будет готовы @@ -37,3 +38,22 @@ AllRus: это не не некоторые из всех , которые не AllRusAbs: UttImpPol PPos (ImpVP (ComplSlash (Slash2V3 add_V3 everybody_NP) (PPartNP somebody_NP drink_V2))) AllRus: складываем &+ те всех в кого &+ -то пит +** UseCl (TTAnt TPres ASimul) PPos (ExistNP (DetCN (DetQuant this_Quant (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot1 ∅))))))) (UseN worm_N))) +LangRus-NEW> существуют двадцать эти червей + +** UseCl (TTAnt TPres ASimul) PPos (GenericCl (ComplSlash (SlashV2a like_V2) (DetCN (DetQuant this_Quant (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot1 ∅))))))) (UseN woman_N)))) +LangRus-NEW> нравишься двадцати этим женщин + +** UseCl (TTAnt TPres ASimul) PPos (GenericCl (ComplSlash (SlashV2a speak_V2) (DetCN (DetQuant this_Quant (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 ∅)))))))) (UseN person_N)))) +LangRus-NEW> говоришь на двух этих лица + +** UseCl (TTAnt TPres ASimul) PPos (ExistNP (CountNP someSg_Det (DetCN (DetQuant this_Quant (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot1 ∅))))))) (UseN worm_N)))) +LangRus-NEW> существуют некоторое из двадцати этих червей + +Lang: AdvVP (ExtAdvVP (ComplVV must_VV (AdVVP always_AdV scared_VP)) (weekdayNextAdv tuesday_Weekday)) here7from_Adv +LangRus: должно всегда бояться , в следующую вторник , отсюда + +> l AdvVP (ComplSlash (SlashV2V beg_V2V ready_VP) (ExtAdvNP everybody_NP there7from_Adv)) already_Adv +просить быть готовыми всех , оттуда , уже + +Inherent number for nouns. eg, for geonames or pluralia tantum.