1
0
forked from GitHub/gf-core

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í"
-- "mi" "mi" "mis" "mis"
-- Fem Sg P1 ;
-- these8fem_NP = mkNP ["estas"] Fem Pl ;
-- they8fem_Pron = mkPronoun
-- "ellas" "las" "les" "ellas"
-- "su" "su" "sus" "sus"
-- Fem Pl P3 ;
these8fem_NP = mkNP "aquestes" Fem Pl ;
they8fem_Pron = mkPronoun
"elles" "les" "les" "elles"
"llur" "llur" "llurs"
Fem Pl P3 ;
-- this8fem_NP = pn2np (mkPN ["esta"] Fem) ;
-- those8fem_NP = mkNP ["esas"] Fem Pl ;

View File

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

View File

@@ -1,45 +1,59 @@
--# -path=.:../romance:../common:../../prelude
----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.
--1 A Simple Catalan Resource Morphology
--
-- 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 **
open PhonoCat, Prelude, Predef in {
flags optimize=all ; coding=utf8 ;
--2 Nouns
--
-- flags optimize=all ;
--
--
----2 Nouns
----
---- The following macro is useful for creating the forms of number-dependent
---- tables, such as common nouns.
--
-- The following macro is useful for creating the forms of number-dependent
-- tables, such as common nouns.
-- gcc M2.3
oper
numForms : (_,_ : Str) -> Number => Str = \vi, 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 ->
numForms dona (init dona + "es") ;
nomDisc : Str -> Number => Str = \disc ->
numForms disc (variants {disc + "s"; disc + "os"}) ;
-- nomPilar : Str -> Number => Str = \pilar ->
-- numForms pilar (pilar + "es") ;
--
-- nomTram : Str -> Number => Str = \tram ->
-- numForms tram tram ;
--
nomCasa : Str -> Str -> Number => Str = \es,casa ->
numForms casa (init casa + es) ;
nomFre : Str -> Number => Str = \fre ->
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 ;
-- Common nouns are inflected in number and have an inherent gender.
mkNoun : (Number => Str) -> Gender -> Noun = \noinois,gen ->
@@ -49,89 +63,107 @@ oper
mkNoun (numForms vi vins) ;
mkNomReg : Str -> Noun = \noi ->
let
mkNounMas : (Str -> Number => Str) -> Noun = \rule -> mkNoun (rule noi) Masc
in
case last noi of {
"o" | "e" => mkNoun (nomHome noi) Masc ;
"a" => mkNoun (nomDona noi) Fem ;
"c" => mkNoun (nomDisc noi) Masc ;
--- "u" => mkNounIrreg mec (init mec + "ces") Fem ;
_ => mkNoun (nomHome noi) Masc
} ;
"a" => mkNoun (nomCasa "es" noi) Fem ;
"s"|"x"|"ç" => mkNounMas nomCas ;
"i"|"e" => mkNounMas nomFre ;
"í" => mkNounMas (nomCasa "ins") ;
"à" => mkNounMas (nomCasa "ans") ;
"ó" => mkNounMas (nomCasa "ons") ;
"g" => mkNounMas nomFaig ;
_ => mkNounMas nomCep
} ;
----2 Adjectives
----
--2 Adjectives
--
-- Adjectives are conveniently seen as gender-dependent nouns.
-- 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 {
AF Masc n => numForms petit petits ! n ;
AF Fem n => numForms petita petites ! n ;
AA => petitament
AF Masc n => numForms prim prims ! n ;
AF Fem n => numForms prima primes ! n ;
AA => primament
}
} ;
---- 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.
--
--- Then the regular and invariant patterns.
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 =
\il,le,lui,Lui,son,sa,ses,see,g,n,p ->
\ell,el,li,Ell,son,sa,ses,g,n,p ->
let
alui : Case -> Str = \x -> prepCase x ++ Lui ;
aell : Case -> Str = \x -> prepCase x ++ Ell ;
in {
s = table {
Nom => {c1 = [] ; c2 = [] ; comp = il ; ton = Lui} ;
Acc => {c1 = le ; c2 = [] ; comp = [] ; ton = Lui} ;
CPrep P_a => {c1 = [] ; c2 = lui ; comp = [] ; ton = alui (CPrep P_a)} ;
c => {c1 = [] ; c2 = [] ; comp, ton = alui c}
Nom => {c1 = [] ; c2 = [] ; comp = ell ; ton = Ell} ;
Acc => {c1 = el ; c2 = [] ; comp = [] ; ton = Ell} ;
CPrep P_a => {c1 = [] ; c2 = li ; comp = [] ; ton = aell (CPrep P_a)} ;
c => {c1 = [] ; c2 = [] ; comp, ton = aell c}
} ;
poss = \\n,g => case <n,g> of {
<Sg,Masc> => son ;
<Sg,Fem> => sa ;
<Pl,Masc> => ses ;
<Pl,Fem> => see
} ;
<Sg,Masc> => son ;
<Sg,Fem> => sa ;
_ => ses
} ;
a = {g = g ; n = n ; p = p} ;
hasClit = True
} ;
elisPoss : Str -> Str = \s ->
pre {
vocal => s + "on" ;
_ => s + "a"
} ;
--2 Determiners
--
--
----2 Determiners
----
---- Determiners, traditionally called indefinite pronouns, are inflected
---- in gender and number, like adjectives.
--
pronForms : Adj -> Gender -> Number -> Str = \tale,g,n -> tale.s ! AF g n ;
--
-- Determiners, traditionally called indefinite pronouns, are inflected
-- in gender and number, like adjectives.
pronForms : Adj -> Gender -> Number -> Str = \tal,g,n -> tal.s ! AF g n ;
}

