2017-12-07 26 views
0

私はPrologで同義語ファインダを作成する方法を理解しようとしています。入力が好きだったProlog - 別の単語(類義語)を見つける

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

場合


私はここにいくつかの単語を持っている...、私は出力にこのような「愛」などの同義語をしたいと思います。または家のために私は「家」を出力したいと思うでしょう。

代わりの単語を新しい単語()として追加するのではなく、同義語述語でこれを行いたいと思います。

私は限り、これを行うように持っている:

synonym (house,[home]). 

私はどこここから行くのか分かりません。

+3

[WordNet](https://wordnet.princeton.edu/)は、Prologデータベースとして便利に利用できます。 –

答えて

3

手動でケースを列挙する場合は、語彙を「正規化」または「簡略化する」という述語を検討することをお勧めします。例えば、このような何か:

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

プロローグ通常、最初の引数のインデックスので、このルックアップは、高速(確かに速くデータベース全体を列挙し、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事実を更新を前提としています。

関連する問題