I'm trying to output the following sentence in Italian un anno e mezzo
where the sentence is a noun-phrase-list. My code:
lin
Sentence = mkUtt(mkNP
(and_Conj)
(mkNP (aSg_Det) (mkN("anno")))
(mkNP (mkN("mezzo")))
);
But the output of the above code is un anno ed il mezzo
. Why I have the il
determiner in my output? I couldn't find the reason behind this problem. Thank you!
Mass nouns in the RGL
You're getting the output with il, because the
N -> NP
instance ofmkNP
makes mass nouns. The canonical example is "I drink water", where water is constructed withmkNP water_N
.In some resource grammars, this
mkNP
instance creates NPs without any article: like English "I drink water". In other languages like French, it creates a NP in partitive: "je bois de l'eau". Italian gives, not the bare form like English, nor a partitive like French, but a normal definite article: "bevo l'acqua".Why would the RGL creators do this? When writing an application grammar, the
mkNP : N -> NP
instance is a higher-level construct for mass noun, rather than a lower-level question of "do I put an article or not".The downsides are that it's almost impossible to ever output a bare form in the languages where
mkN : N -> NP
adds an article. As far as I understand, it's possible only as a standalone utterance, see e.g. this answer on the GF mailing list.If you want true articleless NPs on the NP level, you can add such a function (
CN -> NP
) to the Extend module, or create an issue on RGL's github asking that someone else creates such a function.How to solve your current problem
So what to do if you want to output un anno e mezzo? I would just be lazy and make "e mezzo" into an adverbial, and then attach it to anno. Like this:
You can do this safely, because e mezzo doesn't inflect. Anno is the head of the noun phrase, and only it needs to inflect.