Я строю онтологию из 3 классов:
- Сообщения
- ветчина
- Спам
2 свойства данных, домен: сообщения и диапазон xsd:string:
- имеет интерес
- hasCategory
2 правила SWRL: Message(?x),hasInterest(?x,?a), hasCategory(?x,?b), swrl:equal(?a,?b) ->Ham(?x)
Сообщение (? x), hasInterest (? x,? a), hasCategory (? x,? b), swrl: notEqual (? a? b) -> Спам (? x)
Я хочу классифицировать экземпляры класса Message как класс Spam или Ham ; если значение hasCategory (категория сообщения) равно значению hasInterest (интересы пользователя), то сообщение является спамом.
Это работало правильно. Если у меня есть 1 категория сообщений и 1 интерес, например: m1 hasInterests sports m1 hasCategory sports
Так что, если у меня есть список итераций или категорий, например: каждое сообщение имеет более 1 интереса {спорт, фильмы} Каждое сообщение имеет более 1 категории {кино, политика}
Я хочу сказать, что если оба списка пересекаются, то сообщение является ветчиной, поэтому swrl: equal не работает, как я могу определить его для сравнения всех людей
Что я сделал, так это повторил hasInterests и hasCategory в зависимости от отдельных значений, которые я имею в виду, определяя список вручную, и это сработало, есть ли другой автоматический способ использования списка строк и как их сравнить в swrl?