在某些情况下,当用户只想要名词的复数形式时,例如:
mkN("apple");
让机器打印出结果apples
而不是打印整套的最佳做法是什么apple apple's apples apples'
?
在某些情况下,当用户只想要名词的复数形式时,例如:
mkN("apple");
让机器打印出结果apples
而不是打印整套的最佳做法是什么apple apple's apples apples'
?
cc
GF 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
可以用来创造许多不同的东西:主格形式apple和apples可以成为名词短语的头部,单数或复数。属格形式可以成为限定词(“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
,即使我们知道这个数字。那是因为NP
s 可以由代词组成,代词可以比名词更多地变化。这是 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
但是由于某些 NP
s 在所有 4 个字段中都不同,这就是为什么 GF lincat forNP
需要它们。
要让 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'的量词。