如何在GF中编码带名词修饰语的名词(如"offset direction")?
如何在GF中编码带名词修饰语的名词(如"offset direction")?
嗨!刚上手GF做语法开发确实会碰到这类细节问题,我来帮你解决这个名词修饰语的复数困扰~
你之前用mkCN (mkN "offset") (mkNP (mkN "direction"))的思路其实跑偏了——mkCN : N -> NP -> CN这个构造器本质是用来生成“X of Y”这种所属关系的结构,比如反过来写mkCN (mkN "direction") (mkNP (mkN "offset"))会得到“direction of offset”,所以你那样用的时候,GF会把第一个名词当成核心修饰成分,复数变化自然就加到它上面,导致出现offsets direction这种不符合预期的结果。
想要实现“offset direction”“income tax”这类名词作定语修饰另一个名词的结构,应该用GF资源语法库(RGL)里的mkAttrCN : N -> CN -> CN构造器。这个构造器的作用是把前面的名词作为属性修饰语,附加到后面的中心名词短语上,复数变化只会作用于中心名词,完全符合你的需求。
举个实际的例子:
oper offsetDirection : CN = mkAttrCN (mkN "offset") (mkCN (mkN "direction")); incomeTax : CN = mkAttrCN (mkN "income") (mkCN (mkN "tax"));
测试一下复数形式:
- 单数:
mkNP offsetDirection→ "offset direction" - 复数:
mkNP (pl_CN offsetDirection)→ "offset directions" - 单数:
mkNP incomeTax→ "income tax" - 复数:
mkNP (pl_CN incomeTax)→ "income taxes"
这样就完美解决你遇到的复数问题啦!
备注:内容来源于stack exchange,提问作者M Soegtrop




