catalan_smart_paradigms

MorphoCat and ParadigmsCat: smart paradigms for adjectives. 
ExtraCat: added costruction for negative imperative.
This commit is contained in:
inari.listenmaa
2012-10-19 09:36:37 +00:00
parent e666fa838f
commit 606f8bece8
4 changed files with 202 additions and 67 deletions

View File

@@ -1,9 +1,12 @@
concrete ExtraCat of ExtraCatAbs = ExtraRomanceCat ** concrete ExtraCat of ExtraCatAbs = ExtraRomanceCat **
open CommonRomance, ParadigmsCat, PhonoCat, MorphoCat, ParamX, ResCat in { open CommonRomance, ParadigmsCat, PhonoCat, MorphoCat, ParamX, ResCat,
Prelude in {
flags coding = utf8 ;
lin lin
i8fem_Pron = mkPronoun i8fem_Pron = mkPronoun
"jo" "em" "em" "mi" ["el meu"] ["la meva"] ["els meus"] ["les meves"] "jo" "em" "em" "mi"
["el meu"] ["la meva"] ["els meus"] ["les meves"]
Fem Sg P1 ; Fem Sg P1 ;
these8fem_NP = makeNP "aquestes" Fem Pl ; these8fem_NP = makeNP "aquestes" Fem Pl ;
@@ -32,13 +35,19 @@ lin
["el vostre"] ["la vostra"] ["els vostres"] ["les vostres"] ["el vostre"] ["la vostra"] ["els vostres"] ["les vostres"]
Fem Pl P2 ; Fem Pl P2 ;
youPol8fem_Pron = mkPronoun youPol8fem_Pron = mkPronoun
"vosté" "la" "li" "vosté" "vostè" "la" "li" "vostè"
["el seu"] ["la seva"] ["els seus"] ["les seves"] ["el seu"] ["la seva"] ["els seus"] ["les seves"]
Fem Sg P3 ; Fem Sg P3 ;
--IL 2012-10-12
ImpNeg np vp = lin Utt{
s = (mkClause (np.s ! Nom).comp np.hasClit False np.a vp).s
! DInv ! RPres ! Simul ! RNeg False ! Conjunct
} ;
oper oper
vostePl : ParadigmsCat.Gender -> Pron = \g -> lin Pron (mkPronoun vostePl : ParadigmsCat.Gender -> Pron = \g -> lin Pron (mkPronoun
"vostés" "els" "li" "vostés" "vostès" "els" "li" "vostès"
"llur" "llur" "llurs" "llurs" "llur" "llur" "llurs" "llurs"
g Pl P3) ; g Pl P3) ;
lin lin

View File

@@ -25,4 +25,5 @@ fun
youPolPl_Pron : Pron ; -- vostés youPolPl_Pron : Pron ; -- vostés
youPolPl8fem_Pron : Pron ; youPolPl8fem_Pron : Pron ;
ImpNeg : NP -> VP -> Utt ; --IL 2012-10-12
} }

View File

