我正在进行自然语言生成任务,需要检索Cyc术语对应的自然语言词或短语。例如,”#$EatingEvent” -> “eat” 或 “#$Coyote-Animal” -> “coyote”。
如何通过Java API或SubL函数实现这一目标?
我使用的是Research Cyc 4.0q KB和Cyc Core API Suite v1.0.0-rc4。
回答:
至少有三种不同的方法可以实现这一目标:
-
使用Cyc查询。以下是运行查询的SubL形式,但该查询可以轻松地与Java API或通过Cyc浏览器一起使用:
(new-cyc-query ‘(#$termPhrases #$Coyote-Animal #$CharacterString ?X) #$InferencePSC ‘(:max-number 1))
这将返回:
(((?X . "prairie wolf")))
如果您不只请求一个答案,可以得到很多答案:
(new-cyc-query '(#$termPhrases #$Coyote-Animal #$CharacterString ?X) #$InferencePSC )
这将返回:
(((?X . "Canis latrans")) ((?X . "coyote (C. latrans)")) ((?X . "C. latrans")) ((?X . "prairie wolves")) ((?X . "coyotes")) ((?X . "coyote")) ((?X . "prairie wolf")))
-
使用SubL生成形式:
(generate-phrase #$Coyote-Animal)
这将返回:
"prairie wolf"#$singular
-
使用Java API:
Paraphraser termParaphraser = getTermParaphraser();KbObject coyote = KbCollectionFactory.get("Coyote-Animal");String nl = termParaphraser.paraphrase(coyote).getString());
在代码结束时,nl应设置为字符串”prairie wolf”。
我不确定这个释义器代码是否是API的1.0.0-rc4版本,但它肯定在1.0.0-rc5中,这是目前可以从dev.cyc.com下载的版本。