我正在试图弄清楚如何在Prolog中创建同义词查找器。
我在这里有一些话......
word(likes).
word(house).
word(chair).
如果输入是喜欢的,我想输出一个同义词,如'loves'。或者对于房子,我想输出'home'。
我希望使用同义词谓词来执行此操作,而不是将替代词添加为新词()。
我已经做到了这一点:
synonym (house,[home]).
我不确定从哪里开始。
答案 0 :(得分:4)
如果您愿意手动枚举您的案例,我会考虑使用谓词“规范化”或“简化”词汇。例如,像这样:
%% synonym(Synonym, CanonicalTerm) :- Synonym is a synonym for CanonicalTerm
synonym(loves, enjoys).
synonym(likes, enjoys).
synonym(enjoys, enjoys).
Prolog通常会对第一个参数进行索引,因此这种查找速度很快(当然比枚举整个数据库和进行member/2
查找更快)。然后,您可以在解析或按需后执行此步骤,并围绕规范术语编写规则。
WordNet可能并不认为love
和like
是同义词,所以它可能对你的需求有些过分。
让我们将其应用于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
事实。