我正在从事自然语言生成任务,需要检索与Cyc术语相当的自然语言单词或短语。例如。 “#$ EatingEvent” - > “吃”或“#$ Coyote-Animal” - > “狼”。
如何通过Java Api或SubL函数实现这一目标?
我正在使用Research Cyc 4.0q KB和Cyc Core API Suite v1.0.0-rc4。
答案 0 :(得分:1)
它可能会让其他读者感兴趣,你可以在OpenCyc中获得一些NL等价的Cyc术语,而不仅仅是ResearchCyc。
例如,如果您调用以下SubL ...
(生成短语#$ Dog)
...例如交互者你将获得它作为输出:
“狗” prettyString-规范 零 (#(0 NIL))
请注意,在(我的版本)OpenCyc中,#$ prettyString和#$ prettyString-Canonical上存在大量断言。正如DaveS建议的那样,您应该能够使用new-cyc-query查询这些内容。
ResearchCyc似乎没有#$ prettyString或#$ prettyString-Canonical但似乎使用更微妙的本体(一组谓词)来生成NL。我怀疑RCyc的NL gen知识的覆盖范围和灵活性要好于OCyc。
我在
上获得了这些结果CycL修订级别:10.140388 当前KB:5022
答案 1 :(得分:0)
至少有三种不同的方法可以实现这一目标:
使用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生成表单:
(生成短语#$ 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-Rrc4,但它绝对是1.0.0-rc5,目前可以从开发中下载的那个.cyc.com。