From: <lor...@us...> - 2014-02-18 09:50:54
|
Revision: 4231 http://sourceforge.net/p/dl-learner/code/4231 Author: lorenz_b Date: 2014-02-18 09:50:49 +0000 (Tue, 18 Feb 2014) Log Message: ----------- Small fix in eval. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/RelevanceMapGenerator.java trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/RelevanceUtils.java trunk/components-core/src/main/java/org/dllearner/utilities/examples/AutomaticNegativeExampleFinderSPARQL2.java trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIDescriptionConvertVisitor.java trunk/components-core/src/test/java/org/dllearner/algorithms/isle/DBpediaExperiment.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/RelevanceMapGenerator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/RelevanceMapGenerator.java 2014-02-17 23:35:23 UTC (rev 4230) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/index/RelevanceMapGenerator.java 2014-02-18 09:50:49 UTC (rev 4231) @@ -38,7 +38,7 @@ private static final Logger logger = Logger.getLogger(RelevanceMapGenerator.class.getName()); public static String cacheDirectory = "cache/relevance"; - public static Map<Entity, Double> generateRelevanceMap(NamedClass cls, OWLOntology ontology, RelevanceMetric relevanceMetric, boolean cached){ + public static synchronized Map<Entity, Double> generateRelevanceMap(NamedClass cls, OWLOntology ontology, RelevanceMetric relevanceMetric, boolean cached){ logger.info("Relevance Metric: " + relevanceMetric.getClass().getSimpleName()); Map<Entity, Double> relevanceMap = null; File folder = new File(cacheDirectory); Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/RelevanceUtils.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/RelevanceUtils.java 2014-02-17 23:35:23 UTC (rev 4230) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/isle/metrics/RelevanceUtils.java 2014-02-18 09:50:49 UTC (rev 4231) @@ -4,6 +4,7 @@ package org.dllearner.algorithms.isle.metrics; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -36,9 +37,9 @@ * @param metric * @return */ - public static Map<Entity, Double> getRelevantEntities(final Entity entity, Set<Entity> otherEntities, final RelevanceMetric metric){ + public static synchronized Map<Entity, Double> getRelevantEntities(final Entity entity, Set<Entity> otherEntities, final RelevanceMetric metric){ logger.info("Get relevant entities for " + entity); - final Map<Entity, Double> relevantEntities = new HashMap<Entity, Double>(); + final Map<Entity, Double> relevantEntities = Collections.synchronizedMap(new HashMap<Entity, Double>()); ExecutorService executor = Executors.newFixedThreadPool(maxNrOfThreads); @@ -46,10 +47,14 @@ executor.submit(new Runnable() { @Override public void run() { -// double relevance = metric.getNormalizedRelevance(entity, otherEntity); - double relevance = metric.getRelevance(entity, otherEntity); -// logger.info(otherEntity + ":" + relevance); - relevantEntities.put(otherEntity, relevance); + try { +// double relevance = metric.getNormalizedRelevance(entity, otherEntity); + double relevance = metric.getRelevance(entity, otherEntity); +// logger.info(otherEntity + ":" + relevance); + relevantEntities.put(otherEntity, relevance); + } catch (Exception e) { + e.printStackTrace(); + } } }); } Modified: trunk/components-core/src/main/java/org/dllearner/utilities/examples/AutomaticNegativeExampleFinderSPARQL2.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/examples/AutomaticNegativeExampleFinderSPARQL2.java 2014-02-17 23:35:23 UTC (rev 4230) +++ trunk/components-core/src/main/java/org/dllearner/utilities/examples/AutomaticNegativeExampleFinderSPARQL2.java 2014-02-18 09:50:49 UTC (rev 4231) @@ -212,7 +212,7 @@ logger.info("Negative examples(" + superClassNegativeExamples.size() + "): " + superClassNegativeExamples); negativeExamples.addAll(superClassNegativeExamples); } else if(strategy == RANDOM){//get some random examples - String query = "SELECT ?s WHERE {?s a ?type. FILTER NOT EXIST{?type rdfs:subClassOf* }}"; + String query = "SELECT ?s WHERE {?s a ?type. FILTER NOT EXIST{?s a <> }} ORDER BY RAND() LIMIT " + maxNrOfReturnedInstances; } } return negativeExamples; Modified: trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIDescriptionConvertVisitor.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIDescriptionConvertVisitor.java 2014-02-17 23:35:23 UTC (rev 4230) +++ trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIDescriptionConvertVisitor.java 2014-02-18 09:50:49 UTC (rev 4231) @@ -25,6 +25,7 @@ import org.dllearner.algorithms.gp.ADC; import org.dllearner.core.owl.Constant; +import org.dllearner.core.owl.DataRange; import org.dllearner.core.owl.Datatype; import org.dllearner.core.owl.DatatypeExactCardinalityRestriction; import org.dllearner.core.owl.DatatypeMaxCardinalityRestriction; @@ -312,20 +313,31 @@ // TODO: currently works only for double min/max DatatypeProperty dp = (DatatypeProperty) description.getRestrictedPropertyExpression(); - // currently only double restrictions implemented - SimpleDoubleDataRange dr = (SimpleDoubleDataRange) description.getDataRange(); - double value = dr.getValue(); - OWLDatatype doubleDataType = factory.getOWLDatatype(XSDVocabulary.DOUBLE.getIRI()); - OWLLiteral constant = factory.getOWLLiteral(value); + //convert the datarange + OWLDataRange owlDataRange; + DataRange dataRange = description.getDataRange(); + if(dataRange.isDatatype()){ + owlDataRange = factory.getOWLDatatype(IRI.create(dataRange.toString())); + } else if(dataRange instanceof SimpleDoubleDataRange){ + // currently only double restrictions implemented + SimpleDoubleDataRange dr = (SimpleDoubleDataRange) description.getDataRange(); + double value = dr.getValue(); + + OWLDatatype doubleDataType = factory.getOWLDatatype(XSDVocabulary.DOUBLE.getIRI()); + OWLLiteral constant = factory.getOWLLiteral(value); - OWLFacet facet; - if(dr instanceof DoubleMinValue) - facet = OWLFacet.MIN_INCLUSIVE; - else - facet = OWLFacet.MAX_INCLUSIVE; - - OWLDataRange owlDataRange = factory.getOWLDatatypeRestriction(doubleDataType, facet, constant); + OWLFacet facet; + if(dr instanceof DoubleMinValue) + facet = OWLFacet.MIN_INCLUSIVE; + else + facet = OWLFacet.MAX_INCLUSIVE; + + owlDataRange = factory.getOWLDatatypeRestriction(doubleDataType, facet, constant); + } else { + throw new UnsupportedOperationException("Can not convert " + description); + } + OWLDataProperty odp = factory.getOWLDataProperty(IRI.create(dp.getName())); OWLClassExpression d = factory.getOWLDataSomeValuesFrom(odp, owlDataRange); Modified: trunk/components-core/src/test/java/org/dllearner/algorithms/isle/DBpediaExperiment.java =================================================================== --- trunk/components-core/src/test/java/org/dllearner/algorithms/isle/DBpediaExperiment.java 2014-02-17 23:35:23 UTC (rev 4230) +++ trunk/components-core/src/test/java/org/dllearner/algorithms/isle/DBpediaExperiment.java 2014-02-18 09:50:49 UTC (rev 4231) @@ -12,6 +12,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.io.StringWriter; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; @@ -58,11 +59,13 @@ import org.dllearner.core.ComponentInitException; import org.dllearner.core.EvaluatedDescription; import org.dllearner.core.KnowledgeSource; +import org.dllearner.core.owl.Axiom; import org.dllearner.core.owl.DataRange; import org.dllearner.core.owl.Datatype; import org.dllearner.core.owl.DatatypeSomeRestriction; import org.dllearner.core.owl.Description; import org.dllearner.core.owl.Entity; +import org.dllearner.core.owl.EquivalentClassesAxiom; import org.dllearner.core.owl.Individual; import org.dllearner.core.owl.Intersection; import org.dllearner.core.owl.NamedClass; @@ -81,11 +84,13 @@ import org.dllearner.refinementoperators.RhoDRDown; import org.dllearner.utilities.PrefixCCMap; import org.dllearner.utilities.examples.AutomaticNegativeExampleFinderSPARQL2; +import org.dllearner.utilities.owl.OWLAPIConverter; import org.ini4j.IniPreferences; import org.ini4j.InvalidFileFormatException; import org.semanticweb.owlapi.apibinding.OWLManager; import org.semanticweb.owlapi.model.AxiomType; import org.semanticweb.owlapi.model.IRI; +import org.semanticweb.owlapi.model.OWLAxiom; import org.semanticweb.owlapi.model.OWLClass; import org.semanticweb.owlapi.model.OWLDataFactory; import org.semanticweb.owlapi.model.OWLDataPropertyRangeAxiom; @@ -143,6 +148,7 @@ private SPARQLReasoner sparqlReasoner; private AutomaticNegativeExampleFinderSPARQL2 negativeExampleFinder; + final int minNrOfPositiveExamples = 3; final int maxNrOfPositiveExamples = 100; final int maxNrOfNegativeExamples = 200; boolean posOnly = false; @@ -228,6 +234,7 @@ for (RelevanceMetric metric : relevanceMetrics) { sql += metric.getClass().getSimpleName().replace("RelevanceMetric", "") + " DECIMAL(8,6) NOT NULL,"; } + sql += "axiom TEXT NOT NULL,"; sql += "PRIMARY KEY(id)," + "INDEX(class(200))) DEFAULT CHARSET=utf8"; st.execute(sql); @@ -236,7 +243,8 @@ for (RelevanceMetric metric : relevanceMetrics) { sql += "," + metric.getClass().getSimpleName().replace("RelevanceMetric", ""); } - sql += ") VALUES(?,?,?,?,?,?"; + sql += ",axiom"; + sql += ") VALUES(?,?,?,?,?,?,?"; for(int i = 0 ; i < relevanceMetrics.size(); i++){ sql += ",?"; } @@ -265,8 +273,8 @@ // new NamedClass("http://dbpedia.org/ontology/Comics"), // new NamedClass("http://dbpedia.org/ontology/Actor"), // new NamedClass("http://dbpedia.org/ontology/Book")); - new SolrSyntacticIndex(schema, solrServerURL, searchField).buildIndex(classList); - System.exit(0); +// new SolrSyntacticIndex(schema, solrServerURL, searchField).buildIndex(classList); +// System.exit(0); ExecutorService executor = Executors.newFixedThreadPool(6); @@ -303,8 +311,8 @@ //get some positive examples SortedSet<Individual> positiveExamples = getPositiveExamples(cls); - //we can stop if there are no positive examples - if(positiveExamples.isEmpty()){ + //we can stop if there are not at least x positive examples + if(positiveExamples.size() < minNrOfPositiveExamples){ logger.info("Empty class."); return; } @@ -725,6 +733,27 @@ return classes; } + /** + * Rewrite OWLAxiom into OWL Functional style syntax. + * @param axiom + * @return + */ + private String render(Axiom dllearnerAxiom){ + try { + OWLAxiom axiom = OWLAPIConverter.getOWLAPIAxiom(dllearnerAxiom); + OWLOntologyManager man = OWLManager.createOWLOntologyManager(); + OWLOntology ontology = man.createOntology(); + man.addAxiom(ontology, axiom); + StringWriter sw = new StringWriter(); + org.coode.owlapi.functionalrenderer.OWLObjectRenderer r = new org.coode.owlapi.functionalrenderer.OWLObjectRenderer(man, ontology, sw); + axiom.accept(r); + return sw.toString(); + } catch (OWLOntologyCreationException e) { + e.printStackTrace(); + } + return null; + } + private synchronized void write2DB(FastInstanceChecker reasoner, AbstractLearningProblem lp, NamedClass cls, TreeSet<? extends EvaluatedDescription> evaluatedDescriptions, Map<RelevanceMetric, Map<Entity, Double>> entityRelevances) throws SQLException{ int position = 1; for(EvaluatedDescription ed : evaluatedDescriptions.descendingSet()) { @@ -747,6 +776,7 @@ double relevanceScore = getRelevanceScore(ed.getDescription(), entityRelevances.get(metric)); ps.setDouble(col++, relevanceScore); } + ps.setString(col, render(new EquivalentClassesAxiom(cls, ed.getDescription()))); ps.addBatch(); } @@ -770,8 +800,8 @@ // la.start(); long start = System.currentTimeMillis(); - new DBpediaExperiment().run(); -// new DBpediaExperiment().run(new NamedClass("http://dbpedia.org/ontology/Comics")); +// new DBpediaExperiment().run(); + new DBpediaExperiment().run(new NamedClass("http://dbpedia.org/ontology/Astronaut")); long end = System.currentTimeMillis(); logger.info("Operation took " + (end - start) + "ms"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |