Получить заполнитель предполагаемого свойства объекта в онтологии OWL

Как я могу получить для каждого класса в моей онтологии O все (выведенные) экзистенциальные ограничения?

Мой текущий подход заключается в переборе всех пар классов и свойств объекта и проверке соблюдения ограничения:

  • for each subclass (C, D) in Classes(O) × Classes(O):
    • for each property P defined in Object properties(O):
      • if C and P some D is satisfiable:
        • yield (C, P, D)

Это довольно медленно, так как я работаю с онтологией вакцин, которая имеет 4557 классов и 107 свойства объекта. Даже если это одноразовое вычисление, я могу чему-то научиться, увидев лучшие подходы.

Использование OWLKnowledgeExplorerReasoner из JFact, как предложено здесь, не сработало, потому что произошел сбой при получении меток соседей (см. мой тестовый пример)

Можете ли вы предложить какое-либо улучшенное решение с использованием OWLAPI, Protégé или любого другого инструмента? Кроме того, было бы неплохо получать только самые конкретные классы-заполнители.

Спасибо!


person user1447265    schedule 08.12.2016    source источник


Ответы (1)


Во-первых, ваш чек неверен. Для пустой онтологии C and P some D было бы выполнимо, а это не то, что вам нужно. Вы должны проверить, является ли C and not (P some D) невыполнимым (в качестве альтернативы вы можете просто проверить isSubsumedBy(C, P some D)).

Вы можете улучшить время исследования, если будете использовать некоторые методы, используемые для классификации, например:

  • если C является подклассом P some D, то таковыми являются все подклассы C
  • если C не является подклассом P some D, то таковыми являются все суперклассы C
  • Аналогичные правила для под/суперклассов/свойств P и D
  • Вы можете дать имена всем P some Thing выражениям. После классификации вы можете ограничить поиск C только подклассами этих понятий.

Также помогает, если вы можете сузить проблему. Вам действительно нужно проверять все пары и все свойства?

Использование OWLKnowledgeExplorerReasoner из JFact, предложенное здесь, не сработало, потому что произошел сбой при получении меток соседей (ситуация Exception Unreachable!).

Не могли бы вы предоставить тестовый пример и полную трассировку стека проблемы, чтобы мы могли ее исправить? Вы пытались использовать то же самое с FaCT++?

person Dmitry Tsarkov    schedule 08.12.2016
comment
Спасибо за быстрый ответ! Я попробую ваши предложения. Упрощенная версия моей задачи заключается в поиске всех утверждений о свойствах объекта, которые влекут за собой набор классов. Я надеюсь, что это может быть достигнуто более прямым путем, чем перебор всех пар классов и свойств. Я также добавил ссылку на тестовый пример с обратной трассировкой. - person user1447265; 08.12.2016
comment
Для вашей проблемы я бы создал именованные классы для P some Thing для всех P, которые вас интересуют. Затем я бы классифицировал обогащенную онтологию и попросил суперклассы дизъюнкции всех понятий из вашего набора (это может занять некоторое время). Спасибо за пример, посмотрю. - person Dmitry Tsarkov; 10.12.2016
comment
Спасибо еще раз. Мне удалось извлечь информацию о предполагаемых свойствах объекта, используя ваш исходный ответ (неудовлетворительный C and not (P some D)) и некоторые оптимизации. (Моя реализация вашего второго предложения (P some Thing для всех P) привела только к T, но это нормально учитывая первое решение.) - person user1447265; 12.12.2016