认识到Prolog的句子结构(Recognize sentence structure in Pro

2019-10-22 04:25发布

我在那里我阅读三种不同类型的句子的情况。 他们将是下列形式之一:

_ is a _
A _ is a _
Is _ a _?

我需要能够认识到这是进入句子的类型,然后添加或查询我的知识基础。

例如,用户可以输入:

Fido is a dog.

然后我会说其实添加到我的知识基础。 然后,用户可以输入:

Is Fido a dog?

而该计划将回答是。 到目前为止,我只承认事实的想法是分裂的空间句子并将它们存储在列表中。 然后检查,看看那里的关键字出现在列表中。 这是不是最好的解决方案,因为它假定“_”字永远是一个字。

有没有人有一个更好的解决方案?

Answer 1:

到输入分成令牌列表的最简单的方法,就是atomic_list_concat / 3使用。 下面是一些例子:

?- atomic_list_concat(X,' ','Fido is a dog .').
X = ['Fido', is, a, dog, '.'].

?- atomic_list_concat(X,' ','Is Fido a dog ?').
X = ['Is', 'Fido', a, dog, ?].

然后,您可以用DCG来分析句子,返回句解析树。 最简单的是:

s(fact(isa(X,Y))) --> [X, is, a, Y, '.'].
s(query(isa(X,Y))) --> ['Is', X, a, Y, '?'].

要真正解析使用谓短语/ 2。 然后,您可以通过胶解析树解释一切融合在一起,把这个谓词处理/ 1:

do(X) :-
   atomic_list_concat(Y,' ',X),
   phrase(s(Z),Y),
   handle(Z).

:- dynamic isa/2.

handle(fact(X)) :- assertz(X), 
    write('Knowledege base extended'), nl.
handle(query(X)) :- 
    (X -> write('Query succeeded'), nl; 
          write('Query failed'), nl).

下面是一个例子来看:

 ?- do('Is Fido a dog ?').
 Query failed

 ?- do('Fido is a dog .').
 Knowledege base extended

 ?- do('Is Fido a dog ?').
 Query succeeded

再见



文章来源: Recognize sentence structure in Prolog
标签: prolog nlp