该项目基于 Rolf Schwitter 的论文“Specifying and Verbalising Answer Set Programs in Controlled Natural Language”。我重新创建了论文中所做的事情,但规模要小得多,重点是创建适合 CNL 中程序规范的处理和生成的双向语法。
程序big.pl (代表双向语法)应使用SWI-Prolog 运行。要对其进行测试运行,只需使用命令加载文件: [big].
然后查询: test.
完成此操作后,您将看到预定义示例的程序输出。
如果你想在你自己的输入语句上运行程序,你必须修改文件big.pl :
请注意,每个句子必须是单词列表,其中所有单词必须用逗号分隔,并且句子必须以特殊符号“.”结尾。 。每个句子必须以系统词'every'
/ 'no'
开头,或者其中有一个代理,例如[bob,dreams,'.']
,其中bob是一个代理。系统字有: 'every', 'no', 'is', 'is not', 'does not', '.'
。请参阅samples.txt以获取您可以尝试运行的输入句子示例。
如果您想引入计划中未包含的新单词和/或代理,您必须自己将它们添加到big.pl中。当前词典在第 175-198 行中定义。对于每个自定义单词,请按照以下格式添加一行:
lexicon(cat:noun, wform:[student], arg:X, term:student(X)).
其中cat参数是单词的类别(名词、动词、det 等); wform代表单词形式,即句子中出现的确切单词; arg指定该词所指的词的参数; term表示将在内部格式和 ASP 中使用的实际术语。对于每个自定义代理,添加一行agent(name).
,其中name是您的代理的姓名,例如bob
。
请注意,目前该程序仅支持以下类别:名词 ( cat:noun
)、动词 ( cat:iv
)、行列式 ( 'every', 'no'
)、形容词 ( cat:jj
)。所有句子必须具有简单的结构,没有冠词(“a”、“an”、“the”),没有“and”/“or”连接的组件。
程序big.pl一次给出四个输出:
有关陈述的更多详细信息,请参阅Report.pdf 。
请注意, 3. ASP 表示是一个有效的答案集程序,您可以使用例如 clingo 来解决它,我鼓励您尝试一下。
由纽约州石溪大学硕士生 Yevheniia Soroka 创建(CSE505:逻辑计算,2018 年秋季)
特别感谢 Rolf Schwitter 对如何入门和分享有用资源的指导。