如何在Grammatical Framework RGL中为VPSlash添加副词?
关于RGL中VPSlash添加副词的疑问
现有可行场景
当给完整VP(比如to help her)添加副词(比如today)时,RGL提供了mkVP : Adv -> VP -> VP函数可以实现,示例代码如下:
resource ThisWorks = open SyntaxEng, (P = ParadigmsEng) in { oper step001 : VP = mkVP --to help her (P.mkV2 (P.mkV "help")) she_NP; oper step003 : VP = mkVP --to help her today step002 --VP: to help her (P.mkAdv "today"); }
遇到的问题
但如果是缺少直接宾语的VPSlash(比如to help ___,用于构建who are you helping today这类问句),想要添加today时,RGL中并没有对应的mkVPSlash : Adv -> VPSlash -> VPSlash函数,以下代码无法运行:
resource ThisDoesNotWork = open SyntaxEng, (P = ParadigmsEng) in { oper step001 : VPSlash = mkVP --to help ___ (P.mkV2 (P.mkV "help")); oper step003 : VPSlash = mkVPSlash --to help ___ today (this function does not exist) step002 --VP: to help ___ (P.mkAdv "today"); }
想请教两个问题:
- 为什么RGL中没有这个
mkVPSlash函数? - 应该通过什么方式给VPSlash添加副词?
问题解答
为什么没有mkVPSlash : Adv -> VPSlash -> VPSlash?
RGL(Resource Grammar Library)的设计遵循成分结构的组合逻辑:VPSlash本质是"缺少宾语的VP框架",属于未饱和的谓词中间结构。RGL里的副词修饰逻辑默认针对完整的谓词性成分(比如VP),直接给未补全的VPSlash加副词会打破句法组合的严谨性,因此没有提供对应的原生函数。
给VPSlash添加副词的正确方式
有两种符合RGL语法规则的实现路径:
- 路径1:先补全再剥离,保留副词修饰
先用占位NP把VPSlash补全为VP,添加副词后,再通过slash操作剥离占位宾语,还原为带副词的VPSlash,示例代码:resource ThisWorks = open SyntaxEng, (P = ParadigmsEng) in { oper baseVPSlash : VPSlash = mkVP (P.mkV2 (P.mkV "help")); // 临时补全为完整VP oper tempVP : VP = mkVP baseVPSlash dummy_NP; // 添加副词修饰 oper modifiedVP : VP = mkVP tempVP (P.mkAdv "today"); // 剥离占位宾语,得到带副词的VPSlash oper finalVPSlash : VPSlash = slash modifiedVP; } - 路径2:先修饰动词,再构建VPSlash
先让副词直接修饰动词,再基于修饰后的动词生成VPSlash,这样副词会附着在谓词上,后续补全宾语时自然保留修饰效果,示例:resource ThisWorksToo = open SyntaxEng, (P = ParadigmsEng) in { // 先给动词添加副词修饰 oper modifiedV : V = mkV (P.mkV2 (P.mkV "help")) (P.mkAdv "today"); // 基于修饰后的动词构建VPSlash oper finalVPSlash : VPSlash = mkVP modifiedV; }
这两种方式都能正确生成to help ___ today这类结构,满足后续构建目标问句的需求。
内容的提问来源于stack exchange,提问作者Michal Měchura
相关产品推荐
相关产品推荐

