From 1013812b487bc438df49ec93ad9433438d5d6cf6 Mon Sep 17 00:00:00 2001 From: RncLsn Date: Fri, 26 Jun 2015 17:41:35 +0100 Subject: Summarisation before Skolemisation. Added Reactome testcase. --- src/resources/pagoda.properties | 2 +- .../ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java | 22 +++++++++------ .../ox/cs/pagoda/summary/HermitSummaryFilter.java | 33 ++++++++++++++-------- test/resources/LightTests.xml | 6 ++-- .../ox/cs/pagoda/global_tests/TestPagodaFLY.java | 2 +- .../cs/pagoda/global_tests/TestPagodaReactome.java | 26 +++++++++++++++++ .../ox/cs/pagoda/global_tests/TestPagodaUOBM.java | 3 +- test/uk/ac/ox/cs/pagoda/query/CheckAnswers.java | 3 +- 8 files changed, 71 insertions(+), 26 deletions(-) create mode 100644 test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaReactome.java diff --git a/src/resources/pagoda.properties b/src/resources/pagoda.properties index 0401d64..64de225 100644 --- a/src/resources/pagoda.properties +++ b/src/resources/pagoda.properties @@ -1,5 +1,5 @@ debug=true useAlwaysSimpleUpperBound=false -useSkolemUpperBound=false +useSkolemUpperBound=true statisticsDir=/home/alessandro/Dropbox/Oxford/PAGOdA/statistics \ No newline at end of file diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java index 51cb44d..04b2c65 100644 --- a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java +++ b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java @@ -43,6 +43,7 @@ class MyQueryReasoner extends QueryReasoner { private Collection predicatesWithGap = null; private ConsistencyStatus isConsistent; private ConsistencyManager consistency = new ConsistencyManager(this); + private int relevantOntologiesCounter = 0; public MyQueryReasoner() { setup(true); @@ -188,17 +189,22 @@ class MyQueryReasoner extends QueryReasoner { return; OWLOntology relevantOntologySubset = extractRelevantOntologySubset(queryRecord); -// queryRecord.saveRelevantOntology("/home/alessandro/Desktop/test-relevant-ontology.owl"); + + queryRecord.saveRelevantOntology("/home/alessandro/Desktop/test-relevant-ontology-"+relevantOntologiesCounter+".owl"); + relevantOntologiesCounter++; + + Utility.logInfo("Summarisation..."); + HermitSummaryFilter summarisedChecker = new HermitSummaryFilter(queryRecord, properties.getToCallHermiT()); + if(summarisedChecker.check(queryRecord.getGapAnswers()) == 0) + return; if(properties.getUseSkolemUpperBound() && - querySkolemisedRelevantSubset(relevantOntologySubset, queryRecord)) { + querySkolemisedRelevantSubset(relevantOntologySubset, queryRecord)) return; - } + Utility.logInfo("Full reasoning..."); Timer t = new Timer(); - HermitSummaryFilter summarisedChecker = new HermitSummaryFilter(queryRecord, properties.getToCallHermiT()); - summarisedChecker.check(queryRecord.getGapAnswers()); -// summarisedChecker.checkByFullReasoner(queryRecord.getGapAnswers()); + summarisedChecker.checkByFullReasoner(queryRecord.getGapAnswers()); Utility.logDebug("Total time for full reasoner: " + t.duration()); queryRecord.markAsProcessed(); @@ -360,7 +366,7 @@ class MyQueryReasoner extends QueryReasoner { } private boolean querySkolemisedRelevantSubset(OWLOntology relevantSubset, QueryRecord queryRecord) { - Utility.logInfo("Evaluating semi-Skolemised relevant upper store..."); + Utility.logInfo("Evaluating semi-Skolemised relevant upper store"); t.reset(); DatalogProgram relevantProgram = new DatalogProgram(relevantSubset, false); // toClassify is false @@ -371,7 +377,7 @@ class MyQueryReasoner extends QueryReasoner { relevantStore.importDataFromABoxOf(relevantSubset); String relevantOriginalMarkProgram = OWLHelper.getOriginalMarkProgram(relevantSubset); - int queryDependentMaxTermDepth = 10; // TODO make it dynamic + int queryDependentMaxTermDepth = 5; // TODO make it dynamic relevantStore.materialise("Mark original individuals", relevantOriginalMarkProgram); int materialisationTag = relevantStore.materialiseSkolemly(relevantProgram, null, queryDependentMaxTermDepth); diff --git a/src/uk/ac/ox/cs/pagoda/summary/HermitSummaryFilter.java b/src/uk/ac/ox/cs/pagoda/summary/HermitSummaryFilter.java index 95f2cbb..2d2198f 100644 --- a/src/uk/ac/ox/cs/pagoda/summary/HermitSummaryFilter.java +++ b/src/uk/ac/ox/cs/pagoda/summary/HermitSummaryFilter.java @@ -27,7 +27,9 @@ public class HermitSummaryFilter extends Checker { HermitChecker summarisedHermiT = null; boolean summarisedConsistency; Endomorph endomorphismChecker = null; - + private HashSet passed; + private int counter; + public HermitSummaryFilter(QueryRecord record, boolean toCallHermiT) { m_record = record; HermitChecker hermitChecker = new HermitChecker(record.getRelevantOntology(), record, toCallHermiT); @@ -115,6 +117,20 @@ public class HermitSummaryFilter extends Checker { return summarisedHermiT.getNoOfCalls() + endomorphismChecker.getNoOfCalls(); } + public int checkByFullReasoner(AnswerTuples answers) { + if(isDisposed()) throw new DisposedException(); + if(m_record.isProcessed()) + return 0; + + Utility.logDebug("The number of answers to be checked with HermiT: " + passed.size() + "/" + counter); + m_record.setDifficulty(Step.FULL_REASONING); + + if(summarisedConsistency) + return endomorphismChecker.check(new AnswerTuplesImp(m_record.getAnswerVariables(), passed)); + else + return endomorphismChecker.check(answers); + } + @Override public int check(AnswerTuples answers) { if(isDisposed()) throw new DisposedException(); @@ -125,10 +141,11 @@ public class HermitSummaryFilter extends Checker { initialiseSummarisedReasoner(); if(summarisedConsistency) { - Set passed = new HashSet(), succ = new HashSet(); + passed = new HashSet(); + Set succ = new HashSet(); Set falsified = new HashSet(), fail = new HashSet(); - int counter = 0; + counter = 0; AnswerTuple representative; for(AnswerTuple answer; answers.isValid(); answers.moveNext()) { ++counter; @@ -158,20 +175,14 @@ public class HermitSummaryFilter extends Checker { m_record.addProcessingTime(Step.SUMMARISATION, t.duration()); return 0; } - - Utility.logDebug("The number of answers to be checked with HermiT: " + passed.size() + "/" + counter); - - m_record.setDifficulty(Step.FULL_REASONING); m_record.addProcessingTime(Step.SUMMARISATION, t.duration()); - - return endomorphismChecker.check(new AnswerTuplesImp(m_record.getAnswerVariables(), passed)); } else { m_record.addProcessingTime(Step.SUMMARISATION, t.duration()); // m_record.saveRelevantOntology("fragment.owl"); - m_record.setDifficulty(Step.FULL_REASONING); - return endomorphismChecker.check(answers); } + + return 1; } @Override diff --git a/test/resources/LightTests.xml b/test/resources/LightTests.xml index 69cb572..544833b 100644 --- a/test/resources/LightTests.xml +++ b/test/resources/LightTests.xml @@ -7,13 +7,15 @@ + - + + - + \ No newline at end of file diff --git a/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaFLY.java b/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaFLY.java index caaad35..31d2eac 100644 --- a/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaFLY.java +++ b/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaFLY.java @@ -52,7 +52,7 @@ public class TestPagodaFLY { CheckAnswers.assertSameAnswers(answers, givenAnswers); } - @Test(groups = {"light", "justExecute"}) + @Test(groups = {"light", "justExecute", "nonOriginal"}) public void justExecute_newQueries() throws IOException { String ontoDir = TestUtil.getConfig().getProperty("ontoDir"); diff --git a/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaReactome.java b/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaReactome.java new file mode 100644 index 0000000..5c05b94 --- /dev/null +++ b/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaReactome.java @@ -0,0 +1,26 @@ +package uk.ac.ox.cs.pagoda.global_tests; + +import org.testng.annotations.Test; +import uk.ac.ox.cs.pagoda.Pagoda; +import uk.ac.ox.cs.pagoda.util.TestUtil; + +import java.io.IOException; +import java.nio.file.Paths; + +public class TestPagodaReactome { + + @Test(groups = {"light"}) + public void justExecute() throws IOException { + String ontoDir = TestUtil.getConfig().getProperty("ontoDir"); + + Pagoda.builder() + .ontology(Paths.get(ontoDir, "reactome/biopax-level3-processed.owl")) + .data(Paths.get(ontoDir, "reactome/data/sample_10.ttl")) + .query(Paths.get(ontoDir, "reactome/test.sparql")) + .classify(true) + .hermit(true) + .build() + .run(); + } + +} diff --git a/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaUOBM.java b/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaUOBM.java index d0f0b9a..9fb6cbe 100644 --- a/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaUOBM.java +++ b/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaUOBM.java @@ -87,7 +87,8 @@ public class TestPagodaUOBM { .query(Paths.get(ontoDir, "uobm/queries/uobm_sygenia_all-blanks.sparql")) .classify(true) .hermit(true) - .build().run(); + .build() + .run(); } @Test(groups = {"justExecute"}) diff --git a/test/uk/ac/ox/cs/pagoda/query/CheckAnswers.java b/test/uk/ac/ox/cs/pagoda/query/CheckAnswers.java index 97e3a57..71730c3 100644 --- a/test/uk/ac/ox/cs/pagoda/query/CheckAnswers.java +++ b/test/uk/ac/ox/cs/pagoda/query/CheckAnswers.java @@ -25,8 +25,7 @@ public class CheckAnswers { Gson gson = QueryRecord.GsonCreator.getInstance(); - Type cqType = new TypeToken>() { - }.getType(); + Type cqType = new TypeToken>() {}.getType(); Set computedAnswersRecords = gson.fromJson(computedReader, cqType); Set givenAnswersRecords = gson.fromJson(givenReader, cqType); -- cgit v1.2.3