GF summer school for Cat

This commit is contained in:
jordi.saludes
2009-09-01 07:30:04 +00:00
parent 784d327505
commit bd8ddf4a14
5 changed files with 185 additions and 125 deletions

View File

@@ -6,11 +6,11 @@ concrete ExtraCat of ExtraCatAbs = ExtraRomanceCat **
-- "yo" "me" "me" "mí" -- "yo" "me" "me" "mí"
-- "mi" "mi" "mis" "mis" -- "mi" "mi" "mis" "mis"
-- Fem Sg P1 ; -- Fem Sg P1 ;
-- these8fem_NP = mkNP ["estas"] Fem Pl ; these8fem_NP = mkNP "aquestes" Fem Pl ;
-- they8fem_Pron = mkPronoun they8fem_Pron = mkPronoun
-- "ellas" "las" "les" "ellas" "elles" "les" "les" "elles"
-- "su" "su" "sus" "sus" "llur" "llur" "llurs"
-- Fem Pl P3 ; Fem Pl P3 ;
-- this8fem_NP = pn2np (mkPN ["esta"] Fem) ; -- this8fem_NP = pn2np (mkPN ["esta"] Fem) ;
-- those8fem_NP = mkNP ["esas"] Fem Pl ; -- those8fem_NP = mkNP ["esas"] Fem Pl ;

View File

@@ -10,6 +10,7 @@ oper
regFN : Str -> N = \s -> femN (regN s) ; regFN : Str -> N = \s -> femN (regN s) ;
regMN : Str -> N = \s -> regN s ; regMN : Str -> N = \s -> regN s ;
irregMN : Str -> Str -> N = \pa,pans -> M.mkNounIrreg pa pans masculine ; irregMN : Str -> Str -> N = \pa,pans -> M.mkNounIrreg pa pans masculine ;
saberV : V = verbV (saber_99 "saber") ;
lin lin
airplane_N = regMN "avió" ; airplane_N = regMN "avió" ;
@@ -106,7 +107,8 @@ lin
industry_N = regFN "indústria" ; industry_N = regFN "indústria" ;
iron_N = regMN "ferro" ; iron_N = regMN "ferro" ;
king_N = regMN "rei" ; king_N = regMN "rei" ;
know_V2 = dirV2 (verbV (saber_99 "saber")) ; know_V2 = dirV2 saberV ;
know_VS = mkVS saberV;
lake_N = regMN "llac" ; lake_N = regMN "llac" ;
lamp_N = regFN "làmpada" ; lamp_N = regFN "làmpada" ;
learn_V2 = dirV2 (verbV (aprendre_6 "aprendre")) ; learn_V2 = dirV2 (verbV (aprendre_6 "aprendre")) ;

View File

