mkNP contain additional determiner in GF

58 views Asked by At

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!

1

There are 1 answers

0
inariksit On BEST ANSWER

Mass nouns in the RGL

You're getting the output with il, because the N -> NP instance of mkNP makes mass nouns. The canonical example is "I drink water", where water is constructed with mkNP 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.

Lang> p "king John" | l -treebank
Lang: UttCN (ApposCN (UseN king_N) (UsePN john_PN))
LangEng: king John
LangSpa: rey Juan
Lang: UttNP (MassNP (ApposCN (UseN king_N) (UsePN john_PN)))
LangEng: king John
LangSpa: el rey Juan

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:

 Sentence =
      mkUtt (mkNP
               aSg_Det
               (mkCN
                  (mkN "anno")
                  (ParadigmsIta.mkAdv "e mezzo")
               )
            ) ;

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.