Prolog解析输出

时间:2011-04-04 17:45:22

标签: parsing prolog nlp

我正在做一个大学课程,而且我遇到了一些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没有任何...我需要做什么来提取这些部分?

提前谢谢

1 个答案:

答案 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元素。