我正在做一个大学课程,而且我遇到了一些Prolog。
课程是制作一个非常基本的Watson(能够回答Jeapoardy问题的机器)。
无论如何,我已设法输出以下内容:
noun_phrase(det(the),np2(adj(traitorous),np2(noun(tostig_godwinson)))),
verb_phrase(verb(was),np(noun(slain)))).
但课程作业指明我现在需要提取第一个和第二个名词,以及动词,以使句子更简洁;即[Tostig_godwinson,是,被杀]。
我更喜欢用C等语言编程,所以我有点卡住了。如果这是一种过程语言,我会使用解析工具,但Prolog没有任何...我需要做什么来提取这些部分?
提前谢谢
答案 0 :(得分:0)
在Prolog中,语言是解析工具。使用univ (=..
) operator进行术语检查:
% find terminal nodes (words) in Tree
terminal(Tree, Type, Item) :-
Tree =.. [Type, Item],
atomic(Item).
terminal(Tree, Type, Item) :-
Tree =.. [_, Sub],
member(Node, Sub),
terminal(Node, Type, Item).
现在获取包含findall(N, terminal(Tree, noun, N), Nouns)
的所有名词的列表,并获取nth1
元素。