@@ -1,45 +1,59 @@
--# -path=.:../romance:../common:../../prelude --# -path=.:../romance:../common:../../prelude
----1 A Simple Catalan Resource Morphology --1 A Simple Catalan Resource Morphology
----
---- Aarne Ranta 2002 -- 2005
----
---- This resource morphology contains definitions needed in the resource
---- syntax. To build a lexicon, it is better to use $ParadigmsCat$, which
---- gives a higher-level access to this module.
-- --
-- Aarne Ranta 2002 -- 2005
-- Jordi Saludes 2008: Derived from MorphoSpa.
--
-- This resource morphology contains definitions needed in the resource
-- syntax. To build a lexicon, it is better to use $ParadigmsCat$, which
-- gives a higher-level access to this module.
resource MorphoCat = CommonRomance, ResCat ** resource MorphoCat = CommonRomance, ResCat **
open PhonoCat, Prelude, Predef in { open PhonoCat, Prelude, Predef in {
flags optimize=all ; coding=utf8 ;
--2 Nouns
-- --
-- flags optimize=all ; -- The following macro is useful for creating the forms of number-dependent
-- -- tables, such as common nouns.
-- -- gcc M2.3
----2 Nouns
----
---- The following macro is useful for creating the forms of number-dependent
---- tables, such as common nouns.
--
oper oper
numForms : (_,_ : Str) -> Number => Str = \vi, vins -> numForms : (_,_ : Str) -> Number => Str = \vi, vins ->
table {Sg => vi ; Pl => vins} ; table {Sg => vi ; Pl => vins} ;
-- For example: nomCep : Str -> Number => Str = \cep ->
numForms cep (cep + "s") ;
nomHome : Str -> Number => Str = \home ->
numForms home (home + "s") ;
nomDona : Str -> Number => Str = \dona -> nomCasa : Str -> Str -> Number => Str = \es,casa ->
numForms dona (init dona + "es") ; numForms casa (init casa + es) ;
nomDisc : Str -> Number => Str = \disc -> nomFre : Str -> Number => Str = \fre ->
numForms disc (variants {disc + "s"; disc + "os"}) ; numForms fre (fre + "ns") ;
nomCas : Str -> Number => Str = \cas ->
numForms cas (cas + "os") ;
nomTest : Str -> Number => Str = \test ->
numForms test (variants {test + "s"; test + "os"}) ;
nomFaig : Str -> Number => Str = \faig ->
let
fa = Predef.tk 2 faig
in
numForms faig (variants {fa + "jos" ; faig + "s"}) ;
nomDesig : Str -> Number => Str = \desig ->
let
desi = Predef.tk 1 desig
in
numForms desig (variants {desi + "tjos" ; desi + "gs"}) ;
nomTemps : Str -> Number => Str = \temps ->
numForms temps temps ;
-- nomPilar : Str -> Number => Str = \pilar ->
-- numForms pilar (pilar + "es") ;
--
-- nomTram : Str -> Number => Str = \tram ->
-- numForms tram tram ;
--
-- Common nouns are inflected in number and have an inherent gender. -- Common nouns are inflected in number and have an inherent gender.
mkNoun : (Number => Str) -> Gender -> Noun = \noinois,gen -> mkNoun : (Number => Str) -> Gender -> Noun = \noinois,gen ->
@@ -49,89 +63,107 @@ oper
mkNoun (numForms vi vins) ; mkNoun (numForms vi vins) ;
mkNomReg : Str -> Noun = \noi -> mkNomReg : Str -> Noun = \noi ->
let
mkNounMas : (Str -> Number => Str) -> Noun = \rule -> mkNoun (rule noi) Masc
in
case last noi of { case last noi of {
"o" | "e" => mkNoun (nomHome noi) Masc ; "a" => mkNoun (nomCasa "es" noi) Fem ;
"a" => mkNoun (nomDona noi) Fem ; "s"|"x"|"ç" => mkNounMas nomCas ;
"c" => mkNoun (nomDisc noi) Masc ; "i"|"e" => mkNounMas nomFre ;
--- "u" => mkNounIrreg mec (init mec + "ces") Fem ; "í" => mkNounMas (nomCasa "ins") ;
_ => mkNoun (nomHome noi) Masc "à" => mkNounMas (nomCasa "ans") ;
} ; "ó" => mkNounMas (nomCasa "ons") ;
"g" => mkNounMas nomFaig ;
_ => mkNounMas nomCep
} ;
----2 Adjectives --2 Adjectives
---- --
-- Adjectives are conveniently seen as gender-dependent nouns. -- Adjectives are conveniently seen as gender-dependent nouns.
-- Here are some patterns. First one that describes the worst case. -- Here are some patterns. First one that describes the worst case.
-- gcc M2.1
mkAdj : (_,_,_,_,_ : Str) -> Adj = \petit,petita,petits,petites,petitament -> mkAdj : (_,_,_,_,_ : Str) -> Adj = \prim,prima,prims,primes,primament ->
{s = table { {s = table {
AF Masc n => numForms petit petits ! n ; AF Masc n => numForms prim prims ! n ;
AF Fem n => numForms petita petites ! n ; AF Fem n => numForms prima primes ! n ;
AA => petitament AA => primament
} }
} ; } ;
---- Then the regular and invariant patterns. --- Then the regular and invariant patterns.
--
-- adjfort : Str -> Adj = \solo ->
-- let
-- sol = Predef.tk 1 solo
-- in
-- mkAdj solo (sol + "a") (sol + "os") (sol + "as") (sol + "amente") ;
--
adjFort : Str -> Adj = \fort ->
mkAdj fort (fort + "a") (fort + "s") (fort + "es") (fort + "ament") ;
--
-- adjBlu : Str -> Adj = \blu ->
-- mkAdj blu blu blu blu blu ; ---
--
mkAdjReg : Str -> Adj = \fort -> adjFort fort ;
{-
case last solo of {
"o" => adjSolo solo ;
--- "e" => adjUtil solo (solo + "s") ;
"a" =>
_ => adjUtil solo (solo + "es")
} ;
-}
--
----2 Personal pronouns
----
---- All the eight personal pronouns can be built by the following macro.
---- The use of "ne" as atonic genitive is debatable.
---- We follow the rule that the atonic nominative is empty.
--
mkPronoun : (_,_,_,_,_,_,_,_ : Str) -> adjPrim : Str -> Adj = \prim ->
mkAdj prim (prim + "a") (prim + "s") (prim + "es") (prim + "ament") ;
adjBlau : Str -> Str -> Adj = \blau,blava ->
let
blav = Predef.tk 1 blava
in
mkAdj blau blava (blau + "s") (blav + "es") (blava + "ment") ;
adjFondo : Str -> Adj = \fondo ->
let
fond = Predef.tk 1 fondo
in
adjBlau fondo (fond + "a") ;
adjBo : Str -> Adj = \bo ->
mkAdj bo (bo + "na") (bo + "ns") (bo + "nes") (bo + "nament") ;
adjFidel : Str -> Adj = \fidel ->
let
fidels = fidel + "s"
in
mkAdj fidel fidel fidels fidels (fidel + "ment") ;
mkAdjReg : Str -> Adj = \prim ->
case last prim of {
"e"|"u"|"o" => adjFondo prim ;
_ => adjPrim prim
} ;
--2 Personal pronouns
--
-- All the eight personal pronouns can be built by the following macro.
-- The use of "en" as atonic genitive is debatable.
mkPronoun : (_,_,_,_,_,_,_ : Str) ->
Gender -> Number -> Person -> Pronoun = Gender -> Number -> Person -> Pronoun =
\il,le,lui,Lui,son,sa,ses,see,g,n,p -> \ell,el,li,Ell,son,sa,ses,g,n,p ->
let let
alui : Case -> Str = \x -> prepCase x ++ Lui ; aell : Case -> Str = \x -> prepCase x ++ Ell ;
in { in {
s = table { s = table {
Nom => {c1 = [] ; c2 = [] ; comp = il ; ton = Lui} ; Nom => {c1 = [] ; c2 = [] ; comp = ell ; ton = Ell} ;
Acc => {c1 = le ; c2 = [] ; comp = [] ; ton = Lui} ; Acc => {c1 = el ; c2 = [] ; comp = [] ; ton = Ell} ;
CPrep P_a => {c1 = [] ; c2 = lui ; comp = [] ; ton = alui (CPrep P_a)} ; CPrep P_a => {c1 = [] ; c2 = li ; comp = [] ; ton = aell (CPrep P_a)} ;
c => {c1 = [] ; c2 = [] ; comp, ton = alui c} c => {c1 = [] ; c2 = [] ; comp, ton = aell c}
} ; } ;
poss = \\n,g => case <n,g> of { poss = \\n,g => case <n,g> of {
<Sg,Masc> => son ; <Sg,Masc> => son ;
<Sg,Fem> => sa ; <Sg,Fem> => sa ;
<Pl,Masc> => ses ; _ => ses
<Pl,Fem> => see } ;
} ;
a = {g = g ; n = n ; p = p} ; a = {g = g ; n = n ; p = p} ;
hasClit = True hasClit = True
} ; } ;
elisPoss : Str -> Str = \s ->
pre {
vocal => s + "on" ;
_ => s + "a"
} ;
--2 Determiners
-- --
-- -- Determiners, traditionally called indefinite pronouns, are inflected
----2 Determiners -- in gender and number, like adjectives.
----
---- Determiners, traditionally called indefinite pronouns, are inflected pronForms : Adj -> Gender -> Number -> Str = \tal,g,n -> tal.s ! AF g n ;
---- in gender and number, like adjectives.
--
pronForms : Adj -> Gender -> Number -> Str = \tale,g,n -> tale.s ! AF g n ;
--
} }

