1
0
forked from GitHub/gf-rgl

Fixes to num size and other fixes

This commit is contained in:
Roman Suzi
2020-07-25 19:32:57 +03:00
parent 74485ab138
commit 3fc6efec77
10 changed files with 67 additions and 46 deletions

View File

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

View File

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

View File

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

View File

@@ -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 <cas,ns> of {
<Nom|Acc,Num2_4> => Sg ;
<_,Num1> => Sg ;
_ => Pl
} ;
numSizeCase : Case -> NumSize -> Case
= \cas,ns -> case <cas,ns> of {
<Nom,Num1 | NumAll> => Nom ;
<Nom,Num2_4 | Num5> => Gen ;
<Acc,Num1 | NumAll> => Nom ;
<Acc,Num2_4 | Num5> => Gen ;
_ => cas
} ;
oper -- TODO:
ComplementCase : Type = {s : Str ; c : Case ; hasPrep : Bool} ;

View File

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

View File

@@ -144,8 +144,8 @@ lin
<Animate,Acc> => "скольких" -- also as Nom?
} ;
g=Neut ;
size=NumAll ; --it depends???
c=Nom --???
size=Num5 ; --it depends???
c=Gen --???
} ;
almost_AdA = ss "почти" ;

View File

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

View File

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

View File

@@ -894,7 +894,8 @@ oper
<I | I', i+("ать"|"ять"), s2, s3> => 6 ;
<II, i+"ить", s2, s3> => 4 ; -- после шип -- here and below alternations possible
<II, i+("ать"|"ять"|"еть"), s2, s3> => 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 <ZV conjtype No (VSS (case sg3.p2 of {I' => _B; _ => _A}) _A), refl> ;
makeVerb : Str -> Str -> Str -> ZVIndex -> Aspect -> Transitivity -> Reflexivity -> VerbForms

View File

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