我目前有一个包含几个人和一些关系谓词的小型 Prolog 数据库。例如:
female(anna).
female(susan).
male(john).
male(timmy).
siblings(anna, susan).
siblings(anna, john).
siblings(susan, john).
sibling(X, Y) :- siblings(X, Y) ; siblings(Y, X).
%X is brother of Y
brother(X, Y) :- male(X), sibling(X, Y).
Run Code Online (Sandbox Code Playgroud)
而且我有一个 DCG 可以确定有效的问题,例如“谁是约翰的兄弟”,这也很有效。
question --> ip, verb, article, noun, pronoun, name.
Run Code Online (Sandbox Code Playgroud)
现在我想让我的程序用这样的名词和名字来调用我的家庭数据库:
noun(X, name).
Run Code Online (Sandbox Code Playgroud)
在这个例子中应该是
brother(X, anna).
Run Code Online (Sandbox Code Playgroud)
然后将答案作为自然语言答案返回,例如:
"the brother of anna is john"
Run Code Online (Sandbox Code Playgroud)
定义答案句的语法也没有问题。我唯一不知道的是,如何从我的 DCG 调用到我的数据库并在其中填充正确的值。我现在环顾四周 - 也许我不知道正确的搜索词 - 并且找不到与此相关的内容。
我希望你们有一些好主意!:)
谢谢你。