View File

@@ -32,7 +32,9 @@ resource ParadigmsCat =
BeschCat, BeschCat,
CatCat in { CatCat in {
flags optimize=all ; flags
optimize=all ;
-- coding = utf8 ;
--2 Parameters --2 Parameters
-- --
@@ -158,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 bÛ -> bon vi ?
prefixA : A -> A ; prefixA : A -> A ;
@@ -191,7 +193,7 @@ oper
mkV : overload { mkV : overload {
-- Regular verbs are ones inflected like "cantar", "perdre", "témer", "perdre", "servir", "dormir" -- Regular verbs are ones inflected like "cantar", "perdre", "tÈmer", "perdre", "servir", "dormir"
-- The regular verb function works for models I, IIa, IIb and IIa -- The regular verb function works for models I, IIa, IIb and IIa
-- The module $BeschCat$ gives the complete set of "Bescherelle" conjugations. -- The module $BeschCat$ gives the complete set of "Bescherelle" conjugations.
@@ -306,7 +308,7 @@ oper
aN2 n = mkN2 n dative ; aN2 n = mkN2 n dative ;
mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ; mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ;
mk2PN x g = {s = x ; g = g} ** {lock_PN = <>} ; mk2PN x g = {s = x ; g = g; isPersonal = True ; lock_PN = <>} ;
regPN x = mk2PN x g where { regPN x = mk2PN x g where {
g = case last x of { g = case last x of {
"a" => feminine ; "a" => feminine ;
@@ -327,7 +329,7 @@ oper
{s = table {Posit => a.s ! Posit ; _ => b.s ! Posit} ; {s = table {Posit => a.s ! Posit ; _ => b.s ! Posit} ;
isPre = a.isPre ; lock_A = <>} ; isPre = a.isPre ; lock_A = <>} ;
compADeg a = compADeg a =
{s = table {Posit => a.s ! Posit ; _ => \\f => "más" ++ a.s ! Posit ! f} ; {s = table {Posit => a.s ! Posit ; _ => \\f => "més" ++ a.s ! Posit ! f} ;
isPre = a.isPre ; isPre = a.isPre ;
lock_A = <>} ; lock_A = <>} ;
regADeg a = compADeg (regA a) ; regADeg a = compADeg (regA a) ;
@@ -336,7 +338,7 @@ oper
mkAdV x = ss x ** {lock_AdV = <>} ; mkAdV x = ss x ** {lock_AdV = <>} ;
mkAdA x = ss x ** {lock_AdA = <>} ; mkAdA x = ss x ** {lock_AdA = <>} ;
regV x = -- cantar, perdre, témer, dormir, (servir) regV x = -- cantar, perdre, tÈmer, dormir, (servir)
let let
verb = case (Predef.dp 2 x) of { verb = case (Predef.dp 2 x) of {
"re" => perdre_83 x ; "re" => perdre_83 x ;
@@ -354,7 +356,7 @@ oper
special_ppV ve pa = { special_ppV ve pa = {
s = table { s = table {
VPart g n => (adjFort pa).s ! AF g n ; VPart g n => (regA pa).s ! Posit ! AF g n ;
p => ve.s ! p p => ve.s ! p
} ; } ;
lock_V = <> ; lock_V = <> ;

View File

@@ -13,7 +13,7 @@ lin
} ; } ;
almost_AdA, almost_AdN = ss (variants {"quasi"; "gairebé"}) ; almost_AdA, almost_AdN = ss (variants {"quasi"; "gairebé"}) ;
always_AdV = ss "sempre" ; always_AdV = ss "sempre" ;
although_Subj = ss "benché" ** {m = Conjunct} ; although_Subj = ss ["encara que"] ** {m = Conjunct} ;
and_Conj = {s1 = [] ; s2 = etConj.s ; n = Pl} ; and_Conj = {s1 = [] ; s2 = etConj.s ; n = Pl} ;
because_Subj = ss "perque" ** {m = Indic} ; because_Subj = ss "perque" ** {m = Indic} ;
before_Prep = {s = "abans" ; c = MorphoCat.genitive ; isDir = False} ; before_Prep = {s = "abans" ; c = MorphoCat.genitive ; isDir = False} ;
@@ -29,7 +29,7 @@ lin
either7or_DConj = {s1,s2 = "o" ; n = Sg} ; either7or_DConj = {s1,s2 = "o" ; n = Sg} ;
everybody_NP = makeNP ["tothom"] Masc Sg ; everybody_NP = makeNP ["tothom"] Masc Sg ;
every_Det = {s,sp = \\_,_ => "cada" ; n = Sg ; s2 = []} ; every_Det = {s,sp = \\_,_ => "cada" ; n = Sg ; s2 = []} ;
everything_NP = pn2np (mkPN ["tot"] Masc) ; everything_NP = pn2np (mkPN "tot" Masc) ;
everywhere_Adv = ss ["a tot arreu"] ; everywhere_Adv = ss ["a tot arreu"] ;
few_Det = { few_Det = {
s,sp = \\g,c => prepCase c ++ genForms "pocs" "poques" ! g ; n = Pl ; s2 = []} ; s,sp = \\g,c => prepCase c ++ genForms "pocs" "poques" ! g ; n = Pl ; s2 = []} ;
@@ -38,8 +38,7 @@ lin
from_Prep = complGen ; --- from_Prep = complGen ; ---
he_Pron = he_Pron =
mkPronoun mkPronoun
"ell" "lo" "el" "ell" "ell" "el" "li" "ell" ("son"|["el seu"]) ("sa"|["la seva"]) "ses"
["el seu"] ["la seva"] ["els seus"] ["les seves"]
Masc Sg P3 ; Masc Sg P3 ;
here_Adv = mkAdv "aquí" ; -- acÌ here_Adv = mkAdv "aquí" ; -- acÌ
here7to_Adv = mkAdv ["cap aquí"] ; here7to_Adv = mkAdv ["cap aquí"] ;
@@ -52,14 +51,14 @@ lin
i_Pron = i_Pron =
mkPronoun mkPronoun
"jo" "em" "em" "mi" "jo" "em" "em" "mi"
["el meu"] ["la meva"] ["els meus"] ["les meves"] ("mon"|["el meu"]) ("ma"|["la meva"]) "mes"
Fem Sg P1 ; Fem Sg P1 ;
in_Prep = mkPrep "en" ; in_Prep = mkPrep "en" ;
it_Pron = it_Pron = mkPronoun
mkPronoun "ell" "ho" "li" "ell"
"ell" "lo" "el" "ell" ["el seu"] ["la seva"] ["els seus"]
["el seu"] ["la seva"] ["els seus"] ["les seves"]
Masc Sg P3 ; Masc Sg P3 ;
less_CAdv = X.mkCAdv "menys" conjThan ; ---- less_CAdv = X.mkCAdv "menys" conjThan ; ----
many_Det = { many_Det = {
s,sp = \\g,c => prepCase c ++ genForms "molts" "moltes" ! g ; n = Pl ; s2 = []} ; s,sp = \\g,c => prepCase c ++ genForms "molts" "moltes" ! g ; n = Pl ; s2 = []} ;
@@ -80,8 +79,8 @@ lin
quite_Adv = ss "bastant" ; quite_Adv = ss "bastant" ;
she_Pron = she_Pron =
mkPronoun mkPronoun
"ella" "la" "la" "ella" "ella" "la" "li" "ella"
["el seu"] ["la seva"] ["els seus"] ["les seves"] ("son"|["el seu"]) ("sa"|["la seva"]) "ses"
Fem Sg P3 ; Fem Sg P3 ;
so_AdA = ss "tan" ; so_AdA = ss "tan" ;
somebody_NP = pn2np (mkPN ["alg˙"] Masc) ; somebody_NP = pn2np (mkPN ["alg˙"] Masc) ;
@@ -107,7 +106,7 @@ lin
therefore_PConj = ss ["per tant"] ; therefore_PConj = ss ["per tant"] ;
they_Pron = mkPronoun they_Pron = mkPronoun
"elles" "les" "les" "elles" "elles" "les" "les" "elles"
["el seu"] ["la seva"] ["llurs"] ["llurs"] "llur" "llur" "llurs"
Fem Pl P3 ; Fem Pl P3 ;
this_Quant = this_Quant =
@@ -128,8 +127,8 @@ lin
want_VV = mkVV (verbV (voler_120 "voler")) ; want_VV = mkVV (verbV (voler_120 "voler")) ;
we_Pron = we_Pron =
mkPronoun mkPronoun
"nosaltres" "nos" "nos" "nosaltres" "nosaltres" "ens" "ens" "nosaltres"
["el nostre"] ["la nostra"] ["els nostres"] ["les nostres"] ["el nostre"] ["la nostra"] ["els nostres"]
Fem Pl P1 ; Fem Pl P1 ;
whatSg_IP = {s = \\c => prepCase c ++ ["què"] ; a = aagr Masc Sg} ; whatSg_IP = {s = \\c => prepCase c ++ ["què"] ; a = aagr Masc Sg} ;
whatPl_IP = {s = \\c => prepCase c ++ ["què"] ; a = aagr Masc Pl} ; --- whatPl_IP = {s = \\c => prepCase c ++ ["què"] ; a = aagr Masc Pl} ; ---
@@ -149,22 +148,47 @@ lin
yes_Utt = ss "sí" ; yes_Utt = ss "sí" ;
youSg_Pron = mkPronoun youSg_Pron = mkPronoun
"tu" "et" "et" "tu" "tu" "et" "et" "tu"
["el teu"] ["la teva"] ["els teus"] ["les teves"] ("ton"|["el teu"]) ("ta"|["la teva"]) ("tes"|["les teves"])
Fem Sg P2 ; Fem Sg P2 ;
youPl_Pron = youPl_Pron =
mkPronoun mkPronoun
"vosaltres" "us" "us" "vosaltres" "vosaltres" "us" "us" "vosaltres"
["el vostre"] ["la vostra"] ["els vostres"] ["les vostres"] ["el vostre"] ["la vostra"] ["els vostres"]
Fem Pl P2 ; Fem Pl P2 ;
youPol_Pron = youPol_Pron = he_Pron ;
mkPronoun {- mkPronoun
"vosté" "li" "li" "vosté" "vosté" "el" "li" "vosté"
["el seu"] ["la seva"] ["els seus"] ["les seves"] ["el seu"] ["la seva"] ["els seus"] ["les seves"]
Fem Pl P2 ; Fem Pl P2 ;
-}
not_Predet = {s = \\a,c => prepCase c ++ "no pas" ; c = Nom} ;
have_V2 = dirV2 (verbV (tenir_108 "tenir")) ; have_V2 = dirV2 (verbV (tenir_108 "tenir")) ;
oper oper
etConj : {s : Str ; n : MorphoCat.Number} = {s = "i" } ** {n = Pl} ; etConj : {s : Str ; n : MorphoCat.Number} = {s = "i" } ** {n = Pl} ;
lin
if_then_Conj = {s1 = "si" ; s2 = "llavors" ; n = Sg ; lock_Conj = <>} ;
no_Quant =
let
capS : Str = "cap" ;
cap : ParadigmsCat.Number => ParadigmsCat.Gender => Case => Str = table {
Sg => \\g,c => prepCase c ++ genForms capS capS ! g ;
Pl => \\g,c => prepCase c ++ genForms capS capS ! g
}
in {
s = \\_ => cap ;
sp = cap ;
s2 = []
} ;
nobody_NP = pn2np (mkPN "ningú") ;
nothing_NP = pn2np (mkPN "res") ;
at_least_AdN = X.mkAdN "almenys" ;
at_most_AdN = X.mkAdN "com a màxim" ;
except_Prep = mkPrep "excepte" ;
as_CAdv = X.mkCAdv "tan" "com" ;
lin language_title_Utt = ss "català" ; lin language_title_Utt = ss "català" ;
} }