Prolog - 寻找替代词(同义词)

时间:2017-12-07 23:12:39

标签: list dictionary prolog predicate synonym

我正在试图弄清楚如何在Prolog中创建同义词查找器。

我在这里有一些话......

word(likes).
word(house).
word(chair).

如果输入是喜欢的,我想输出一个同义词,如'loves'。或者对于房子,我想输出'home'。

我希望使用同义词谓词来执行此操作,而不是将替代词添加为新词()。

我已经做到了这一点:

synonym (house,[home]).

我不确定从哪里开始。

1 个答案:

答案 0 :(得分:4)

如果您愿意手动枚举您的案例,我会考虑使用谓词“规范化”或“简化”词汇。例如,像这样:

%% synonym(Synonym, CanonicalTerm) :- Synonym is a synonym for CanonicalTerm
synonym(loves,  enjoys).
synonym(likes,  enjoys).
synonym(enjoys, enjoys).

Prolog通常会对第一个参数进行索引,因此这种查找速度很快(当然比枚举整个数据库和进行member/2查找更快)。然后,您可以在解析或按需后执行此步骤,并围绕规范术语编写规则。

WordNet可能并不认为lovelike是同义词,所以它可能对你的需求有些过分。

让我们将其应用于earlier question

?- phrase(sentence(np(Noun,_), vp(Verb, np(Object, _))),
   [a,teenage,boy,loves,a,big,problem]), 
   synonym(Verb, CanonicalVerb),
   present(Suggestion, Noun, CanonicalVerb, Object).
Noun = boy,
Verb = loves,
CanonicalVerb = enjoys,
Object = problem,
Suggestion = 'construction kit' 

当然,这也假设您更新present/4事实。