从prolog列表中提取单词

时间:2011-04-05 12:44:26

标签: list prolog

我已经在Prolog中设置了自然语言解析的任务。到目前为止,我的程序工作到一定程度。它将打印一个句子,例如,如果我输入一个[the, cat, sat, on, the, mat]列表,它将正确输出:

(noun_phrase(det(the), np2(noun(cat))), verb_phrase(verb(sat), pp(prep(on), noun_phrase(det(the), np2(noun(mat)))))) 

我要做的下一个任务是从句子中提取关键词,即提取名词短语中的名词,动词短语中的动词和动词短语中的名词,这样我就可以返回一个列表:{ {1}}。任何人都可以帮助我开始,因为我非常坚持这一点。谢谢!

我目前的代码是:

[cat, sat, mat]

1 个答案:

答案 0 :(得分:1)

首先,您应该注意到您使用了两个具有相同名称和不同arity(np / 1和np / 2)的不同术语。这可能不是你想要的,因为它可能导致混乱。

要获得您想要的列表,您可以进行解析,但现在在预处理的句子上,使用以下内容:

extract_keywords(L, [N,V,VN]):-
 sentence(L, sentence(NP, verb_phrase(verb(V), pp(_, VP)))),
 noun(NP, N),
 noun(VP, VN).

noun(noun_phrase(_, NP), N):-
  noun(NP, N).
noun(noun(N), N).
noun(np2(_, NP), N):-
  noun(NP, N).
noun(np2(NP), N):-
  noun(NP, N).

extract_keywords谓词解析句子并将名词短语和动词短语分开,然后解析子短语以获取名词。

我给你的例子有点弱,因为它只适用于这些句子。

以下是两个例子:

?- extract_keywords([the, cat, sat, on, the, mat], X).
X = [cat, sat, mat] 

?- extract_keywords([big, cat, sat, on, the, big, mat], X).
X = [cat, sat, mat]