DisjointClasses ошибка при использовании opencyc owl в Java
В настоящее время я работаю над проектом по обработке естественного языка, пытаясь использовать openCYC в качестве КБ. В данный момент я просто пытаюсь загрузить онтологию и создать экземпляр аргумента, используя java owl api v3.4.8 и HermiT, однако всякий раз, когда я пытаюсь создать экземпляр аргумента, я получаю сообщение об ошибке.
Исключение в потоке "main" java.lang.IllegalArgumentException: ошибка: проанализированы непересекающиеся классы ( http://sw.opencyc.org/concept/Mx4rEHSj4Q0sQVGnAmZNRRJ20Q).
текущий код:
File ontology = new File("owl-export-unversioned.owl");
OWLOntologyManager m = OWLManager.createOWLOntologyManager();
System.out.println("Loading...");
OWLOntology o = m.loadOntologyFromOntologyDocument(ontology);
System.out.println("Loaded");
Reasoner hermit=new Reasoner(o);
System.out.println(hermit.isConsistent());
Означает ли это, что существует проблема с самой онтологией opencyc? Или я что-то не так делаю?
1 ответ
Проблема в том, что openCyc содержит ошибочную аксиому: DisjointClasses
только с одним аргументом. Спецификации OWL указывают, что DisjointClasses должны иметь два или более аргумента.
API OWL позволит вам разобрать эту онтологию, но HermiT будет жаловаться на эту аксиому и, возможно, больше.
Ты можешь использовать OWL2DLProfile
чтобы проверить, какие аксиомы нарушают профиль OWL 2 DL. Это сообщит о других ошибочных аксиомах того же типа. Вы должны будете решить сами, какое решение является правильным - у API OWL еще нет реализации исправления.