From becce3cb624d11e60b75614ec9aa6c63a739cc81 Mon Sep 17 00:00:00 2001 From: "jordi.saludes" Date: Mon, 29 Sep 2008 18:28:27 +0000 Subject: [PATCH] better noun morphology in Cat. --- lib/resource/catalan/MorphoCat.gf | 188 +++++++++++++++++------------- 1 file changed, 109 insertions(+), 79 deletions(-) diff --git a/lib/resource/catalan/MorphoCat.gf b/lib/resource/catalan/MorphoCat.gf index a1a77e253..f21bc849d 100644 --- a/lib/resource/catalan/MorphoCat.gf +++ b/lib/resource/catalan/MorphoCat.gf @@ -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,57 +63,73 @@ 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. + + 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 "ne" as atonic genitive is debatable. +-- We follow the rule that the atonic nominative is empty. + mkPronoun : (_,_,_,_,_,_,_,_ : Str) -> Gender -> Number -> Person -> Pronoun = \il,le,lui,Lui,son,sa,ses,see,g,n,p -> @@ -118,13 +148,13 @@ oper a = {g = g ; n = n ; p = p} ; hasClit = True } ; + + +--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 ; + }