2016-12-08 6 views
0

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

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

  • для каждого подкласса (C, D) в классов (O) × Классы (О):
    • для каждого свойства Р, определенной в свойств объекта (O):
      • , если С и Р некоторые D выполнима:
        • выход (С, Р, D)

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

Использование OWLKnowledgeExplorerReasoner из JFact как предложено here не работает, потому что он разбился при извлечении соседних меток (см мой test case)

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

Спасибо!

ответ

2

Прежде всего, ваш чек неверен. Для пустой онтологии 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, как предложено здесь, не работает, поскольку оно разбилось при извлечении соседних меток (исключение недоступности ситуации!).

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

+0

Спасибо за ваш быстрый ответ! Я попробую ваши предложения. Суженная версия моей проблемы - это поиск всех операторов свойств объекта, которые связаны с набором классов. Я надеюсь, что это может быть достигнуто более непосредственно, чем цикл по всем парам и свойствам класса. Я также добавил ссылку на тестовый пример с backtrace. – user1447265

+0

Для вашей проблемы я бы создал именованные классы для 'P some Thing' для всех интересующих вас' P'. Затем я бы классифицировал обогащенную онтологию и попросил суперклассы дизъюнкции всех понятий из вашего набора (это может занять некоторое время). Спасибо за ваш пример, я посмотрю. –

+0

Еще раз спасибо. Я смог извлечь информацию о свойствах предполагаемых объектов, используя оригинальный ответ (неудовлетворительный 'C, а не (P some D)') и некоторые оптимизации. (Моя [реализация] (https://gist.github.com/benozol/20d84d5132152fe7d17966234d049257) вашего второго предложения ('P some Thing' для всех' P') привела только к 'T', но это нормально, учитывая первое решение.) – user1447265