2017-05-26 5 views
1

Bonjour J'essaie de former une règle Jess dans Jess Tab dans Protege 3.4 Je suis nouveau dans Jess. J'ai une ontologie avec un message de classe et 3 propriétés de type de données: intérêts, catégorie et classe. La règle fonctionne comme suit si les listes d'intérêts d'un message sont égales à la liste de catégories d'un message dont le message est ham.Classification des messages utilisant Jess Rule dans Protege

J'ai mappé ma classe Message en utilisant: (préfixe mapclass: Message) et voici ma règle. D'abord la règle mène à la boucle infinie et ne modifie que la classe de 1 instance. Qu'est-ce que je fais mal? Quand j'imprimer seulement elle est couronnée de succès, mais la modification qui est la base de mon travail ne constitue pas, s'il vous plaît aider urgently.The règle est

defrule print_message_cat_int_modify 
(object (is-a ..#Message) (OBJECT ?o) 
(object (...#interests $?i) (OBJECT ?o)) 
(object (..#category $?c) (OBJECT ?o)) 
(object (..#id ?id) (OBJECT ?o)) 
=> (if (eq (intersection$ $?c $?i)()) then (printout t "spam" crlf) 
(modify-instance ?o (..#class spam)) else (printout t "ham" crlf) (modify- 
instance ?o (..#class ham)))) 

Répondre

0

Fondamentalement, si vous correspondez un fait dans une règle puis modifiez ce fait, si la règle correspond toujours au fait modifié, la règle sera à nouveau déclenchée. Vous devez écrire la règle de telle sorte qu'une fois le fait modifié, la règle ne correspond plus. Dans votre cas, cela pourrait impliquer de faire correspondre la valeur "#class" et d'exclure celles que vous allez changer.

+0

Je fais correspondre plusieurs faits, ils dépendent du nombre de messages qui est variable et l'ID de cas, je veux que la valeur de la règle correspond (jambon par exemple) tant que les intérêts et la catégorie ne change pas (s'ils changent et pas égal à l'exemple, alors il doit être spam .Pouvez-vous me montrer en modifiant mon defrule, je suis nouveau en jess et besoin du code cette semaine.Merci. – user3379762