问题描述
我用词组生成了句子“播放BBC主持的喜剧电影”。
mkPhr (mkVP(
(mkV2 (mkV ("Play")))
(mkNP
aSg_Det
(mkCN
(mkCN (mkN ("comedy")))
(mkSC (passiveVP
(mkV2 ("host"))
(mkNP (mkN ("BBC"))))))))
但是我得到的结果是“播放要由BBC主持的电影”。我检查了GF自由者,但似乎没有办法将VP更改为NP,以避免“成为”。
可能你们要教我如何摆脱这种局面,或者GF中有什么方法可以在短语中添加两个或更多的句子。
谢谢〜
解决方法
像@aschepler所说,“由BBC托管”是一个分词,不是被动语态。在Extend模块中,有几个函数可以从VP创建分词:
PastPartAP : VPSlash -> AP ; -- lost (opportunity) ; (opportunity) lost in space
PastPartAgentAP : VPSlash -> NP -> AP ; -- (opportunity) lost by the company
因此,我们可以使用PastPartAgentAP
创建“ BBC托管”的分词。
如果在GF文件中打开ExtendEng
,则可以使用它的所有功能,就像已经在使用SyntaxEng和ParadigmsEng一样。 (另请参见this answer。)
下面是一个示例,您可以将其复制并粘贴到名为Comedy.gf
的文件中,然后在GF shell中进行播放。
resource Comedy = open SyntaxEng,ParadigmsEng,ExtendEng in {
oper
-- Some lexicon
comedy_N : N = mkN "comedy" ;
host_V2 : V2 = mkV2 "host" ;
play_V2 : V2 = mkV2 "play" ;
BBC_PN : PN = mkPN "BBC" ;
-- Intermediate phrases
hosted_by_BBC : AP =
PastPartAgentAP (mkVPSlash host_V2) (mkNP BBC_PN) ;
comedy_hosted_by_BBC : NP =
mkNP a_Det (mkCN comedy_N hosted_by_BBC) ;
-- The final phrase
play_comedy_hosted_by_BBC : Utt =
mkUtt (mkImp (mkVP play_V2 comedy_hosted_by_BBC)) ;
}
在带有标志-retain
的GF shell中打开Comedy.gf时,可以使用命令cc
检查词典和中间结果。例如:
> cc -table comedy_hosted_by_BBC
s . NCase Nom => a comedy hosted by BBC
s . NCase Gen => a comedy's hosted by BBC
s . NPAcc => a comedy hosted by BBC
s . NPNomPoss => a comedy hosted by BBC
a . AgP3Sg Neutr
> cc -one play_comedy_hosted_by_BBC
play a comedy hosted by BBC