GF fails to output prepositions in some situations

80 views Asked by At

I wrote many different sentences on GF which contain prepositions in them, but I find out in some situations GF output doesn't contain the preposition I had defined in the sentence such in the following program.

Don't really know the reason behind such an output!!

Abstract:

abstract Test = {
flags startcat = Imperative;
cat
    Imperative;
fun

-- Utt
Sentence : Imperative;}

Concrete:

concrete TestEng of Test = open SyntaxEng,  ParadigmsEng in {

lincat
    Imperative  = Imp;
lin

    Sentence = mkImp (mkVP
                    (mkV2 (mkV "play"))
                    (mkNP
                        a_Det
                        (mkCN
                            (mkN2
                                (mkN "movie")
                                for_Prep
                                ))));}

Output:

play a movie, play a movie, play a movie, play a movie, do not play a movie, do not play a movie, do not play a movie, do not play a movie, don't play a movie, don't play a movie, don't play a movie, don't play a movie

Best wishes~

1

There are 1 answers

2
inariksit On BEST ANSWER

Intended use of N2

The purpose of N2 and N3 is nouns that take an argument. The example in the RGL documentation is "distance from this city to Paris".

Now, obviously you can say just "distance", it's not wrong. That's why we have functions that make N2 and N3 into a CN without arguments.

The converse is also true: you can say, as in it's not wrong to say, "the tree from Tokyo to Paris". Here's a silly context: "which trees are we sending to which places?" "this is the tree from Tokyo to Paris".

But, I hope that you agree, that the arguments from X and to Y feel a bit more natural for "distance" than for "tree". The line is blurry on purpose --- you as a grammarian can always decide whether it makes more sense to encode a preposition into the noun (make it into a N2/N3), or whether to attach full adverbial to a regular noun (N).

What happens to the preposition in N2

So let's see what happens in the N2 and CN.

oper
  movie_for : N2 = mkN2 (mkN "movie") for_Prep ;

N2 has an inherent preposition, to be used for a potential complement. Let's just double check that it's there:

  cc -table movie_for
  s . Sg => Nom => movie
  s . Sg => Gen => movie's
  s . Pl => Nom => movies
  s . Pl => Gen => movies'
  c2 . for
  g . Neutr

As I said earlier, you can make a N2 into a CN by either way: adding a complement, or not adding one. If we use the complement, you see that the preposition and the complement are both added to the CN's s field.

> cc -table mkCN movie_for somebody_NP
  s . ParamX.Sg => ResEng.Nom => movie for somebody
  s . ParamX.Sg => ResEng.Gen => movie for somebody
  s . ParamX.Pl => ResEng.Nom => movies for somebody
  s . ParamX.Pl => ResEng.Gen => movies for somebody
  g . ResEng.Neutr

But if you use the version without complement, the preposition remains in the c2 field.

> cc -table mkCN movie_for
  s . ParamX.Sg => ResEng.Nom => movie
  s . ParamX.Sg => ResEng.Gen => movie's
  s . ParamX.Pl => ResEng.Nom => movies
  s . ParamX.Pl => ResEng.Gen => movies'
  c2 . for
  g . ResEng.Neutr

And by the time we make the CN into an NP, the c2 field is ignored completely.

Why?

This is intended behaviour. We can say "the distance is long", "the distance from Tokyo to Paris is long", but hardly "*the distance from to is long". So the same applies to any N2 and N3: the preposition is only used if an actual complement is added.

Did you specifically want to produce "movie for", or was this just a simplified example? If you tell me what kind of phrase you wanted to construct, I can help you to find the right functions to do that.

edit. to produce "play a movie for me", this works:

Sentence =
 mkImp (mkVP
          (mkVP (mkV2 "play") (mkNP a_Det (mkN "movie")))
          (SyntaxEng.mkAdv for_Prep i_NP)
       ) ;