From: <jen...@us...> - 2010-09-21 12:38:52
|
Revision: 2327 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2327&view=rev Author: jenslehmann Date: 2010-09-21 12:38:44 +0000 (Tue, 21 Sep 2010) Log Message: ----------- fixed remaining compile errors Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/CrossValidation.java trunk/scripts/src/main/java/org/dllearner/scripts/NestedCrossValidation.java trunk/scripts/src/main/java/org/dllearner/scripts/TestValidation.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/CrossValidation.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/CrossValidation.java 2010-09-21 12:28:13 UTC (rev 2326) +++ trunk/scripts/src/main/java/org/dllearner/scripts/CrossValidation.java 2010-09-21 12:38:44 UTC (rev 2327) @@ -118,7 +118,7 @@ } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); - } catch (ParseException e) { + } catch (org.dllearner.confparser.ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } @@ -208,7 +208,7 @@ } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); - } catch (ParseException e) { + } catch (org.dllearner.confparser.ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } Modified: trunk/scripts/src/main/java/org/dllearner/scripts/NestedCrossValidation.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/NestedCrossValidation.java 2010-09-21 12:28:13 UTC (rev 2326) +++ trunk/scripts/src/main/java/org/dllearner/scripts/NestedCrossValidation.java 2010-09-21 12:38:44 UTC (rev 2327) @@ -102,8 +102,9 @@ * @throws IOException * @throws ParseException * @throws ComponentInitException + * @throws org.dllearner.confparser.ParseException */ - public static void main(String[] args) throws IOException, ComponentInitException, ParseException { + public static void main(String[] args) throws IOException, ComponentInitException, ParseException, org.dllearner.confparser.ParseException { OptionParser parser = new OptionParser(); parser.acceptsAll(asList("h", "?", "help"), "Show help."); @@ -162,7 +163,7 @@ } - public NestedCrossValidation(File confFile, int outerFolds, int innerFolds, String parameter, int startValue, int endValue, boolean verbose) throws FileNotFoundException, ComponentInitException, ParseException { + public NestedCrossValidation(File confFile, int outerFolds, int innerFolds, String parameter, int startValue, int endValue, boolean verbose) throws FileNotFoundException, ComponentInitException, ParseException, org.dllearner.confparser.ParseException { DecimalFormat df = new DecimalFormat(); ComponentManager cm = ComponentManager.getInstance(); Modified: trunk/scripts/src/main/java/org/dllearner/scripts/TestValidation.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/TestValidation.java 2010-09-21 12:28:13 UTC (rev 2326) +++ trunk/scripts/src/main/java/org/dllearner/scripts/TestValidation.java 2010-09-21 12:38:44 UTC (rev 2327) @@ -44,7 +44,7 @@ private static Logger logger = Logger.getRootLogger(); - public static void main(String args[]) throws ComponentInitException, FileNotFoundException, ParseException { + public static void main(String args[]) throws ComponentInitException, FileNotFoundException, ParseException, org.dllearner.confparser.ParseException { // create logger (a simple logger which outputs // its messages to the console) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2011-08-03 13:00:25
|
Revision: 2978 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2978&view=rev Author: jenslehmann Date: 2011-08-03 13:00:19 +0000 (Wed, 03 Aug 2011) Log Message: ----------- started enrichment evaluator Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/matching/GeneralMatcher.java Added Paths: ----------- trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/EnrichmentEvaluation.java Added: trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/EnrichmentEvaluation.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/EnrichmentEvaluation.java (rev 0) +++ trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/EnrichmentEvaluation.java 2011-08-03 13:00:19 UTC (rev 2978) @@ -0,0 +1,97 @@ +/** + * Copyright (C) 2007-2008, Jens Lehmann + * + * This file is part of DL-Learner. + * + * DL-Learner is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * DL-Learner is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +package org.dllearner.scripts.evaluation; + +import java.util.Set; +import java.util.TreeSet; + +import org.aksw.commons.sparql.sparqler.SelectPaginated; +import org.aksw.commons.sparql.sparqler.Sparqler; +import org.aksw.commons.sparql.sparqler.SparqlerHttp; +import org.dllearner.algorithms.properties.SubPropertyOfAxiomLearner; +import org.dllearner.core.owl.ObjectProperty; +import org.dllearner.kb.SparqlEndpointKS; +import org.dllearner.kb.sparql.SparqlEndpoint; + +import com.hp.hpl.jena.query.QuerySolution; + +/** + * Evaluation of enrichment algorithms on DBpedia (Live). + * + * @author Jens Lehmann + * + */ +public class EnrichmentEvaluation { + + // max. execution time for each learner for each entity + private int maxExecutionTimeInSeconds = 10; + + public EnrichmentEvaluation() { + + } + + public void start() { + + // create DBpedia Live knowledge source + SparqlEndpoint se = SparqlEndpoint.getEndpointDBpediaLiveAKSW(); + + Set<ObjectProperty> properties = getAllObjectProperties(se); + System.out.println(properties); + + SparqlEndpointKS ks = new SparqlEndpointKS(se); + + SubPropertyOfAxiomLearner learner = new SubPropertyOfAxiomLearner(ks); + learner.setMaxExecutionTimeInSeconds(10); + + } + + private void getAllClasses() { + + + + } + + private Set<ObjectProperty> getAllObjectProperties(SparqlEndpoint se) { + Set<ObjectProperty> properties = new TreeSet<ObjectProperty>(); + Sparqler x = new SparqlerHttp(se.getURL().toString()); + SelectPaginated q = new SelectPaginated(x, "PREFIX owl: <http://www.w3.org/2002/07/owl#> SELECT ?p WHERE {?p a owl:ObjectProperty}", 1000); + while(q.hasNext()) { + QuerySolution qs = q.next(); + System.out.println(qs); + properties.add(new ObjectProperty(qs.getResource("p").getURI())); + } + return properties; + } + + public void printResultsPlain() { + + } + + public void printResultsLaTeX() { + + } + + public static void main(String[] args) { + EnrichmentEvaluation ee = new EnrichmentEvaluation(); + ee.start(); + ee.printResultsPlain(); + } + +} Modified: trunk/scripts/src/main/java/org/dllearner/scripts/matching/GeneralMatcher.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/matching/GeneralMatcher.java 2011-08-03 05:58:49 UTC (rev 2977) +++ trunk/scripts/src/main/java/org/dllearner/scripts/matching/GeneralMatcher.java 2011-08-03 13:00:19 UTC (rev 2978) @@ -24,6 +24,9 @@ import java.util.LinkedList; import java.util.Set; +import org.aksw.commons.sparql.sparqler.SelectPaginated; +import org.aksw.commons.sparql.sparqler.Sparqler; +import org.aksw.commons.sparql.sparqler.SparqlerHttp; import org.dllearner.algorithm.qtl.QTL; import org.dllearner.core.ComponentInitException; import org.dllearner.core.LearningProblemUnsupportedException; @@ -31,6 +34,8 @@ import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.learningproblems.PosOnlyLP; +import com.hp.hpl.jena.query.QuerySolution; + /** * * @@ -45,6 +50,13 @@ // option 1: read links from file // option 2: use SPARQL to get links + // use AKSW commons SPARQL API + Sparqler x = new SparqlerHttp(sparqlEndpoint1.getURL().toString()); + SelectPaginated q = new SelectPaginated(x, "query", 1000); + while(q.hasNext()) { + QuerySolution qs = q.next(); + } + // phase 2: create learning problems // phase 3: execute learning algorithms This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2011-08-04 16:05:05
|
Revision: 3001 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3001&view=rev Author: lorenz_b Date: 2011-08-04 16:04:59 +0000 (Thu, 04 Aug 2011) Log Message: ----------- Small changes to compile successfully. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/DBpediaClassLearnerCELOE.java trunk/scripts/src/main/java/org/dllearner/scripts/matching/GeneralMatcher.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/DBpediaClassLearnerCELOE.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/DBpediaClassLearnerCELOE.java 2011-08-04 14:24:53 UTC (rev 3000) +++ trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/DBpediaClassLearnerCELOE.java 2011-08-04 16:04:59 UTC (rev 3001) @@ -19,6 +19,17 @@ */ package org.dllearner.scripts.improveWikipedia; +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; + import org.aksw.commons.sparql.core.ResultSetRenderer; import org.aksw.commons.sparql.core.SparqlEndpoint; import org.aksw.commons.sparql.core.SparqlTemplate; @@ -26,12 +37,17 @@ import org.aksw.commons.sparql.core.impl.HttpSparqlEndpoint; import org.apache.velocity.VelocityContext; import org.dllearner.algorithms.celoe.CELOE; +import org.dllearner.core.AbstractReasonerComponent; import org.dllearner.core.ComponentManager; import org.dllearner.core.LearningProblemUnsupportedException; import org.dllearner.core.OntologyFormat; -import org.dllearner.core.AbstractReasonerComponent; import org.dllearner.core.configurators.CELOEConfigurator; -import org.dllearner.core.owl.*; +import org.dllearner.core.owl.Description; +import org.dllearner.core.owl.EquivalentClassesAxiom; +import org.dllearner.core.owl.Individual; +import org.dllearner.core.owl.KB; +import org.dllearner.core.owl.NamedClass; +import org.dllearner.core.owl.Thing; import org.dllearner.gui.Config; import org.dllearner.gui.ConfigSave; import org.dllearner.kb.sparql.SparqlKnowledgeSource; @@ -42,11 +58,6 @@ import org.dllearner.utilities.datastructures.SetManipulation; import org.dllearner.utilities.datastructures.SortedSetTuple; -import java.io.File; -import java.io.IOException; -import java.net.URL; -import java.util.*; - /** * A script, which learns definitions / super classes of classes in the DBpedia ontology. * Modified: trunk/scripts/src/main/java/org/dllearner/scripts/matching/GeneralMatcher.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/matching/GeneralMatcher.java 2011-08-04 14:24:53 UTC (rev 3000) +++ trunk/scripts/src/main/java/org/dllearner/scripts/matching/GeneralMatcher.java 2011-08-04 16:04:59 UTC (rev 3001) @@ -24,9 +24,6 @@ import java.util.LinkedList; import java.util.Set; -import org.aksw.commons.sparql.sparqler.SelectPaginated; -import org.aksw.commons.sparql.sparqler.Sparqler; -import org.aksw.commons.sparql.sparqler.SparqlerHttp; import org.dllearner.algorithm.qtl.QTL; import org.dllearner.core.ComponentInitException; import org.dllearner.core.LearningProblemUnsupportedException; @@ -34,8 +31,6 @@ import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.learningproblems.PosOnlyLP; -import com.hp.hpl.jena.query.QuerySolution; - /** * * @@ -51,11 +46,11 @@ // option 2: use SPARQL to get links // use AKSW commons SPARQL API - Sparqler x = new SparqlerHttp(sparqlEndpoint1.getURL().toString()); - SelectPaginated q = new SelectPaginated(x, "query", 1000); - while(q.hasNext()) { - QuerySolution qs = q.next(); - } +// Sparqler x = new SparqlerHttp(sparqlEndpoint1.getURL().toString()); +// SelectPaginated q = new SelectPaginated(x, "query", 1000); +// while(q.hasNext()) { +// QuerySolution qs = q.next(); +// } // phase 2: create learning problems This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-02-01 11:36:56
|
Revision: 3561 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3561&view=rev Author: lorenz_b Date: 2012-02-01 11:36:50 +0000 (Wed, 01 Feb 2012) Log Message: ----------- Added renderer for justifications. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/ApproximateDebugging.java trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/ApproximateDebugging.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/ApproximateDebugging.java 2012-02-01 11:35:39 UTC (rev 3560) +++ trunk/scripts/src/main/java/org/dllearner/scripts/ApproximateDebugging.java 2012-02-01 11:36:50 UTC (rev 3561) @@ -1,30 +1,34 @@ package org.dllearner.scripts; +import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; import java.io.PrintWriter; import java.net.URL; import java.util.Collections; -import java.util.Comparator; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; +import org.apache.commons.compress.compressors.CompressorInputStream; +import org.apache.commons.compress.compressors.CompressorStreamFactory; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.FileAppender; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.SimpleLayout; -import org.dllearner.algorithm.qtl.util.ModelGenerator; -import org.dllearner.algorithm.qtl.util.ModelGenerator.Strategy; import org.dllearner.kb.sparql.ConciseBoundedDescriptionGenerator; import org.dllearner.kb.sparql.ConciseBoundedDescriptionGeneratorImpl; import org.dllearner.kb.sparql.ExtractionDBCache; import org.dllearner.kb.sparql.SparqlEndpoint; -import org.dllearner.kb.sparql.SymmetricConciseBoundedDescriptionGeneratorImpl; import org.mindswap.pellet.PelletOptions; import org.semanticweb.owlapi.apibinding.OWLManager; import org.semanticweb.owlapi.io.RDFXMLOntologyFormat; @@ -35,7 +39,6 @@ import org.semanticweb.owlapi.model.OWLDataFactory; import org.semanticweb.owlapi.model.OWLDisjointClassesAxiom; import org.semanticweb.owlapi.model.OWLEntity; -import org.semanticweb.owlapi.model.OWLException; import org.semanticweb.owlapi.model.OWLIndividual; import org.semanticweb.owlapi.model.OWLObjectProperty; import org.semanticweb.owlapi.model.OWLObjectPropertyAssertionAxiom; @@ -48,7 +51,6 @@ import uk.ac.manchester.cs.owl.owlapi.OWLDataFactoryImpl; import uk.ac.manchester.cs.owlapi.modularity.ModuleType; -import weka.attributeSelection.ConsistencySubsetEval; import com.clarkparsia.modularity.ModularityUtils; import com.clarkparsia.owlapi.explanation.PelletExplanation; @@ -84,6 +86,12 @@ public ApproximateDebugging(OWLOntology schema, OWLOntology data) throws OWLOntologyCreationException { this.schema = schema; this.data = data; + System.out.println(data.getLogicalAxiomCount()); + for(OWLAxiom ax : new HashSet<OWLAxiom>(data.getLogicalAxioms())){ + if(!ax.getDataPropertiesInSignature().isEmpty()){ + man.removeAxiom(data, ax); + } + }System.out.println(data.getLogicalAxiomCount()); Set<OWLOntology> ontologies = new HashSet<OWLOntology>(); ontologies.add(schema); @@ -181,7 +189,8 @@ logger.info("done in " + (System.currentTimeMillis()-startTime) + "ms."); logger.info("Module size: " + module.size()); reasoner = PelletReasonerFactory.getInstance().createNonBufferingReasoner(OntologyUtils.getOntologyFromAxioms(module)); - expGen = new PelletExplanation(reasoner); +// expGen = new PelletExplanation(reasoner); + expGen = new PelletExplanation(schema, false); logger.info("Computing explanations..."); startTime = System.currentTimeMillis(); Set<Set<OWLAxiom>> temp = expGen.getUnsatisfiableExplanations(unsatClass, 10); @@ -231,9 +240,9 @@ } public Set<Set<OWLAxiom>> computeExplanationsDefault(int limit){ - reasoner = PelletReasonerFactory.getInstance().createNonBufferingReasoner(schema); + reasoner = PelletReasonerFactory.getInstance().createNonBufferingReasoner(ontology); reasoner.isConsistent(); - logger.info("Computing inconsistency explanations with only Pellet..."); + logger.info("Computing inconsistency explanations with Pellet only..."); long startTime = System.currentTimeMillis(); PelletExplanation expGen = new PelletExplanation(reasoner); Set<Set<OWLAxiom>> explanations = expGen.getInconsistencyExplanations(limit); @@ -312,7 +321,7 @@ for(OWLObjectProperty prop : extractObjectProperties(AxiomType.FUNCTIONAL_OBJECT_PROPERTY)){ OWLAxiom axiom = factory.getOWLFunctionalObjectPropertyAxiom(prop); - String queryString = "SELECT * WHERE {?s <%s> ?o1. ?s <%s> ?o2. FILTER(?o1 != ?o2)}".replace("%s", prop.toStringID()); + String queryString = "SELECT DISTINCT * WHERE {?s <%s> ?o1. ?s <%s> ?o2. FILTER(?o1 != ?o2)}".replace("%s", prop.toStringID()); Query query = QueryFactory.create(queryString) ; QueryExecution qexec = QueryExecutionFactory.create(query, model) ; try { @@ -427,6 +436,7 @@ for(OWLAxiom ax : ontology.getAxioms(axiomType)){ properties.add(((OWLObjectPropertyCharacteristicAxiom)ax).getProperty().asOWLObjectProperty()); } +// properties.retainAll(data.getObjectPropertiesInSignature()); return properties; } @@ -472,6 +482,11 @@ * @throws Exception */ public static void main(String[] args) throws Exception { + if(args.length != 1){ + System.out.println("Usage: ApproximateDebugging <Schema-Ontology>"); + System.exit(0); + } + Logger.getRootLogger().setLevel(Level.INFO); Logger.getRootLogger().removeAllAppenders(); Logger.getRootLogger().addAppender(new ConsoleAppender(new SimpleLayout())); @@ -487,14 +502,55 @@ Model model = cbdGen.getConciseBoundedDescription(resource, 3); OWLOntology data = convert(model); + InputStream is = new BufferedInputStream(new FileInputStream(args[0])); + CompressorInputStream in = new CompressorStreamFactory().createCompressorInputStream("bzip2", is); + OWLOntologyManager man = OWLManager.createOWLOntologyManager(); - OWLOntology schema = man.loadOntologyFromOntologyDocument(new File("src/main/resources/dbpedia_0.75_no_datapropaxioms.owl")); + OWLOntology schema = man.loadOntologyFromOntologyDocument(in); ApproximateDebugging debug = new ApproximateDebugging(schema, data); + + Set<Set<OWLAxiom>> explanations2 = debug.computeExplanationsDefault(3); + ManchesterSyntaxExplanationRenderer renderer = new ManchesterSyntaxExplanationRenderer(); + PrintWriter out = new PrintWriter( System.out ); + renderer.startRendering( out ); + for(Set<OWLAxiom> exp : explanations2){ + out.flush(); + renderer.render( Collections.singleton(exp) ); + } + renderer.endRendering(); + for(Entry<AxiomType<? extends OWLAxiom>, Integer> entry : getAxiomTypeCount(explanations2).entrySet()){ + System.out.println(entry.getKey() + ": " + entry.getValue()); + } + Set<Set<OWLAxiom>> explanations1 = debug.computeInconsistencyExplanations(); - Set<Set<OWLAxiom>> explanations2 = debug.computeExplanationsDefault(500); - System.out.println(explanations1.size()); - System.out.println(explanations2.size()); + for(Set<OWLAxiom> exp : explanations1){ + System.out.println(exp); + } + + for(Entry<AxiomType<? extends OWLAxiom>, Integer> entry : getAxiomTypeCount(explanations1).entrySet()){ + System.out.println(entry.getKey() + ": " + entry.getValue()); + } +// +// System.out.println(explanations1.size()); +// System.out.println(explanations2.size()); } + + private static Map<AxiomType<? extends OWLAxiom>, Integer> getAxiomTypeCount(Set<Set<OWLAxiom>> explanations){ + Map<AxiomType<? extends OWLAxiom>, Integer> axiomType2CountMap = new HashMap<AxiomType<? extends OWLAxiom>, Integer>(); + + for(Set<OWLAxiom> exp : explanations){ + for(OWLAxiom ax : exp){ + Integer cnt = axiomType2CountMap.get(ax.getAxiomType()); + if(cnt == null){ + cnt = Integer.valueOf(0); + } + cnt = Integer.valueOf(cnt + 1); + axiomType2CountMap.put(ax.getAxiomType(), cnt); + } + } + + return axiomType2CountMap; + } } Modified: trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2012-02-01 11:35:39 UTC (rev 3560) +++ trunk/scripts/src/main/java/org/dllearner/scripts/SPARQLSampleDebugging.java 2012-02-01 11:36:50 UTC (rev 3561) @@ -6,6 +6,7 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; +import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; @@ -29,7 +30,6 @@ import java.util.TreeSet; import java.util.prefs.Preferences; -import org.apache.commons.compress.compressors.CompressorInputStream; import org.apache.commons.compress.compressors.CompressorStreamFactory; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.FileAppender; @@ -54,6 +54,7 @@ import org.semanticweb.owlapi.model.OWLClass; import org.semanticweb.owlapi.model.OWLDataFactory; import org.semanticweb.owlapi.model.OWLDataProperty; +import org.semanticweb.owlapi.model.OWLException; import org.semanticweb.owlapi.model.OWLFunctionalDataPropertyAxiom; import org.semanticweb.owlapi.model.OWLFunctionalObjectPropertyAxiom; import org.semanticweb.owlapi.model.OWLIndividual; @@ -473,16 +474,32 @@ logger.info(exp + "\n"); } Map<AxiomType, Integer> axiomType2CountMap = new HashMap<AxiomType, Integer>(); - for(Set<OWLAxiom> explanation : explanations){ - logger.info(explanation); - for(OWLAxiom axiom : explanation){ - Integer cnt = axiomType2CountMap.get(axiom.getAxiomType()); - if(cnt == null){ - cnt = Integer.valueOf(0); + ManchesterSyntaxExplanationRenderer renderer = new ManchesterSyntaxExplanationRenderer(); + try { + FileWriter out = new FileWriter( "log/justifications.txt" ); + renderer.startRendering(out ); + for(Set<OWLAxiom> explanation : explanations){ + logger.info(explanation); + out.flush(); + try { + renderer.render( Collections.singleton(explanation) ); + } catch (UnsupportedOperationException e) { + e.printStackTrace(); + } catch (OWLException e) { + e.printStackTrace(); } - cnt = Integer.valueOf(cnt + 1); - axiomType2CountMap.put(axiom.getAxiomType(), cnt); + for(OWLAxiom axiom : explanation){ + Integer cnt = axiomType2CountMap.get(axiom.getAxiomType()); + if(cnt == null){ + cnt = Integer.valueOf(0); + } + cnt = Integer.valueOf(cnt + 1); + axiomType2CountMap.put(axiom.getAxiomType(), cnt); + } } + renderer.endRendering(); + } catch (IOException e) { + e.printStackTrace(); } logger.info("Axiom type count:"); for(Entry<AxiomType, Integer> entry : axiomType2CountMap.entrySet()){ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-01-30 09:55:31
|
Revision: 3893 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3893&view=rev Author: lorenz_b Date: 2013-01-30 09:55:24 +0000 (Wed, 30 Jan 2013) Log Message: ----------- Continued matching. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java Added Paths: ----------- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java 2013-01-25 13:04:28 UTC (rev 3892) +++ trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java 2013-01-30 09:55:24 UTC (rev 3893) @@ -1,6 +1,5 @@ package org.dllearner.scripts; -import java.net.URL; import java.text.DecimalFormat; import java.util.HashMap; import java.util.List; @@ -10,10 +9,7 @@ import java.util.SortedSet; import java.util.TreeSet; -import org.apache.log4j.ConsoleAppender; -import org.apache.log4j.Level; import org.apache.log4j.Logger; -import org.apache.log4j.PatternLayout; import org.dllearner.algorithms.celoe.CELOE; import org.dllearner.core.AbstractLearningProblem; import org.dllearner.core.AbstractReasonerComponent; @@ -24,7 +20,6 @@ import org.dllearner.core.owl.NamedClass; import org.dllearner.core.owl.ObjectProperty; import org.dllearner.kb.SparqlEndpointKS; -import org.dllearner.kb.extraction.ExtractionAlgorithm; import org.dllearner.kb.sparql.ExtractionDBCache; import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; @@ -35,14 +30,11 @@ import org.dllearner.reasoning.FastInstanceChecker; import org.dllearner.reasoning.SPARQLReasoner; import org.dllearner.utilities.datastructures.Datastructures; +import org.dllearner.utilities.datastructures.SetManipulation; import org.dllearner.utilities.datastructures.SortedSetTuple; import org.dllearner.utilities.examples.AutomaticNegativeExampleFinderSPARQL2; -import org.dllearner.utilities.owl.DLLearnerDescriptionConvertVisitor; import org.dllearner.utilities.owl.OWLAPIDescriptionConvertVisitor; -import org.semanticweb.owlapi.io.ToStringRenderer; -import uk.ac.manchester.cs.owl.owlapi.mansyntaxrenderer.ManchesterOWLSyntaxOWLObjectRendererImpl; - import com.hp.hpl.jena.query.Query; import com.hp.hpl.jena.query.QueryFactory; import com.hp.hpl.jena.query.QuerySolution; @@ -132,9 +124,10 @@ logger.info(nc); // get all via owl:sameAs related individuals SortedSet<Individual> individuals = getRelatedIndividualsNamespaceAware(source, nc, target.getNamespace()); - logger.info(individuals); + logger.info(individuals.size()); //learn concept in KB2 based on the examples if(individuals.size() >= 3){ + individuals = SetManipulation.fuzzyShrinkInd(individuals, 10); List<? extends EvaluatedDescription> learnedClassExpressions = learnClassExpression(target, individuals); mapping.put(nc, learnedClassExpressions); } @@ -260,6 +253,9 @@ String uri = object.asResource().getURI(); //workaround for World Factbook - should be removed later uri = uri.replace("http://www4.wiwiss.fu-berlin.de/factbook/resource/", "http://wifo5-03.informatik.uni-mannheim.de/factbook/resource/"); + //workaround for OpenCyc - should be removed later + uri = uri.replace("http://sw.cyc.com", "http://sw.opencyc.org"); + relatedIndividuals.add(new Individual(uri)); } } @@ -329,40 +325,5 @@ return cache; } - - } - - /** - * @param args - */ - public static void main(String[] args) throws Exception{ - //render output - ToStringRenderer.getInstance().setRenderer(new ManchesterOWLSyntaxOWLObjectRendererImpl()); - //set logging properties - Logger.getLogger(SparqlKnowledgeSource.class).setLevel(Level.WARN); - Logger.getLogger(ExtractionAlgorithm.class).setLevel(Level.WARN); - Logger.getLogger(org.dllearner.kb.extraction.Manager.class).setLevel(Level.WARN); - Logger.getRootLogger().removeAllAppenders(); - Logger.getRootLogger().addAppender(new ConsoleAppender(new PatternLayout("%m%n"))); - // KB2 - SparqlEndpoint endpoint1 = SparqlEndpoint.getEndpointDBpedia(); - ExtractionDBCache cache1 = new ExtractionDBCache("cache"); - String namespace1 = "http://dbpedia.org/resource/"; - KnowledgeBase kb1 = new KnowledgeBase(endpoint1, cache1, namespace1); - // KB2 - SparqlEndpoint endpoint2 = new SparqlEndpoint(new URL("http://wifo5-03.informatik.uni-mannheim.de/factbook/sparql")); - ExtractionDBCache cache2 = new ExtractionDBCache("cache"); - //TODO problem with World Factbook is that old FU Berlin server is useless because of bugs and current version - //is provide by University Of Mannheim now with another namespace http://wifo5-03.informatik.uni-mannheim.de/factbook/resource/ - //but the DBpedia links are still to the old D2R server instance - //workaround: replace namespace before learning - String namespace2 = "http://www4.wiwiss.fu-berlin.de/factbook/resource/"; - KnowledgeBase kb2 = new KnowledgeBase(endpoint2, cache2, namespace2); - - OntologyMatching matcher = new OntologyMatching(kb1, kb2); - matcher.start(); - - } - } Added: trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java (rev 0) +++ trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java 2013-01-30 09:55:24 UTC (rev 3893) @@ -0,0 +1,85 @@ +package org.dllearner.scripts; + +import java.net.URL; + +import org.apache.log4j.ConsoleAppender; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.apache.log4j.PatternLayout; +import org.dllearner.kb.extraction.ExtractionAlgorithm; +import org.dllearner.kb.sparql.ExtractionDBCache; +import org.dllearner.kb.sparql.SparqlEndpoint; +import org.dllearner.kb.sparql.SparqlKnowledgeSource; +import org.dllearner.scripts.OntologyMatching.KnowledgeBase; +import org.junit.Before; +import org.junit.Test; +import org.semanticweb.owlapi.io.ToStringRenderer; + +import uk.ac.manchester.cs.owl.owlapi.mansyntaxrenderer.ManchesterOWLSyntaxOWLObjectRendererImpl; + +public class OntologyMatchingTest { + + private KnowledgeBase dbpedia; + private KnowledgeBase worldFactBook; + private KnowledgeBase openCyc; + private KnowledgeBase linkedGeoData; + + @Before + public void setUp() throws Exception { + // render output + ToStringRenderer.getInstance().setRenderer(new ManchesterOWLSyntaxOWLObjectRendererImpl()); + // set logging properties + Logger.getLogger(SparqlKnowledgeSource.class).setLevel(Level.WARN); + Logger.getLogger(ExtractionAlgorithm.class).setLevel(Level.WARN); + Logger.getLogger(org.dllearner.kb.extraction.Manager.class).setLevel(Level.WARN); + Logger.getRootLogger().removeAllAppenders(); + Logger.getRootLogger().addAppender(new ConsoleAppender(new PatternLayout("%m%n"))); + + //DBpedia + SparqlEndpoint endpoint = SparqlEndpoint.getEndpointDBpedia(); + ExtractionDBCache cache = new ExtractionDBCache("cache"); + String namespace = "http://dbpedia.org/resource/"; + dbpedia = new KnowledgeBase(endpoint, cache, namespace); + + //World Factbook + //TODO problem with World Factbook is that old FU Berlin server is useless because of bugs and current version + //is provide by University Of Mannheim now with another namespace http://wifo5-03.informatik.uni-mannheim.de/factbook/resource/ + //but the DBpedia links are still to the old D2R server instance + //workaround: replace namespace before learning + endpoint = new SparqlEndpoint(new URL("http://wifo5-03.informatik.uni-mannheim.de/factbook/sparql")); + cache = new ExtractionDBCache("cache"); + namespace = "http://www4.wiwiss.fu-berlin.de/factbook/resource/"; + worldFactBook = new KnowledgeBase(endpoint, cache, namespace); + + //local OpenCyc + endpoint = new SparqlEndpoint(new URL("http://localhost:8890/sparql")); + cache = new ExtractionDBCache("cache"); + namespace = "http://sw.cyc.com"; + openCyc = new KnowledgeBase(endpoint, cache, namespace); + + //LinkedGeoData + endpoint = new SparqlEndpoint(new URL("http://linkedgeodata.org/sparql")); + cache = new ExtractionDBCache("cache"); + namespace = "http://linkedgeodata.org/triplify/"; + linkedGeoData = new KnowledgeBase(endpoint, cache, namespace); + } + + @Test + public void testDBpediaWorldFactbook() { + OntologyMatching matcher = new OntologyMatching(dbpedia, worldFactBook); + matcher.start(); + } + + @Test + public void testDBpediaOpenCyc() { + OntologyMatching matcher = new OntologyMatching(dbpedia, openCyc); + matcher.start(); + } + + @Test + public void testDBpediaLinkedGeoData() { + OntologyMatching matcher = new OntologyMatching(dbpedia, linkedGeoData); + matcher.start(); + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-02-06 18:01:57
|
Revision: 3895 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3895&view=rev Author: lorenz_b Date: 2013-02-06 18:01:42 +0000 (Wed, 06 Feb 2013) Log Message: ----------- Continued matching component. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java 2013-02-06 17:59:21 UTC (rev 3894) +++ trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java 2013-02-06 18:01:42 UTC (rev 3895) @@ -1,7 +1,15 @@ package org.dllearner.scripts; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.text.DecimalFormat; +import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -15,11 +23,15 @@ import org.dllearner.core.AbstractReasonerComponent; import org.dllearner.core.ComponentInitException; import org.dllearner.core.EvaluatedDescription; +import org.dllearner.core.KnowledgeSource; import org.dllearner.core.owl.Description; import org.dllearner.core.owl.Individual; import org.dllearner.core.owl.NamedClass; import org.dllearner.core.owl.ObjectProperty; +import org.dllearner.kb.OWLAPIOntology; import org.dllearner.kb.SparqlEndpointKS; +import org.dllearner.kb.sparql.ConciseBoundedDescriptionGenerator; +import org.dllearner.kb.sparql.ConciseBoundedDescriptionGeneratorImpl; import org.dllearner.kb.sparql.ExtractionDBCache; import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; @@ -29,18 +41,33 @@ import org.dllearner.learningproblems.PosOnlyLP; import org.dllearner.reasoning.FastInstanceChecker; import org.dllearner.reasoning.SPARQLReasoner; +import org.dllearner.utilities.LabelShortFormProvider; import org.dllearner.utilities.datastructures.Datastructures; import org.dllearner.utilities.datastructures.SetManipulation; import org.dllearner.utilities.datastructures.SortedSetTuple; import org.dllearner.utilities.examples.AutomaticNegativeExampleFinderSPARQL2; import org.dllearner.utilities.owl.OWLAPIDescriptionConvertVisitor; +import org.semanticweb.owlapi.apibinding.OWLManager; +import org.semanticweb.owlapi.io.UnparsableOntologyException; +import org.semanticweb.owlapi.model.OWLOntology; +import org.semanticweb.owlapi.model.OWLOntologyCreationException; +import org.semanticweb.owlapi.model.OWLOntologyManager; +import uk.ac.manchester.cs.owl.owlapi.mansyntaxrenderer.ManchesterOWLSyntaxOWLObjectRendererImpl; + +import com.google.common.collect.Sets; +import com.hp.hpl.jena.ontology.OntModel; +import com.hp.hpl.jena.query.ParameterizedSparqlString; import com.hp.hpl.jena.query.Query; +import com.hp.hpl.jena.query.QueryExecutionFactory; import com.hp.hpl.jena.query.QueryFactory; import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.query.Syntax; +import com.hp.hpl.jena.rdf.model.Model; +import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.rdf.model.RDFNode; +import com.hp.hpl.jena.rdf.model.Statement; import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; import com.hp.hpl.jena.vocabulary.OWL; import com.jamonapi.Monitor; @@ -59,6 +86,22 @@ //KB2 private KnowledgeBase kb2; + private Map<Description, List<? extends EvaluatedDescription>> mappingKB1KB2; + private Map<Description, List<? extends EvaluatedDescription>> mappingKB2KB1; + + private boolean posNegLearning = true; + + /** + * The maximum number of positive examples, used for the SPARQL extraction and learning algorithm + */ + private int maxNrOfPositiveExamples = 20; + /** + * The maximum number of negative examples, used for the SPARQL extraction and learning algorithm + */ + private int maxNrOfNegativeExamples = 20; + + private NamedClass currentClass; + public OntologyMatching(KnowledgeBase kb1, KnowledgeBase kb2) { this.kb1 = kb1; this.kb2 = kb2; @@ -71,12 +114,28 @@ } public void start(){ - Map<Description, List<? extends EvaluatedDescription>> mapping1 = computeMapping(kb1, kb2); - printMappingPretty(mapping1); - Map<Description, List<? extends EvaluatedDescription>> mapping2 = computeMapping(kb2, kb1); - printMappingPretty(mapping2); + mappingKB1KB2 = computeAlignment(kb1, kb2); + printMappingPretty(mappingKB1KB2); + mappingKB2KB1 = computeAlignment(kb2, kb1); + printMappingPretty(mappingKB2KB1); } + public Map<Description, List<? extends EvaluatedDescription>> getMappingKB1KB2() { + return mappingKB1KB2; + } + + public Map<Description, List<? extends EvaluatedDescription>> getMappingKB2KB1() { + return mappingKB2KB1; + } + + public void setMaxNrOfPositiveExamples(int maxNrOfPositiveExamples) { + this.maxNrOfPositiveExamples = maxNrOfPositiveExamples; + } + + public void setMaxNrOfNegativeExamples(int maxNrOfNegativeExamples) { + this.maxNrOfNegativeExamples = maxNrOfNegativeExamples; + } + private void printMapping(Map<Description, List<? extends EvaluatedDescription>> mapping){ logger.info("Source Class -> Target Class Expression"); for (Entry<Description, List<? extends org.dllearner.core.EvaluatedDescription>> entry : mapping.entrySet()) { @@ -106,78 +165,139 @@ } List<? extends org.dllearner.core.EvaluatedDescription> value = entry.getValue(); logger.info(OWLAPIDescriptionConvertVisitor.getOWLClassExpression(key)); - for (EvaluatedDescription evaluatedDescription : value) { - logger.info(indention + "\t->\t" + - OWLAPIDescriptionConvertVisitor.getOWLClassExpression(evaluatedDescription.getDescription()) + - "(" + dfPercent.format(evaluatedDescription.getAccuracy()) + ")"); + if(value == null){ + logger.info(indention + "\t->\t ERROR"); + } else { + for (EvaluatedDescription evaluatedDescription : value) { + logger.info(indention + "\t->\t" + + OWLAPIDescriptionConvertVisitor.getOWLClassExpression(evaluatedDescription.getDescription()) + + "(" + dfPercent.format(evaluatedDescription.getAccuracy()) + ")"); + } } + } } - private Map<Description, List<? extends EvaluatedDescription>> computeMapping(KnowledgeBase source, KnowledgeBase target) { + private Map<Description, List<? extends EvaluatedDescription>> computeAlignment(KnowledgeBase source, KnowledgeBase target) { Map<Description, List<? extends EvaluatedDescription>> mapping = new HashMap<Description, List<? extends EvaluatedDescription>>(); // get all classes in SOURCE Set<NamedClass> sourceClasses = getClasses(source); // for each class of KB1 for (NamedClass nc : sourceClasses) { - logger.info(nc); - // get all via owl:sameAs related individuals - SortedSet<Individual> individuals = getRelatedIndividualsNamespaceAware(source, nc, target.getNamespace()); - logger.info(individuals.size()); - //learn concept in KB2 based on the examples - if(individuals.size() >= 3){ - individuals = SetManipulation.fuzzyShrinkInd(individuals, 10); - List<? extends EvaluatedDescription> learnedClassExpressions = learnClassExpression(target, individuals); - mapping.put(nc, learnedClassExpressions); + try { + logger.info(nc); + List<? extends EvaluatedDescription> learnedClassExpressions = computeMapping(nc, source, target); + if(learnedClassExpressions != null){ + mapping.put(nc, learnedClassExpressions); + //break; + } + } catch (Exception e) { + logger.error("Failed for " + nc.getName(), e); } } return mapping; } - private List<? extends EvaluatedDescription> learnClassExpression(KnowledgeBase kb, SortedSet<Individual> posExamples){ - return learnClassExpression(kb, posExamples, false); + public List<? extends EvaluatedDescription> computeMapping(NamedClass sourceClass, KnowledgeBase source, KnowledgeBase target){ + currentClass = sourceClass; + List<? extends EvaluatedDescription> learnedClassExpressions = null; + // get all via owl:sameAs related individuals + SortedSet<Individual> relatedIndividuals = getRelatedIndividualsNamespaceAware(source, sourceClass, target.getNamespace()); + logger.info("#Resources in target KB: " + relatedIndividuals.size()); + //learn concept in KB2 based on the examples + if(relatedIndividuals.size() >= 3){ + learnedClassExpressions = learnClassExpressions(target, relatedIndividuals, posNegLearning); + } + return learnedClassExpressions; } - private List<? extends EvaluatedDescription> learnClassExpression(KnowledgeBase kb, SortedSet<Individual> positiveExamples, boolean posNeg){ + private List<? extends EvaluatedDescription> learnClassExpressions(KnowledgeBase kb, SortedSet<Individual> posExamples){ + return learnClassExpressions(kb, posExamples, false); + } + + private List<? extends EvaluatedDescription> learnClassExpressions(KnowledgeBase kb, SortedSet<Individual> positiveExamples, boolean posNeg){ + Model fullFragment = null; try { + + //get a sample of the positive examples + SortedSet<Individual> positiveExamplesSample = SetManipulation.stableShrinkInd(positiveExamples, maxNrOfPositiveExamples); + + //starting from the positive examples, we first extract the fragment for them + logger.info("Extracting fragment for positive examples..."); + Model positiveFragment = getFragment(positiveExamplesSample, kb); + logger.info("...done."); + + //based on the fragment we try to find some good negative examples SortedSet<Individual> negativeExamples = new TreeSet<Individual>(); if(posNeg){ - //find negative examples mon.start(); + //find the classes the positive examples are asserted to + Set<NamedClass> classes = new HashSet<NamedClass>(); + ParameterizedSparqlString template = new ParameterizedSparqlString("SELECT ?type WHERE {?s a ?type.}"); + for(Individual pos : positiveExamples){ + template.clearParams(); + template.setIri("s", pos.getName()); + ResultSet rs = QueryExecutionFactory.create(template.asQuery(), positiveFragment).execSelect(); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + if(qs.get("type").isURIResource()){ + classes.add(new NamedClass(qs.getResource("type").getURI())); + } + } + } + System.out.println(classes); + + //get the negative examples + for(NamedClass nc : classes){ + Set<String> parallelClasses = kb.getSparqlHelper().getParallelClasses(nc.getName(), 5); + for(String parallelClass : parallelClasses){ + negativeExamples.addAll(kb.getReasoner().getIndividuals(new NamedClass(parallelClass), 5)); + negativeExamples.removeAll(positiveExamples); + } + } + AutomaticNegativeExampleFinderSPARQL2 finder = new AutomaticNegativeExampleFinderSPARQL2(kb.getEndpoint()); //TODO find negative examples mon.stop(); logger.info("Found " + negativeExamples.size() + " negative examples in " + mon.getLastValue() + "ms."); } - SortedSetTuple<Individual> examples = new SortedSetTuple<Individual>(positiveExamples, negativeExamples); + //get a sample of the positive examples + SortedSet<Individual> negativeExamplesSample = SetManipulation.stableShrinkInd(negativeExamples, maxNrOfNegativeExamples); - SparqlKnowledgeSource ks = new SparqlKnowledgeSource(); - ks.setInstances(Datastructures.individualSetToStringSet(examples.getCompleteSet())); - ks.setUrl(kb.getEndpoint().getURL()); - ks.setDefaultGraphURIs(new TreeSet<String>(kb.getEndpoint().getDefaultGraphURIs())); - ks.setUseLits(false); - ks.setUseCacheDatabase(true); - ks.setCacheDir("cache"); - ks.setRecursionDepth(2); - ks.setCloseAfterRecursion(true); - ks.setDissolveBlankNodes(false); - ks.setSaveExtractedFragment(false); - ks.init(); + logger.info("#Positive examples: " + positiveExamplesSample.size()); + logger.info("#Negative examples: " + negativeExamplesSample.size()); + //create fragment for negative examples + logger.info("Extracting fragment for negative examples..."); + Model negativeFragment = getFragment(negativeExamplesSample, kb); + logger.info("...done."); + + //create fragment consisting of both + fullFragment = ModelFactory.createDefaultModel(); + fullFragment.add(positiveFragment); + fullFragment.add(negativeFragment); + + //here is the most difficult task, i.e. find a 'good' fragment of the KB on which we can learn + KnowledgeSource ks = convert(fullFragment); + + //initialize the reasoner AbstractReasonerComponent rc = new FastInstanceChecker(ks); rc.init(); + //initialize the learning problem AbstractLearningProblem lp; if(posNeg){ - lp = new PosNegLPStandard(rc, positiveExamples, negativeExamples); + lp = new PosNegLPStandard(rc, positiveExamplesSample, negativeExamplesSample); } else { - lp = new PosOnlyLP(rc, positiveExamples); - + lp = new PosOnlyLP(rc, positiveExamplesSample); } lp.init(); + //apply the learning algorithm + logger.info("Running learning algorithm..."); CELOE la = new CELOE(lp, rc); la.setMaxExecutionTimeInSeconds(10); la.setNoisePercentage(25); @@ -189,10 +309,104 @@ return la.getCurrentlyBestEvaluatedDescriptions(10); } catch (ComponentInitException e) { e.printStackTrace(); + try { + new File("errors").mkdir(); + fullFragment.write(new FileOutputStream("errors/" + prettyPrint(currentClass) + ".ttl"), "TURTLE", null); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } } return null; } + private KnowledgeSource convert(Model model){ + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + model.write(baos, "TURTLE", null); + OWLOntologyManager man = OWLManager.createOWLOntologyManager(); + OWLOntology ontology = man.loadOntologyFromOntologyDocument(new ByteArrayInputStream(baos.toByteArray())); + return new OWLAPIOntology(ontology); + } catch (OWLOntologyCreationException e) { + e.printStackTrace(); + try { + model.write(new FileOutputStream(prettyPrint(currentClass) + "_conversion_error.ttl"), "TURTLE", null); + } catch (FileNotFoundException e1) { + e.printStackTrace(); + } + } + return null; + } + + /** + * Computes a fragment containing hopefully useful information about the resources. + * @param ind + */ + private KnowledgeSource getFragmentLegacy(SortedSet<Individual> positiveExamples, SortedSet<Individual> negativeExamples, SparqlEndpoint endpoint){ + SortedSetTuple<Individual> examples = new SortedSetTuple<Individual>(positiveExamples, negativeExamples); + SparqlKnowledgeSource ks = new SparqlKnowledgeSource(); + ks.setInstances(Datastructures.individualSetToStringSet(examples.getCompleteSet())); + ks.setUrl(endpoint.getURL()); + ks.setDefaultGraphURIs(new TreeSet<String>(endpoint.getDefaultGraphURIs())); + ks.setUseLits(false); + ks.setUseCacheDatabase(true); + ks.setCacheDir("cache"); + ks.setRecursionDepth(2); + ks.setCloseAfterRecursion(true); + ks.setDissolveBlankNodes(false); + ks.setSaveExtractedFragment(false); + ks.init(); + return ks; + } + + /** + * Computes a fragment containing hopefully useful information about the resources. + * @param ind + */ + private Model getFragment(SortedSet<Individual> positiveExamples, SortedSet<Individual> negativeExamples, KnowledgeBase kb){ + OntModel fullFragment = ModelFactory.createOntologyModel(); + int i = 1; + int size = Sets.union(positiveExamples, negativeExamples).size(); + for(Individual ind : Sets.union(positiveExamples, negativeExamples)){ + logger.info(i++ + "/" + size); + fullFragment.add(getFragment(ind, kb)); + } + //filter out triples with String literals, as there often occur are some syntax errors and they are not relevant for learning + List<Statement> statementsToRemove = new ArrayList<Statement>(); + for(Iterator<Statement> iter = fullFragment.listStatements().toList().iterator(); iter.hasNext();){ + Statement st = iter.next(); + RDFNode object = st.getObject(); + if(object.isLiteral()){ + statementsToRemove.add(st); +// Literal lit = object.asLiteral(); +// if(lit.getDatatype() == null || lit.getDatatype().equals(XSD.STRING)){ +// iter.remove(); +// } + } + } + fullFragment.remove(statementsToRemove); + return fullFragment; + } + + /** + * Computes a fragment containing hopefully useful information about the resources. + * @param ind + */ + private Model getFragment(SortedSet<Individual> examples, KnowledgeBase kb){ + return getFragment(examples, new TreeSet<Individual>(), kb); + } + + /** + * Computes a fragment containing hopefully useful information about the resource. + * @param ind + */ + private Model getFragment(Individual ind, KnowledgeBase kb){ + logger.debug("Loading fragment for " + ind.getName()); + ConciseBoundedDescriptionGenerator cbdGen = new ConciseBoundedDescriptionGeneratorImpl(kb.getEndpoint(), kb.getCache()); + Model cbd = cbdGen.getConciseBoundedDescription(ind.getName(), 2); + logger.debug("Got " + cbd.size() + " triples."); + return cbd; + } + private Set<NamedClass> getClasses(KnowledgeBase kb){ Set<NamedClass> classes = kb.getSparqlHelper().getAllClasses(); //fallback: check for ?s a ?type where ?type is not asserted to owl:Class @@ -282,6 +496,84 @@ return rs; } + private String prettyPrint(Description desc){ + return OWLAPIDescriptionConvertVisitor.getOWLClassExpression(desc).toString(); + } + + public static String toHTML(Map<Description, List<? extends EvaluatedDescription>> mapping){ + StringBuilder sb = new StringBuilder(); + DecimalFormat dfPercent = new DecimalFormat("0.00%"); + sb.append("<html>\n"); + sb.append("<table>\n"); + sb.append("<thead><tr><th>Source Class</th><th>Target Class Expressions</th></tr></thead>\n"); + sb.append("<tbody>\n"); + + + for (Entry<Description, List<? extends org.dllearner.core.EvaluatedDescription>> entry : mapping.entrySet()) { + Description key = entry.getKey(); + List<? extends org.dllearner.core.EvaluatedDescription> value = entry.getValue(); + if(value == null){ + sb.append("<tr><th>" + OWLAPIDescriptionConvertVisitor.getOWLClassExpression(key) + "</th>\n"); + sb.append("<tr><td>ERROR</td></tr>\n"); + } else { + sb.append("<tr><th rowspan=\"" + value.size()+1 + "\">" + OWLAPIDescriptionConvertVisitor.getOWLClassExpression(key) + "</th>\n"); + for (EvaluatedDescription evaluatedDescription : value) { + sb.append("<tr><td>" + + OWLAPIDescriptionConvertVisitor.getOWLClassExpression(evaluatedDescription.getDescription()) + "(" + dfPercent.format(evaluatedDescription.getAccuracy()) + ")" + + "</td></tr>\n"); + } + } + } + + sb.append("</tbody>\n"); + sb.append("</table>\n"); + sb.append("</html>\n"); + + return sb.toString(); + } + + public static String toHTMLWithLabels(Map<Description, List<? extends EvaluatedDescription>> mapping, KnowledgeBase source, KnowledgeBase target){ + ManchesterOWLSyntaxOWLObjectRendererImpl sourceRenderer = new ManchesterOWLSyntaxOWLObjectRendererImpl(); + sourceRenderer.setShortFormProvider(new LabelShortFormProvider(source.getEndpoint(), source.getCache())); + ManchesterOWLSyntaxOWLObjectRendererImpl targetRenderer = new ManchesterOWLSyntaxOWLObjectRendererImpl(); + targetRenderer.setShortFormProvider(new LabelShortFormProvider(target.getEndpoint(), target.getCache())); + + StringBuilder sb = new StringBuilder(); + DecimalFormat dfPercent = new DecimalFormat("0.00%"); + sb.append("<html>\n"); + sb.append("<table>\n"); + sb.append("<thead><tr><th>Source Class</th><th>Target Class Expressions</th><th>Accuracy</th></tr></thead>\n"); + sb.append("<tbody>\n"); + + + for (Entry<Description, List<? extends org.dllearner.core.EvaluatedDescription>> entry : mapping.entrySet()) { + Description key = entry.getKey(); + String renderedKey = sourceRenderer.render(OWLAPIDescriptionConvertVisitor.getOWLClassExpression(key)); + List<? extends org.dllearner.core.EvaluatedDescription> value = entry.getValue(); + if(value == null){ + sb.append("<tr><th>" + renderedKey + "</th>\n"); + sb.append("<tr><td>ERROR</td><td></td></tr>\n"); + } else { + sb.append("<tr><th rowspan=\"" + (value.size()+1) + "\">" + renderedKey + "</th>\n"); + for (EvaluatedDescription evaluatedDescription : value) { + sb.append("<tr>"); + String renderedDesc = targetRenderer.render(OWLAPIDescriptionConvertVisitor.getOWLClassExpression(evaluatedDescription.getDescription())); + sb.append("<td>" + renderedDesc + "</td>"); + sb.append("<td>" + dfPercent.format(evaluatedDescription.getAccuracy()) + "</td>"); + sb.append("</tr>\n"); + } + } + } + + sb.append("</tbody>\n"); + sb.append("</table>\n"); + sb.append("</html>\n"); + + return sb.toString(); + } + + + public static class KnowledgeBase{ private SparqlEndpoint endpoint; private SPARQLReasoner reasoner; @@ -294,7 +586,7 @@ this.namespace = namespace; this.cache = cache; - this.reasoner = new SPARQLReasoner(new SparqlEndpointKS(endpoint)); + this.reasoner = new SPARQLReasoner(new SparqlEndpointKS(endpoint), cache); this.sparqlHelper = new SPARQLTasks(endpoint); } Modified: trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java 2013-02-06 17:59:21 UTC (rev 3894) +++ trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java 2013-02-06 18:01:42 UTC (rev 3895) @@ -1,11 +1,20 @@ package org.dllearner.scripts; +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; import java.net.URL; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; +import org.dllearner.core.EvaluatedDescription; +import org.dllearner.core.owl.Description; +import org.dllearner.core.owl.NamedClass; import org.dllearner.kb.extraction.ExtractionAlgorithm; import org.dllearner.kb.sparql.ExtractionDBCache; import org.dllearner.kb.sparql.SparqlEndpoint; @@ -34,12 +43,13 @@ Logger.getLogger(org.dllearner.kb.extraction.Manager.class).setLevel(Level.WARN); Logger.getRootLogger().removeAllAppenders(); Logger.getRootLogger().addAppender(new ConsoleAppender(new PatternLayout("%m%n"))); +// Logger.getRootLogger().setLevel(Level.DEBUG); //DBpedia SparqlEndpoint endpoint = SparqlEndpoint.getEndpointDBpedia(); ExtractionDBCache cache = new ExtractionDBCache("cache"); String namespace = "http://dbpedia.org/resource/"; - dbpedia = new KnowledgeBase(endpoint, cache, namespace); + dbpedia = new KnowledgeBase(endpoint, null, namespace); //World Factbook //TODO problem with World Factbook is that old FU Berlin server is useless because of bugs and current version @@ -55,31 +65,83 @@ endpoint = new SparqlEndpoint(new URL("http://localhost:8890/sparql")); cache = new ExtractionDBCache("cache"); namespace = "http://sw.cyc.com"; - openCyc = new KnowledgeBase(endpoint, cache, namespace); + openCyc = new KnowledgeBase(endpoint, null, namespace); //LinkedGeoData endpoint = new SparqlEndpoint(new URL("http://linkedgeodata.org/sparql")); cache = new ExtractionDBCache("cache"); namespace = "http://linkedgeodata.org/triplify/"; - linkedGeoData = new KnowledgeBase(endpoint, cache, namespace); + linkedGeoData = new KnowledgeBase(endpoint, null, namespace); } @Test public void testDBpediaWorldFactbook() { OntologyMatching matcher = new OntologyMatching(dbpedia, worldFactBook); matcher.start(); + save(matcher.getMappingKB1KB2(), "dbpedia_wfb.html"); + save(matcher.getMappingKB2KB1(), "wfb_dbpedia.html"); } @Test public void testDBpediaOpenCyc() { OntologyMatching matcher = new OntologyMatching(dbpedia, openCyc); matcher.start(); + save("dbpedia_opencyc.html", matcher.getMappingKB1KB2(), dbpedia, openCyc); + save("opencyc_dbpedia.html", matcher.getMappingKB2KB1(), openCyc, dbpedia); } @Test public void testDBpediaLinkedGeoData() { OntologyMatching matcher = new OntologyMatching(dbpedia, linkedGeoData); matcher.start(); + save("dbpedia_lgd.html", matcher.getMappingKB1KB2(), dbpedia, linkedGeoData ); + save("lgd_dbpedia.html", matcher.getMappingKB2KB1(), linkedGeoData, dbpedia); } + + @Test + public void testSingleClass() { + OntologyMatching matcher = new OntologyMatching(openCyc, dbpedia); + NamedClass nc = new NamedClass("http://sw.opencyc.org/concept/Mx4r4fYeXvbPQdiKtoNafhmOew"); + List<? extends EvaluatedDescription> mapping = matcher.computeMapping(nc, openCyc, dbpedia); + Map<Description, List<? extends EvaluatedDescription>> alignment = new HashMap<Description, List<? extends EvaluatedDescription>>(); + alignment.put(nc, mapping); + System.out.println(OntologyMatching.toHTMLWithLabels(alignment, openCyc, dbpedia)); + } + + private void save(String filename, Map<Description, List<? extends EvaluatedDescription>> mapping, KnowledgeBase source, KnowledgeBase target){ + BufferedWriter out = null; + try { + out = new BufferedWriter(new FileWriter(filename)); + out.write(OntologyMatching.toHTMLWithLabels(mapping, source, target)); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (out != null) { + try { + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + private void save(Map<Description, List<? extends EvaluatedDescription>> mapping, String filename){ + BufferedWriter out = null; + try { + out = new BufferedWriter(new FileWriter(filename)); + out.write(OntologyMatching.toHTML(mapping)); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (out != null) { + try { + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |