forked from GitHub/gf-core
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"]
|
||||
|
||||
-- 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"]
|
||||
|
||||
@@ -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") ;
|
||||
|
||||
}
|
||||
@@ -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 = <>} ;
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
@@ -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 "слишком" ;
|
||||
|
||||
@@ -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 "," ;
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user