1

在某些情况下,当用户只想要名词的复数形式时,例如:

mkN("apple");

让机器打印出结果apples而不是打印整套的最佳做法是什么apple apple's apples apples'

4

1 回答 1

1

ccGF shell 中的相关标志

要在 GF shell 中获取cc(缩写)以仅打印一个结果,您可以使用标志。像这样:compute_concrete-one

$ gf
> i -retain alltenses/ParadigmsEng.gfo
> cc mkN "apple"
{s = table
       ParamX.Number
       [table ResEng.Case ["apple"; "apple's"];
        table ResEng.Case ["apples"; "apples'"]];
 g = ResEng.Neutr; lock_N = <>}

> cc -one mkN "apple"
apple

如果您为 应用标志N,那么它打印出来的第一件事就是单数形式。那么如何修复数字以获得复数呢?

固定号码

N是名词的一个范畴,名词有变形表。N可以用来创造许多不同的东西:主格形式appleapples可以成为名词短语的头部,单数或复数。属格形式可以成为限定词(“the apple's sweet taste”或“all my apples' cores are rotten”)。N数量和大小写也是如此。当您打印出N没有任何额外标志的 a 形式时,将它们全部显示出来是有意义的。

如果您想更进一步,并且只将apples限制为复数,则需要将其变为复数NP

apples_NP = mkNP aPl_Det (mkN "apple") ;

开箱

请注意, aNP仍可用于大小写。事实上, 的屈折变化表和sNP一样大N,即使我们知道这个数字。那是因为NPs 可以由代词组成,代词可以比名词更多地变化。这是 a 的最坏情况NP

> cc -table i_NP
s . ResEng.NCase ResEng.Nom => I
s . ResEng.NCase ResEng.Gen => my
s . ResEng.NPAcc => me
s . ResEng.NPNomPoss => mine

当然,对于由名词构成的 NP,大部分字段是相同的。

> cc -table apples_NP
s . ResEng.NCase ResEng.Nom => apples
s . ResEng.NCase ResEng.Gen => apples'
s . ResEng.NPAcc => apples
s . ResEng.NPNomPoss => apples

但是由于某些 NPs 在所有 4 个字段中都不同,这就是为什么 GF lincat forNP需要它们。

在 GF 外壳中显示苹果

要让 GF shell 只显示apples,您需要从名词中创建一个 NP,然后调用cc -one复数 NP。这是一个 GF 文件,您可以将其粘贴到名为 Apples.gf 的文件中。

resource Apples = open ParadigmsEng, SyntaxEng in {

  oper

    apple_N : N = mkN "apple" ;

    apples_NP : NP = mkNP aPl_Det apple_N ;
}

转到 GF 外壳:

> i -retain Apples.gf
> cc -one apples_NP
apples

在任何其他情况下输出苹果

如果您apples_NP在任何句子中用作主语或宾语,您将得到字符串apples。如果你把它作为 Extend.GenNP 的参数,你会得到一个带有字符串apples'的量词。

于 2021-01-13T06:30:44.310 回答