mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-23 19:42:50 -06:00
Symbolic and Nound fixes for Russian
This commit is contained in:
2
Setup.hs
2
Setup.hs
@@ -231,7 +231,7 @@ langsLang = langs `except` ["Amh","Ara","Lat","Hin","Tha","Tur"]
|
|||||||
langsAPI = langsLang `except` ["Hin","Ina","Tha"]
|
langsAPI = langsLang `except` ["Hin","Ina","Tha"]
|
||||||
|
|
||||||
-- languages for which to compile Symbolic
|
-- languages for which to compile Symbolic
|
||||||
langsSymbolic = langsAPI `except` ["Rus"]
|
langsSymbolic = langsAPI -- `except` ["Rus"]
|
||||||
|
|
||||||
-- languages for which to run demo test
|
-- languages for which to run demo test
|
||||||
langsDemo = langsLang `except` ["Ara","Hin","Ina","Tha"]
|
langsDemo = langsLang `except` ["Ara","Hin","Ina","Tha"]
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ concrete SentencesRus of Sentences = NumeralRus ** SentencesI - [
|
|||||||
NameNN, SHave, SHaveNo, SHaveNoMass, QDoHave, AHaveCurr
|
NameNN, SHave, SHaveNo, SHaveNoMass, QDoHave, AHaveCurr
|
||||||
] with
|
] with
|
||||||
(Syntax = SyntaxRus),
|
(Syntax = SyntaxRus),
|
||||||
-- (Symbolic = SymbolicRus),
|
(Symbolic = SymbolicRus),
|
||||||
(Lexicon = LexiconRus), (Grammar = GrammarRus) ** open Prelude, SyntaxRus in {
|
(Lexicon = LexiconRus), (Grammar = GrammarRus) ** open Prelude, SyntaxRus, (P = ParadigmsRus) in {
|
||||||
lin
|
lin
|
||||||
SHave p obj = mkS (mkCl (mkVP have_V3 obj p.name)) ;
|
SHave p obj = mkS (mkCl (mkVP have_V3 obj p.name)) ;
|
||||||
SHaveNo p obj = mkS (mkCl (mkVP have_not_V3 (mkNP 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) ;
|
AHaveCurr p curr = mkCl (mkVP have_V3 (mkNP aPl_Det curr) p.name) ;
|
||||||
|
|
||||||
|
lin NameNN = mkNP (P.mkN "NN") ;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -185,6 +185,7 @@ flags coding = utf8 ;
|
|||||||
Husband = xOf sing (P.mkN "муж") ;
|
Husband = xOf sing (P.mkN "муж") ;
|
||||||
Son = xOf sing (P.mkN "сын") ;
|
Son = xOf sing (P.mkN "сын") ;
|
||||||
Daughter = xOf sing (P.mkN "дочь" "дочери" "дочери" "дочь" "дочерью" "дочери" "дочь" "дочери" "дочерей" "дочерям" "дочерей" "дочерьми" "дочерях" P.feminine P.animate) ;
|
Daughter = xOf sing (P.mkN "дочь" "дочери" "дочери" "дочь" "дочерью" "дочери" "дочь" "дочери" "дочерей" "дочерям" "дочерей" "дочерьми" "дочерях" P.feminine P.animate) ;
|
||||||
|
-- Daughter = xOf sing E.daughter_N ;
|
||||||
Children = xOf plur L.child_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 ;
|
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 -> {
|
mkTransport : N -> {name : CN ; by : Adv} = \n -> {
|
||||||
name = mkCN n ;
|
name = mkCN n ;
|
||||||
by = SyntaxRus.mkAdv on_Prep (mkNP the_Det n)
|
by = SyntaxRus.mkAdv on_Prep (mkNP the_Det n)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
far_IAdv = ss "как далеко" ** {lock_IAdv = <>} ;
|
far_IAdv = ss "как далеко" ** {lock_IAdv = <>} ;
|
||||||
|
|||||||
@@ -58,9 +58,10 @@ concrete CatRus of Cat = CommonX ** open ResRus, Prelude in {
|
|||||||
-- Gender parameter is due to multiple determiners (Numerals in Russian)
|
-- Gender parameter is due to multiple determiners (Numerals in Russian)
|
||||||
-- like "mnogo"
|
-- like "mnogo"
|
||||||
-- The determined noun has the case parameter specific for the determiner
|
-- 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} ;
|
Det = {s : AdjForm => Str; n: Number; g: PronGen; c: Case; q: Bool} ;
|
||||||
Predet, Quant = {s : AdjForm => Str; g: PronGen; c: Case} ;
|
Predet, Quant = {s : AdjForm => Str; g: PronGen; c: Case; q: Bool} ;
|
||||||
|
|
||||||
-- Numeral
|
-- Numeral
|
||||||
|
|
||||||
|
|||||||
@@ -6,13 +6,24 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
|
|||||||
|
|
||||||
lin
|
lin
|
||||||
DetCN kazhduj okhotnik = {
|
DetCN kazhduj okhotnik = {
|
||||||
s = \\c => case kazhduj.c of {
|
s = \\c => case kazhduj.q of {
|
||||||
Nom =>
|
False =>
|
||||||
kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++
|
case kazhduj.c of {
|
||||||
okhotnik.s ! NF kazhduj.n (extCase c) ;
|
Nom =>
|
||||||
_ =>
|
kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++
|
||||||
kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++
|
okhotnik.s ! NF kazhduj.n (extCase c) ;
|
||||||
okhotnik.s ! NF kazhduj.n kazhduj.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 ;
|
n = kazhduj.n ;
|
||||||
p = P3 ;
|
p = P3 ;
|
||||||
pron = False;
|
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 ;
|
s = \\af => quant.s !af ++ num.s! (caseAF af) ! (genAF af) ++ ord.s!af ;
|
||||||
n = num.n ;
|
n = num.n ;
|
||||||
g = quant.g;
|
g = quant.g;
|
||||||
c = quant.c
|
c = quant.c;
|
||||||
|
-- q = notB (isNil (num.s ! Nom ! Masc))
|
||||||
|
q = False;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
DetQuant quant num = {
|
DetQuant quant num = {
|
||||||
s = \\af => quant.s !af ++ num.s! (caseAF af) ! (genAF af) ;
|
s = \\af => quant.s !af ++ num.s! (caseAF af) ! (genAF af) ;
|
||||||
n = num.n ;
|
n = num.n ;
|
||||||
g = quant.g;
|
g = quant.g;
|
||||||
c = quant.c
|
c = quant.c;
|
||||||
|
-- q = notB (isNil (num.s ! Nom ! Masc))
|
||||||
|
q = False;
|
||||||
} ;
|
} ;
|
||||||
{-
|
{-
|
||||||
DetArtOrd quant num ord = {
|
DetArtOrd quant num ord = {
|
||||||
@@ -131,7 +146,7 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
|
|||||||
anim = okhotnik.anim
|
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 ;
|
NumCard c = c ;
|
||||||
NumSg = {s = \\_,_ => [] ; n = Sg} ;
|
NumSg = {s = \\_,_ => [] ; n = Sg} ;
|
||||||
@@ -149,8 +164,8 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
|
|||||||
|
|
||||||
OrdSuperl a = {s = a.s!Posit};
|
OrdSuperl a = {s = a.s!Posit};
|
||||||
|
|
||||||
DefArt = {s = \\_=>[] ; c=Nom; g = PNoGen };
|
DefArt = {s = \\_=>[] ; c=Nom; g = PNoGen; q = False };
|
||||||
IndefArt = { s = \\_=>[] ; c=Nom; g = PNoGen };
|
IndefArt = { s = \\_=>[] ; c=Nom; g = PNoGen; q = False };
|
||||||
|
|
||||||
UseN noun = noun ;
|
UseN noun = noun ;
|
||||||
UseN2 noun = noun ;
|
UseN2 noun = noun ;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ lin
|
|||||||
above_Prep = { s = "над" ; c = Inst} ;
|
above_Prep = { s = "над" ; c = Inst} ;
|
||||||
after_Prep = { s = "после" ; c = Gen };
|
after_Prep = { s = "после" ; c = Gen };
|
||||||
-- all8mass_Det = vesDet ** {n = Sg; g = PNoGen; c = Nom} ;
|
-- 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_AdA = {s= "почти"} ;
|
||||||
almost_AdN = {s= "почти"} ;
|
almost_AdN = {s= "почти"} ;
|
||||||
although_Subj = ss "хотя" ;
|
although_Subj = ss "хотя" ;
|
||||||
@@ -33,11 +33,11 @@ lin
|
|||||||
during_Prep = { s = ["в течение"] ; c = Gen};
|
during_Prep = { s = ["в течение"] ; c = Gen};
|
||||||
either7or_DConj = sd2 "либо" [", либо"] ** {n = Sg} ;
|
either7or_DConj = sd2 "либо" [", либо"] ** {n = Sg} ;
|
||||||
-- comma is not visible in GUI!
|
-- 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=<>})) ;
|
everybody_NP = mkNP Pl (UseN ((eEnd_Decl "вс")**{lock_N=<>})) ;
|
||||||
everything_NP = UsePron (pronVseInanimate ** {lock_Pron=<>}) ;
|
everything_NP = UsePron (pronVseInanimate ** {lock_Pron=<>}) ;
|
||||||
everywhere_Adv = ss "везде" ;
|
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
|
--- DEPREC first_Ord = (uy_j_EndDecl "перв" ) ** {lock_A = <>}; --AStaruyj
|
||||||
for_Prep = { s = "для" ; c = Gen };
|
for_Prep = { s = "для" ; c = Gen };
|
||||||
from_Prep = { s = "от" ; c = Gen };
|
from_Prep = { s = "от" ; c = Gen };
|
||||||
@@ -54,19 +54,19 @@ lin
|
|||||||
in_Prep = { s = "в" ; c = Prepos PrepVNa } ;
|
in_Prep = { s = "в" ; c = Prepos PrepVNa } ;
|
||||||
it_Pron = pronOno ;
|
it_Pron = pronOno ;
|
||||||
less_CAdv = {s="менее"; p=""} ;
|
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=""} ;
|
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: "большинство телефонов безмолству-ет"
|
-- inanimate, Sg: "большинство телефонов безмолству-ет"
|
||||||
-- most8many_Det = bolshinstvoPlDet ** {n = Pl; g = (PGen Neut); c= Gen} ;
|
-- most8many_Det = bolshinstvoPlDet ** {n = Pl; g = (PGen Neut); c= Gen} ;
|
||||||
-- animate, Pl: "большинство учащихся хорошо подготовлен-ы"
|
-- 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 ;
|
must_VV = verbDolzhen ;
|
||||||
no_Utt = ss ["Нет"] ;
|
no_Utt = ss ["Нет"] ;
|
||||||
on_Prep = { s = "на" ; c = Prepos PrepVNa };
|
on_Prep = { s = "на" ; c = Prepos PrepVNa };
|
||||||
--- DEPREC one_Quant = odinDet ** {lock_QuantSg = <>; n= Sg; g = PNoGen; c = Nom };
|
--- DEPREC one_Quant = odinDet ** {lock_QuantSg = <>; n= Sg; g = PNoGen; c = Nom };
|
||||||
--AStaruyj :
|
--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} ;
|
or_Conj = {s1= [] ; s2 = "или" ; n = Sg} ;
|
||||||
otherwise_PConj = ss "иначе" ;
|
otherwise_PConj = ss "иначе" ;
|
||||||
part_Prep = { s = "" ; c = Nom}; -- missing in Russian
|
part_Prep = { s = "" ; c = Nom}; -- missing in Russian
|
||||||
@@ -76,17 +76,17 @@ lin
|
|||||||
she_Pron = pronOna ;
|
she_Pron = pronOna ;
|
||||||
so_AdA = ss "так";
|
so_AdA = ss "так";
|
||||||
somebody_NP = UsePron (pronKtoTo** {lock_Pron = <>});
|
somebody_NP = UsePron (pronKtoTo** {lock_Pron = <>});
|
||||||
someSg_Det = nekotorujDet ** {n = Sg; g = PNoGen; c= Nom} ;
|
someSg_Det = nekotorujDet ** {n = Sg; g = PNoGen; c= Nom; q = False} ;
|
||||||
somePl_Det = nekotorujDet ** {n = Pl; g = PNoGen; c= Nom} ;
|
somePl_Det = nekotorujDet ** {n = Pl; g = PNoGen; c= Nom; q = False} ;
|
||||||
something_NP = UsePron (pronChtoTo** {lock_Pron=<> }) ;
|
something_NP = UsePron (pronChtoTo** {lock_Pron=<> }) ;
|
||||||
somewhere_Adv = ss "где-нибудь" ;
|
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 "там" ;
|
there_Adv = ss "там" ;
|
||||||
there7to_Adv = ss "туда" ;
|
there7to_Adv = ss "туда" ;
|
||||||
there7from_Adv = ss "оттуда" ;
|
there7from_Adv = ss "оттуда" ;
|
||||||
therefore_PConj = ss "следовательно" ;
|
therefore_PConj = ss "следовательно" ;
|
||||||
they_Pron = pronOni;
|
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 };
|
through_Prep = { s = "через" ; c = Acc };
|
||||||
to_Prep = { s = "к" ; c = Dat };
|
to_Prep = { s = "к" ; c = Dat };
|
||||||
too_AdA = ss "слишком" ;
|
too_AdA = ss "слишком" ;
|
||||||
|
|||||||
@@ -3,8 +3,29 @@
|
|||||||
concrete SymbolRus of Symbol = CatRus ** open Prelude, ResRus in {
|
concrete SymbolRus of Symbol = CatRus ** open Prelude, ResRus in {
|
||||||
|
|
||||||
{- TODO! -}
|
{- TODO! -}
|
||||||
-- lin
|
lin
|
||||||
-- SymbPN i = {s = i.s ; g = Neut } ;
|
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
|
lincat
|
||||||
|
|
||||||
@@ -13,7 +34,8 @@ lincat
|
|||||||
lin
|
lin
|
||||||
MkSymb s = s ;
|
MkSymb s = s ;
|
||||||
|
|
||||||
-- BaseSymb = infixSS "and" ;
|
BaseSymb = infixSS "и" ;
|
||||||
ConsSymb = infixSS "," ;
|
ConsSymb = infixSS "," ;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user