Решить несоответствия в онтологии OWL - PullRequest
0 голосов
/ 15 октября 2018

(Спасибо за комментарии, я обновляю свой код и вопрос. Возможно, это будет полезно для других.)
Обновление
Я выполняю несколько процессов редактирования в одной онтологии, вв конце концов, я понял, что моя онтология противоречива.Теперь я должен избавиться от всех неудовлетворенных классов.Я много искал, но нет кода для устранения несоответствий.

Придерживайтесь подхода этой статьи и библиотеки Мэтью Хорриджа и этого , но я все еще борюсь с этой проблемой.Я обновляю свой код и вопрос, это мое решение.Есть ли еще предложения для этого?

Что я делаю для устранения несоответствий:

  1. Запустите средство поиска для поиска неудовлетворительных классов
  2. Из всех неудовлетворительных классов найдите только root-unsatisfiable-классы
  3. Найдите для них аксиомы объяснения
  4. Ранжируйте их и выберите аксиомы, которые пользователь должен удалить (или переписать)

В приведенном ниже коде (используядругие существующие решения), мне нужно только реализовать функцию ранга (оставленный открытый вопрос в средстве разрешения несоответствий).

Например, для моей онтологии у него 25 неудовлетворительных классов, из которых только 2 являются корнемнесогласованности.Эти 2 корневых класса имеют 11 аксиом (которые я получаю по getExplanations)

import java.io.File;
import java.util.Iterator;
import java.util.Set;
import org.semanticweb.owl.explanation.impl.rootderived.CompleteRootDerivedReasoner;
import org.semanticweb.owl.explanation.impl.rootderived.StructuralRootDerivedReasoner;
import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.model.*;
import org.semanticweb.owlapi.reasoner.OWLReasoner;
import org.semanticweb.owlapi.reasoner.OWLReasonerFactory;
import com.clarkparsia.owlapi.explanation.BlackBoxExplanation;
import com.clarkparsia.owlapi.explanation.HSTExplanationGenerator;
import com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory;

public class InconsistencyTest {
 public static void main(String areg[]) throws Exception {

  File fileM = new File("address\\to\\my\\ontology\\myOnt.owl");
  OWLOntologyManager tempManager = OWLManager.createOWLOntologyManager();
  OWLOntology ont = tempManager.loadOntologyFromOntologyDocument(fileM);

  // run an reasoner
  OWLReasonerFactory reasonerFactory = new PelletReasonerFactory();
  OWLReasoner reasoner = reasonerFactory.createNonBufferingReasoner(ont);
  if (reasoner.isConsistent()) {
    // an ontology can be consistent, but have unsatisfiable classes.
    if (reasoner.getUnsatisfiableClasses().getEntitiesMinusBottom().size() > 0) {
    // means: an ontology is consistent but unsatisfiable!
        System.out.println("The ontology FAILED satisfiability test with Pellet reasoner. \n Unsatisfiable classes detected: "
                + reasoner.getUnsatisfiableClasses().getEntitiesMinusBottom().size());

        // This line return all unsatisfibaleClasses, but I do not need it
        // Iterator<OWLClass> aList=reasoner.getUnsatisfiableClasses().getEntitiesMinusBottom().iterator();

        // get root of unstaisfiableClasses, and get their explanations 
        BlackBoxExplanation bb = new BlackBoxExplanation(ont, reasonerFactory, reasoner);
        HSTExplanationGenerator multExplanator = new HSTExplanationGenerator(bb);

        CompleteRootDerivedReasoner rdr = new CompleteRootDerivedReasoner(tempManager, reasoner, reasonerFactory);
        for (OWLClass cls : rdr.getRootUnsatisfiableClasses()) {
            System.out.println("**** ROOT! " + cls);
            int maxEntailment = 5;
            Set<Set<OWLAxiom>> exSet = multExplanator.getExplanations(cls, maxEntailment);
            OWLAxiom deletedAxiom = rankAxiom(exSet);
            //return these axioms to user to delete or rewrite them
        }
    } else {
        System.out.println("The ontology PASSED the consistency test.");
    }
} else {
    System.out.println("The ontology FAILED the consistency test, please review the Axioms or debug using Protege");
    }
reasoner.dispose();
  }

Правильно ли я следую?Есть ли какие-либо предложения по ранжированию аксиом?
Очень спасибо

...