Symbolic and Nound fixes for Russian

This commit is contained in:
Nick Frolov
2011-11-24 16:13:08 +00:00
parent f1cacffc98
commit 31e1a657f9
7 changed files with 74 additions and 33 deletions

View File

@@ -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"]

View File

@@ -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") ;
}

View File

@@ -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 = <>} ;

View File

@@ -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

View File

@@ -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 ;

View File

@@ -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 "слишком" ;

View File

@@ -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 "," ;
}