@@ -97,34 +97,156 @@ oper
mkAdj prim (prim + "a") (prim + "s") (prim + "es") (prim + "ament") ; mkAdj prim (prim + "a") (prim + "s") (prim + "es") (prim + "ament") ;
adjBlau : Str -> Str -> Adj = \blau,blava -> adjBlau : Str -> Str -> Adj = \blau,blava ->
let let blav = Predef.tk 1 blava
blav = Predef.tk 1 blava in mkAdj blau blava (blau + "s") (blav + "es")
in (blava + "ment") ;
mkAdj blau blava (blau + "s") (blav + "es") (blava + "ment") ;
adjFondo : Str -> Adj = \fondo -> adjFondo : Str -> Adj = \fondo ->
let let fond = Predef.tk 1 fondo
fond = Predef.tk 1 fondo in adjBlau fondo (fond + "a") ;
in
adjBlau fondo (fond + "a") ;
adjBo : Str -> Adj = \bo -> adjBo : Str -> Adj = \bo ->
mkAdj bo (bo + "na") (bo + "ns") (bo + "nes") (bo + "nament") ; mkAdj bo (bo + "na") (bo + "ns") (bo + "nes") (bo + "nament") ;
adjFidel : Str -> Adj = \fidel -> adjFidel : Str -> Adj = \fidel ->
let let fidels : Str = case (last fidel) of {
fidels = fidel + "s" _ + ("s"|"ç"|"x") => fidel + "os" ; --feliç; capaç
in _ => fidel + "s"
mkAdj fidel fidel fidels fidels (fidel + "ment") ; } ;
in mkAdj fidel fidel fidels fidels
(fidel + "ment") ;
--boig, boja, bojos, boges
--lleig, lletja, lletjos, lletges
adjIg : Str -> Str -> Adj = \boig,boja ->
let boj : Str = tk 1 boja ;
llet : Str = tk 1 boj
in mkAdj boig (boj + "a") (boj + "os") (llet + "ges")
(boj + "ament") ;
--públic pública públics públiques
--llarg llarga llargs llargues
adjXc : Str -> Adj = \blanc ->
let blan : Str = init blanc ;
blanqu : Str = case last blanc of {
"c" => blan + "qu" ;
"g" => blan + "gu" --llarg, not boig.
} ;
in mkAdj blanc (blanc + "a")
(blanc + "s") (blanqu + "es")
(blanc + "ament") ;
--sibilant endings
adjXs : Str -> Str -> Adj = \famos,famosa ->
let russ : Str = tk 1 famosa ;
in mkAdj famos famosa (russ + "os") (russ + "es")
(russ + "ament") ;
-- català catalana catalans catalanes
adjVn : Str -> Adj = \catalA ->
let catal : Str = init catalA ;
v : Str = unaccent (last catalA) ;
catalVn : Str = catal + v + "n" ;
in mkAdj catalA (catalVn + "a")
(catalVn + "s") (catalVn + "es")
(catalVn + "ament") ;
--casat casada ; groc groga
adjCasat : Str -> Adj = \casat ->
let casa : Str = init casat ;
casad : Str = case last casat of {
"t" => casa + "d" ;
"c" => casa + "g"
} ;
grogu : Str = case last casad of {
"g" => casa + "gu" ;
_ => casad
} ;
in mkAdj casat (casad + "a")
(casat + "s") (grogu + "es")
(casad + "ament") ;
-- francès francesa francesos franceses
adjFrances : Str -> Adj = \francEs ->
let franc : Str = tk 2 francEs ;
e : Str = last (tk 1 francEs) ;
v : Str = unaccent e ;
francVs : Str = franc + v + "s"
in mkAdj francEs (francVs + "a")
(francVs + "os") (francVs + "es")
(francVs + "ament") ;
--europeu europea europeus europees
adjEuropeu : Str -> Adj = \europeu ->
let europe : Str = tk 1 europeu ;
in mkAdj europeu (europe + "a")
(europeu + "s") (europe + "es")
(europe + "ament") ;
--belga belga belgues belgues
adjBelga : Str -> Adj = \belga ->
let belg : Str = init belga ;
belgu : Str = case last belg of {
("g"|"c") => belg + "u" ;
_ => belg
} ;
belgues : Str = belgu + "es"
in mkAdj belga belga belgues belgues (belga + "ment") ;
mkAdjReg : Str -> Adj = \prim -> mkAdjReg : Str -> Adj = \prim ->
case prim of { case prim of {
-- _ + "e" + ("r"|"l") => adjPrim prim ; _ + "ll" => adjPrim prim ; --vell~vella
_ + "l" => adjFidel prim ; _ + "rn" => adjPrim prim ; --modern~moderna
_ + ("e"|"u"|"o") => adjFondo prim ; _ + ("l"|"n"|"ç") => adjFidel prim ; --local; gran; capaç. For espanyol~espanyola mk2A.
_ + "a" => adjBelga prim ; --invariable, -es in plural
_ + ("eu") => adjFidel prim ; --greu; breu. most "eu" are invariable, europeu and jueu with mk2A.
_ + ("au"|"ou"|"iu") => adjBlau prim (tk 1 prim + "va"); --blau; nou; viu
_ + ("e"|"o") => adjFondo prim ;
_ + "ig" => adjIg prim (tk 2 prim + "ja") ; --boig~boja. lleig~lletja with mk2A.
_ + ("c"|"g") => adjXc prim ; --públic; llarg. cec~cega with mk2A
_ + ("n"|"l"|"r"|"s") + "t" => adjPrim prim ; --mort,llest,distint
_ + "t" => adjCasat prim ; --tancat~tancada. petit~petita with mk2A.
_ + ("à"|"é"|"è"|"í"|"ó"|"ò"|"ú") => adjVn prim ; --comú~comuna
_ + ("à"|"é"|"è"|"í"|"ó"|"ò"|"ú") + "s" => adjFrances prim ;
_ + ("s"|"x") => adjXs prim (prim + "a") ; --divers~diversa
_ => adjPrim prim _ => adjPrim prim
} ; } ;
--Used for the following:
--diferent diferent : doesn't end in l/n/ç/eu but has invariant feminine
--petit petita petits petites : voiceless plosive in the stem.
--ridícul ridícula : ends in l/n/ç but is not invariant.
--lleig lletja : the geminated variant of boig boja
--bo bona ; pla plana : like adjVn, but for one syllable words
--diari diària ; ingenu ingènua : in feminine, stress in antepenultimate
--jueu jueva ; europeu europea : exceptional paradigms for "eu" ending
--rus russa : voiceless s in the stem
--groc groga : voiced g in the stem
mkAdj2Reg : Str -> Str -> Adj = \petit,petita ->
case <petit,petita> of {
<_, _ + ("b"|"c"|"d"|"e"|"f"|"g"|"h"|"i"|"j"|"k"|"l"|"m"|"n"|"o"|"p"|"q"|"r"|"s"|"t"|"u"|"v"|"x"|"y"|"z")> => adjFidel petit ; --feminine doesn't end in "a"
<p@(_ + ("t"|"l"|"ç")), p+"a"> => adjPrim petit ; --1) petit~petita 2) ridícul~ridícula, dolç~dolça
<_ + "ig", _> => adjIg petit petita ; --lleig~letja
<_, _+ "na"> => adjVn petit ; --pla~plana
<_, _ + ("à"|"é"|"è"|"í"|"ó"|"ò"|"ú") + _> => adjBlau petit petita ; --diari~diària
<_ + "u" , _ + "va"> => adjBlau petit petita ; --jueu~jueva
<_ + "eu", _ + "ea"> => adjEuropeu petit ; --europeu~europea
<_ + "s" , _> => adjXs petit petita ; --rus~russa
<_ + "c" , _ + "ga"> => adjCasat petit ; --groc~groga
_ => mkAdjReg petit
} ;
oper unaccent : Str -> Str = \vocal ->
case vocal of {
("é"|"è") => "e" ;
("ó"|"ò") => "o" ;
"à" => "a" ;
"í" => "i" ;
"ú" => "u" ;
_ => vocal
} ;
--2 Personal pronouns --2 Personal pronouns
-- --

