Search code examples
gf

Headless noun phrases


What’s the best way in the GF RGL to create noun phrases that do not contain a noun? This is possible in some languages such as German where you can have noun phrases like:

  • “der schwarze” (‘the black one’) assuming the missing noun is masc sg
  • “ein kleines” (‘a small one’) assuming the missing noun is neut sg
  • “keine großen” (‘no big ones’) assuming the missing noun is pl

There are languages I know where this is grammatically legal (German, Czech, Russian, French?). There is always an assumed “silent” noun with which the rest of the noun phrase agrees with in gender, number etc. Then there are languages where it’s not grammatically legal (English, Irish) and you always have to have a noun, even a dummy one like “one” (see what I did there?).

I’m not seeing a function in the RGL that would allow me to do this, either at NP level or at CN level. It would be nice to have a function like mkSilentCN : AP -> N -> CN where the N would be used for agreement but its strings would be withheld from serialization. For languages where headless NPs are illegal it could work as a normal mkCN. But, sadly, no such function exists in the RGL. (Although: would that not mess with parsing? The parser would not know which N it is.)

My workaround would be to create an empty N with grammatical properties but no strings. Would that be OK, or would that be frowned upon?


Solution

  • There is indeed nothing exactly like you describe in the RGL, the closest are these ones in the Extend module:

        AdjAsCN : AP -> CN ;   -- a green one ; en grön (Swe)
        AdjAsNP : AP -> NP ;   -- green (is good)
    

    But you're right that it doesn't allow for gender variation in the elided argument. Number variation actually works, because AP and CN are both open for number, and you can copy over the singular forms of the AP into the CN's singular fields, likewise for the plural forms. But gender doesn't, because CN is supposed to have a fixed gender, so that function must do some choice when making an AP into a CN.

    Giving a N as an argument that is dropped in the linearisation is indeed problematic for parsing, but if you only want to generate, then you can do whatever you want in your own application grammar. I've seen people use constructions like that before in NLG applications and it works well.

    If you want to create something that works for multiple languages, or could be added to Extend, and behaves nicely with parsing, then it would have to be something along the lines:

        AdjAsCNmasc, 
        AdjAsCNfem,
        AdjAsCNneut : AP -> CN ;
    

    and then to get your examples, you need the following:

    • “der schwarze” = mkNP theSg_Det (AdjAsCNmasc (PositA black_A))
    • “ein kleines” = mkNP aSg_Det (AdjAsCNneut (PositA black_A))
    • “keine großen” = mkNP (mkDet no_Quant pluralNum) (AdjAsCN?? (PositA black_A))