首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GF中的关系从句

GF中的关系从句
EN

Stack Overflow用户
提问于 2020-11-22 11:03:50
回答 1查看 96关注 0票数 2

“玩玩具总动员”去年出版的“

代码语言:javascript
复制
Sentence = mkUtt( mkImp (mkVP
                (mkV2 "play")
                (mkNP (mkCN 
                    (mkCN (mkN "Toy Story"))
                    (mkS pastTense simultaneousAnt(mkCl (mkVP 
                        (mkV2 "publish")
                        (mkNP (mkCN (mkN "last yser")))
                        )))
                    ))
        ));

在GF中创建关系从句时,句子的语法S总是会添加,这两个句子之间的是用代替的任何方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-22 11:50:20

首先,您创建的结构不是关系子句,而是这个结构:

代码语言:javascript
复制
mkCN : CN -> S -> CN -- rule that she sleeps

关系子句在RGL中具有RS类型。

如何构建一个实际的RS

在这里,我逐步建立了RS。如果你愿意的话,可以把这些步骤放回一个表达式中,但我发现这样的事情会更清楚。

代码语言:javascript
复制
oper
  last_year_Adv : Adv = ParadigmsEng.mkAdv "last year" ;

  published_last_year_VP : VP = mkVP (passiveVP (mkV2 "publish")) last_year_Adv ;

  which_is_published_last_year_RCl : RCl = mkRCl which_RP published_last_year_VP ;

  which_was_published_last_year_RS : RS = mkRS pastTense which_is_published_last_year_RCl ;

lin
  play_TS = mkUtt (mkImp (mkVP
                            (mkV2 "play")
                            (mkNP
                               (mkNP (mkPN "Toy Story"))
                               which_was_published_last_year_RS)
                         )
                  ) ;

现在,当我们在GF上测试它时,我们看到,尽管名称是,which_RP实际上是“那个”。

代码语言:javascript
复制
> l play_TS 
play Toy Story , that was published last year

如何将“那”改为“哪”

当您想要创建一个新的词法项时,首先要检查的是范例模块。不幸的是,英语没有mkRP。像相对代词这样的事物通常被认为是封闭的:只有一小部分,固定的数量。封闭类的其他示例是基本数字(您不能只在4到5之间构造一个新的整数!)还有行列式。与之形成对比的是,像名词、动词和形容词这样的开放类经常会弹出。对于开放类,范例模块有许多选项。但不适用于封闭类,比如关系代词。

因此,如果范例没有帮助,那么接下来要检查的是特定于语言的额外的模块。

检查特定于语言的额外模块

如果您自己的计算机上有RGL源代码,则只需转到gf-rgl/src/english目录和which的grep目录。或者您可以使用RGL浏览器搜索有趣的函数。

在ExtraEng中确实有一个关系代词,也叫which_RP。(也有一个叫who_which_RP的。)因此,现在您可以在语法中进行以下修改:

代码语言:javascript
复制
concrete MyGrammarEng of MyGrammar = 
  open SyntaxEng, 
       ParadigmsEng, 
       ExtraEng -- Need to open ExtraEng in the concrete!
    in ** {

-- … as usual, except for

oper
 which_is_published_last_year_RCl : RCl = 
   mkRCl ExtraEng.which_RP -- Use the ExtraEng.which_RP!
         published_last_year_VP ;

剩下的代码和以前一样。这将产生您想要的结果。

代码语言:javascript
复制
> l play_TS 
play Toy Story , which was published last year

万不得已的黑客

因此,您已经查看了所有可能的模块,但什么也没有发现。考虑把它变成一个在gf-rgl存储库中发出,如果它是明显错误或缺失的东西。

但无论如何,这里有一个普遍的,不安全的黑客,可以快速构建你想要的东西。

首先,让我们来看看RP的lincat in CatEng{s : RCase => Str ; a : RAgr}。然后让我们看看它在RelativeEng中的实现。在这里,你也看到了为什么总是“那个”的解释:不像谁和谁,“那个”适用于动画和无生命的NPs。

所以我会这样做来强制字符串“其中”:

代码语言:javascript
复制
oper
  myWhich_RP : RP = which_RP ** {s = table {_ => "which"}} ;

**语法意味着记录扩展。我们使用原始which_RP中的所有其他字段,但是在s字段中,我们放置了一个表,该表的所有分支都包含字符串“whose”。(您可以阅读更多关于这种技术的在我的博客里。)

然后,我们使用新定义的myWhich_RP来形成关系子句:

代码语言:javascript
复制
oper
  which_is_published_last_year_RCl : RCl = mkRCl myWhich_RP published_last_year_VP ;

这也有效,但不安全,因为每当RGL更改时,任何接触原始实现的代码都可能中断。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64953377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档