View File

@@ -160,7 +160,7 @@ oper
-- them to prefix ones (i.e. ones placed before the noun in -- them to prefix ones (i.e. ones placed before the noun in
-- modification, as in "gran casa"), the following function is -- modification, as in "gran casa"), the following function is
-- provided. -- provided.
-- JS: What about vi bÛ -> bon vi ? -- JS: What about vi bo -> bon vi ?
prefixA : A -> A ; -- adjective before noun (default: after) prefixA : A -> A ; -- adjective before noun (default: after)
@@ -320,6 +320,7 @@ oper
mk5A a b c d e = mk5A a b c d e =
compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; lock_A = <>} ; compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; lock_A = <>} ;
mk2A a b = compADeg {s = \\_ => (mkAdj2Reg a b).s ; isPre = False ; lock_A = <>} ;
regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; lock_A = <>} ; regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; lock_A = <>} ;
prefA a = {s = a.s ; isPre = True ; lock_A = <>} ; prefA a = {s = a.s ; isPre = True ; lock_A = <>} ;
@@ -422,11 +423,13 @@ oper
mkA = overload { mkA = overload {
mkA : (util : Str) -> A = regA ; mkA : (util : Str) -> A = regA ;
mkA : (lleig,lletja : Str) -> A = mk2A ;
mkA : (fort,forta,forts,fortes,fortament : Str) -> A = mk5A ; mkA : (fort,forta,forts,fortes,fortament : Str) -> A = mk5A ;
mkA : (bo : A) -> (millor : A) -> A = mkADeg ; mkA : (bo : A) -> (millor : A) -> A = mkADeg ;
} ; } ;
mk5A : (fort,forta,forts,fortes,fortament : Str) -> A ; mk5A : (fort,forta,forts,fortes,fortament : Str) -> A ;
mk2A : (lleig,lletja : Str) -> A ;
regA : Str -> A ; regA : Str -> A ;
mkADeg : A -> A -> A ; mkADeg : A -> A -> A ;
compADeg : A -> A ; compADeg : A -> A ;