View File

@@ -32,7 +32,9 @@ resource ParadigmsCat =
BeschCat,
CatCat in {
flags optimize=all ;
flags
optimize=all ;
-- coding = utf8 ;
--2 Parameters
--
@@ -158,7 +160,7 @@ oper
-- them to prefix ones (i.e. ones placed before the noun in
-- modification, as in "gran casa"), the following function is
-- provided.
-- JS: What about vi bó -> bon vi ?
-- JS: What about vi bÛ -> bon vi ?
prefixA : A -> A ;
@@ -191,7 +193,7 @@ oper
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 module $BeschCat$ gives the complete set of "Bescherelle" conjugations.
@@ -306,7 +308,7 @@ oper
aN2 n = mkN2 n dative ;
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 {
g = case last x of {
"a" => feminine ;
@@ -327,7 +329,7 @@ oper
{s = table {Posit => a.s ! Posit ; _ => b.s ! Posit} ;
isPre = a.isPre ; lock_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 ;
lock_A = <>} ;
regADeg a = compADeg (regA a) ;
@@ -336,7 +338,7 @@ oper
mkAdV x = ss x ** {lock_AdV = <>} ;
mkAdA x = ss x ** {lock_AdA = <>} ;
regV x = -- cantar, perdre, témer, dormir, (servir)
regV x = -- cantar, perdre, tÈmer, dormir, (servir)
let
verb = case (Predef.dp 2 x) of {
"re" => perdre_83 x ;
@@ -354,7 +356,7 @@ oper
special_ppV ve pa = {
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
} ;
lock_V = <> ;

View File

@@ -13,7 +13,7 @@ lin
} ;
almost_AdA, almost_AdN = ss (variants {"quasi"; "gairebé"}) ;
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} ;
because_Subj = ss "perque" ** {m = Indic} ;
before_Prep = {s = "abans" ; c = MorphoCat.genitive ; isDir = False} ;
@@ -29,7 +29,7 @@ lin
either7or_DConj = {s1,s2 = "o" ; n = Sg} ;
everybody_NP = makeNP ["tothom"] Masc Sg ;
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"] ;
few_Det = {
s,sp = \\g,c => prepCase c ++ genForms "pocs" "poques" ! g ; n = Pl ; s2 = []} ;
@@ -38,8 +38,7 @@ lin
from_Prep = complGen ; ---
he_Pron =
mkPronoun
"ell" "lo" "el" "ell"
["el seu"] ["la seva"] ["els seus"] ["les seves"]
"ell" "el" "li" "ell" ("son"|["el seu"]) ("sa"|["la seva"]) "ses"
Masc Sg P3 ;
here_Adv = mkAdv "aquí" ; -- acÌ
here7to_Adv = mkAdv ["cap aquí"] ;
@@ -52,14 +51,14 @@ lin
i_Pron =
mkPronoun
"jo" "em" "em" "mi"
["el meu"] ["la meva"] ["els meus"] ["les meves"]
("mon"|["el meu"]) ("ma"|["la meva"]) "mes"
Fem Sg P1 ;
in_Prep = mkPrep "en" ;
it_Pron =
mkPronoun
"ell" "lo" "el" "ell"
["el seu"] ["la seva"] ["els seus"] ["les seves"]
it_Pron = mkPronoun
"ell" "ho" "li" "ell"
["el seu"] ["la seva"] ["els seus"]
Masc Sg P3 ;
less_CAdv = X.mkCAdv "menys" conjThan ; ----
many_Det = {
s,sp = \\g,c => prepCase c ++ genForms "molts" "moltes" ! g ; n = Pl ; s2 = []} ;
@@ -80,8 +79,8 @@ lin
quite_Adv = ss "bastant" ;
she_Pron =
mkPronoun
"ella" "la" "la" "ella"
["el seu"] ["la seva"] ["els seus"] ["les seves"]
"ella" "la" "li" "ella"
("son"|["el seu"]) ("sa"|["la seva"]) "ses"
Fem Sg P3 ;
so_AdA = ss "tan" ;
somebody_NP = pn2np (mkPN ["alg˙"] Masc) ;
@@ -107,7 +106,7 @@ lin
therefore_PConj = ss ["per tant"] ;
they_Pron = mkPronoun
"elles" "les" "les" "elles"
["el seu"] ["la seva"] ["llurs"] ["llurs"]
"llur" "llur" "llurs"
Fem Pl P3 ;
this_Quant =
@@ -128,8 +127,8 @@ lin
want_VV = mkVV (verbV (voler_120 "voler")) ;
we_Pron =
mkPronoun
"nosaltres" "nos" "nos" "nosaltres"
["el nostre"] ["la nostra"] ["els nostres"] ["les nostres"]
"nosaltres" "ens" "ens" "nosaltres"
["el nostre"] ["la nostra"] ["els nostres"]
Fem Pl P1 ;
whatSg_IP = {s = \\c => prepCase c ++ ["què"] ; a = aagr Masc Sg} ;
whatPl_IP = {s = \\c => prepCase c ++ ["què"] ; a = aagr Masc Pl} ; ---
@@ -149,21 +148,46 @@ lin
yes_Utt = ss "sí" ;
youSg_Pron = mkPronoun
"tu" "et" "et" "tu"
["el teu"] ["la teva"] ["els teus"] ["les teves"]
("ton"|["el teu"]) ("ta"|["la teva"]) ("tes"|["les teves"])
Fem Sg P2 ;
youPl_Pron =
mkPronoun
"vosaltres" "us" "us" "vosaltres"
["el vostre"] ["la vostra"] ["els vostres"] ["les vostres"]
["el vostre"] ["la vostra"] ["els vostres"]
Fem Pl P2 ;
youPol_Pron =
mkPronoun
"vosté" "li" "li" "vosté"
youPol_Pron = he_Pron ;
{- mkPronoun
"vosté" "el" "li" "vosté"
["el seu"] ["la seva"] ["els seus"] ["les seves"]
Fem Pl P2 ;
-}
not_Predet = {s = \\a,c => prepCase c ++ "no pas" ; c = Nom} ;
have_V2 = dirV2 (verbV (tenir_108 "tenir")) ;
oper
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à" ;