手動でケースを列挙する場合は、語彙を「正規化」または「簡略化する」という述語を検討することをお勧めします。例えば、このような何か:
%% synonym(Synonym, CanonicalTerm) :- Synonym is a synonym for CanonicalTerm
synonym(loves, enjoys).
synonym(likes, enjoys).
synonym(enjoys, enjoys).
プロローグ通常、最初の引数のインデックスので、このルックアップは、高速(確かに速くデータベース全体を列挙し、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
事実を更新を前提としています。
[WordNet](https://wordnet.princeton.edu/)は、Prologデータベースとして便利に利用できます。 –