mkNP 在 GF 中包含额外的确定器

问题描述

我正在尝试用意大利语 un anno e mezzo 输出以下句子,其中该句子是名词短语列表。我的代码

lin
   Sentence = mkUtt(mkNP
         (and_Conj)
         (mkNP (aSg_Det) (mkN("anno")))
         (mkNP (mkN("mezzo")))
   );

但是上面代码输出un anno ed il mezzo。为什么我的输出中有 il 限定符?我找不到这个问题背后的原因。谢谢!

解决方法

RGL 中的质量名词

您使用 il 获得输出,因为 N -> NPmkNP 实例构成了质量名词。典型的例子是“我喝水”,其中是用mkNP water_N构造的。

在一些资源语法中,这个 mkNP 实例创建了没有任何冠词的 NPs:就像英语“我喝水”。在法语等其他语言中,它创建了一个分词的 NP:“je bois de l'eau”。意大利语给出的不是像英语那样的简单形式,也不是像法语那样的分词,而是一个普通的定冠词:"bevo l'acqua"

RGL 的创作者为什么要这样做?在编写应用程序语法时,mkNP : N -> NP 实例是大量名词 的高级构造,而不是“我是否放置文章”的低级问题。 >

缺点是几乎不可能在 mkN : N -> NP 添加文章的语言中输出裸表。据我了解,它只能作为一个独立的话语,参见例如this answer 在 GF 邮件列表中。

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

如果你想要真正的 NP 级别的无文章 NP,你可以添加这样一个函数 (CN -> NP) 到 Extend 模块,或者在 RGL's github 上创建一个问题,要求其他人创建一个这样的函数.

如何解决您当前的问题

如果你想输出un anno e mezzo怎么办?我只是懒惰,把“e mezzo”变成一个副词,然后把它附加到anno。像这样:

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

您可以安全地执行此操作,因为 e mezzo 不会变形。 Anno 是名词短语的中心词,只有它需要变化。