我正在尝试弄清楚如何在prolog中创建同义词。
我在这里有一些话...
word(likes).
word(house).
word(chair).
如果输入是喜欢的,我想输出一个同义词,例如"爱"。或者对于房子,我想输出"家"。
我想用同义词谓词来做到这一点,而不是将替代单词添加为一个新词()。
我已经这样做了:
synonym (house,[home]).
我不确定从这里去哪里。
如果您愿意手动列举案件,我会考虑具有"归一化"或"简化"词汇的谓词。例如,类似的东西:
%% synonym(Synonym, CanonicalTerm) :- Synonym is a synonym for CanonicalTerm
synonym(loves, enjoys).
synonym(likes, enjoys).
synonym(enjoys, enjoys).
prologs通常索引第一个参数,因此此查找会很快(肯定比枚举整个数据库并进行member/2
查找更快)。然后,您可以在解析或按需执行此步骤,然后围绕规范术语进行编码。
WordNet可能不认为love
和like
是同义词,因此它可能满足您的需求。
让我们将其应用于早期的问题:
?- 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
事实。