Search code examples
gf

mkNP contain additional determiner in GF


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!


Solution

  • 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.