1
0
forked from GitHub/gf-rgl

(Fin) add 2 new mk2NnumCase funs outside API

now supports sg gen, sg par and sg ill as 2nd argument to mk2N<numCase>
This commit is contained in:
Inari Listenmaa
2022-09-29 16:07:56 +02:00
parent 7c2c519e50
commit 2ef266052f

View File

@@ -499,8 +499,15 @@ mkVS = overload {
---- mkNA : N -> A = snoun2sadj ;
mk1N : (talo : Str) -> N = \s -> lin N (nforms2snoun (nForms1 s)) ;
mk2N : (talo,taloja : Str) -> N = \s,t -> lin N (nforms2snoun (nForms2 s t)) ;
mk2NsgGen : (talo,talon : Str) -> N = \sgnom,sggen -> lin N (nforms2snoun (nForms2sgGen sgnom sggen)) ; -- When we have access to the singular genitive but not plural partitive, e.g. from some dump of lemmatised nouns
-- When we have access to the some other form than plural partitive, e.g. from some dump of lemmatised nouns
mk2NsgGen : (talo,talon : Str) -> N =
\sgnom,sggen -> lin N (nforms2snoun (nForms2sgGen sgnom sggen)) ;
mk2NsgPar : (talo,taloa : Str) -> N =
\sgnom,sgpar -> lin N (nforms2snoun (nForms2sgPar sgnom sgpar)) ;
mk2NsgIll : (talo,taloon : Str) -> N =
\sgnom,sgill -> lin N (nforms2snoun (nForms2sgIll sgnom sgill)) ;
mk3N : (talo,talon,taloja : Str) -> N = \s,t,u -> lin N (nforms2snoun (nForms3 s t u)) ;
mk4N : (talo,talon,taloa,taloja : Str) -> N = \s,t,u,v ->
lin N (nforms2snoun (nForms4 s t u v)) ;
@@ -671,6 +678,7 @@ mkVS = overload {
_ => case <sydan,sydamen> of {
<_ + "s", _ + "ksen"> => dJalas sydan ;
<_ + "s", _ + "den"> => dLujuus sydan ;
<_ + "s", _ + "hen"> => d42 sydan ;
<_ + ("as"|"äs"), _ + ("aan"|"ään")> => dRae sydan sydamen ;
<_ + "n", _ + "men"> => dLiitin sydan sydamen ;
<_ + "in", _ + ("imman"|"immän")> => dSuurin sydan ;
@@ -679,10 +687,75 @@ mkVS = overload {
<_ + "mpi", _ + ("emman" | "emmän")> => dSuurempi sydan ;
<_ + "e", _ + "een"> => dRae sydan sydamen ;
<_ + "e", _ + "en"> => dNukke sydan sydamen ;
<_ + "ut", _ + "een"> => dOttanut sydan ; -- kuollut, kuolleen
<_ + "ut", _ + "en"> => dRae sydan sydamen ; -- olut, oluen
_ => regSydan -- TODO: see what cases still fail and if SgGen helps
}
} ;
-- like nForms2, but 2nd argument is Sg Partitive
nForms2sgPar : (sydan,sydanta : Str) -> NForms = \sydan,sydanta ->
table {
2 => sydanta ; -- insert the given Sg Par form in the table
n => guessedSydan ! n} -- otherwise, use the guessed forms
where {
-- a couple of guesses for genitive
oven : Str = init sydan + "en" ; -- ov|i| -> |en|
kynnen : Str = init (init sydan) + "nen" ; -- kyn|si| -> |nen|
r : Str = case last sydan of {"n" => "m" ; x => x} ; -- gen stem consonant for piennar, liitin
pientaren : Str = strongGrade (init sydan) + r + "en" ;
-- then we form a full paradigm with a genitive guessed from the SgNom+SgPar
guessedSydan : NForms = case <sydan,sydanta> of {
<_ + "i", _ + ("ea"|"eä")> => dArpi sydan oven ;
<_ + "nsi", _ + "ntt" + ("a"|"ä")> => dArpi sydan kynnen ;
<_ + ("psi"|"tsi"), _ + ("sta"|"stä")> => dArpi sydan oven ; -- laps|i|->|en|, veits|i|->|en|
<_ + "i", _ + ("nta"|"ntä")> => dArpi sydan oven ;
<_ + "r", _ + ("rta"|"rtä")> => dPiennar sydan pientaren ;
<_ + ("on"|"ön"), _ + ("nta"|"ntä")> => dOnneton sydan ;
<_ + "in", _ + ("nta"|"ntä")> => dLiitin sydan pientaren ; -- can't distinguish between dLämmin or dLiitin from Sg Par only
<_ + "s", ("sta"|"stä")> => dJalas sydan ;
<_ + ("us"|"ys"), ("tta"|"ttä")> => dLujuus sydan ; -- can't distinguish between dLujuus and dKaunis from Sg Par only
<_ + "s" , ("tta"|"ttä")> => dKaunis sydan ;
<_ + "t" , ("tta"|"ttä")> => dRae sydan oven ; -- olu|t| -> |en| — can't distinguish between kuollut and olut
_ => nForms1 sydan }
} ;
-- like nForms2, but 2nd argument is Sg Illative
nForms2sgIll : (sydan,sydameen : Str) -> NForms = \sydan,sydameen ->
table {
4 => sydameen ; -- insert the given Sg Ill form in the table
n => guessedSydan ! n} -- otherwise, use the guessed forms
where {
-- a couple of guesses for genitive
oven : Str = init (init sydameen) + "n" ; -- keep grade from Ill: ove|en| -> ove|n| ; liittime|en| -> liittime|n|
käden : Str = weakGrade (init (init sydameen)) + "n" ; -- weaken grade from Ill: kä|tee|n -> kä|de|n
rakeen : Str = strongGrade sydan + "en" ; -- strong grade from Nom: ra||e -> ra|k|e+en
guessedSydan : NForms = case <sydan,sydameen> of {
<_ + ("aa"|"ää"|"uu"|"yy"|"oo"|"öö"),
_ + "seen"> => dPaluu sydan ;
<_ + "si", _ + "teen"> => dArpi sydan käden ; -- käsi, kynsi
<_ + "i", _ + "een"> => dArpi sydan oven ; -- ovi, lapsi, virsi
<_ + "e", _ + "eeseen"> => dRae sydan rakeen ; -- hame, rae
<_ + "e", _ + "een"> => dNukke sydan käden ; -- nukke
<_ + "t", _ + "eeseen"> => dOttanut sydan ; -- kuollut
<_ + "t", _ + "een"> => dRae sydan oven ; -- olut
<_ + "n", _ + "meen"> => dLiitin sydan oven ;
<_ + "n", _ + ("maan"|"mään")> => dOnneton sydan ;
<_ + "s", _ + "kseen"> => dJalas sydan ; -- Sg Ill can distinguish between jalas, lujuus, kahdeksas, kaunis and mies
<_ + "s", _ + "nteen"> => d45 sydan ;
<_ + "s", _ + "teen"> => dLujuus sydan ;
<_ + "s", _ + "seen"> => dKaunis sydan ;
<_ + "s", _ + "heen"> => d42 sydan ;
_ => nForms1 sydan }
} ;
--- this is a paradigm hidden from the API. It should not be used without caution
invarN : Str -> N = \s -> <lin N {s = \\_ => s ; h = Back} : N> ;