From: <lor...@us...> - 2011-11-23 13:16:51
|
Revision: 3431 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3431&view=rev Author: lorenz_b Date: 2011-11-23 13:16:44 +0000 (Wed, 23 Nov 2011) Log Message: ----------- Added option to return only the most general classes in the disjointness axioms. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/DisjointClassesLearner.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/DisjointClassesLearner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/DisjointClassesLearner.java 2011-11-23 10:04:53 UTC (rev 3430) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/DisjointClassesLearner.java 2011-11-23 13:16:44 UTC (rev 3431) @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -38,6 +39,7 @@ import org.dllearner.core.config.ConfigOption; import org.dllearner.core.config.NamedClassEditor; import org.dllearner.core.owl.Axiom; +import org.dllearner.core.owl.ClassHierarchy; import org.dllearner.core.owl.Description; import org.dllearner.core.owl.DisjointClassesAxiom; import org.dllearner.core.owl.NamedClass; @@ -71,6 +73,9 @@ private List<EvaluatedDescription> currentlyBestEvaluatedDescriptions; private SortedSet<Description> subClasses; + private boolean useWordNetDistance = false; + private boolean suggestMostGeneralClasses = true; + public DisjointClassesLearner(SparqlEndpointKS ks){ this.ks = ks; } @@ -83,6 +88,22 @@ this.classToDescribe = classToDescribe; } + public boolean isUseWordNetDistance() { + return useWordNetDistance; + } + + public void setUseWordNetDistance(boolean useWordNetDistance) { + this.useWordNetDistance = useWordNetDistance; + } + + public boolean isSuggestMostGeneralClasses() { + return suggestMostGeneralClasses; + } + + public void setSuggestMostGeneralClasses(boolean suggestMostGeneralClasses) { + this.suggestMostGeneralClasses = suggestMostGeneralClasses; + } + @Override public void start() { logger.info("Start learning..."); @@ -200,6 +221,11 @@ Set<NamedClass> completeDisjointclasses = new TreeSet<NamedClass>(allClasses); completeDisjointclasses.removeAll(class2Count.keySet()); + //drop all classes which have a super class in this set + if(suggestMostGeneralClasses && reasoner.isPrepared()){ + keepMostGeneralClasses(completeDisjointclasses); + } + //we remove the asserted subclasses here completeDisjointclasses.removeAll(subClasses); for(Description subClass : subClasses){ @@ -221,9 +247,6 @@ for(Entry<NamedClass, Integer> entry : sortByValues(class2Count)){ // evalDesc = new EvaluatedDescription(entry.getKey(), // new AxiomScore(1 - (entry.getValue() / (double)all))); - System.out.println(entry.getKey()); - System.out.println(all); - System.out.println(entry.getValue()); double[] confidenceInterval = Heuristics.getConfidenceInterval95Wald(all, entry.getValue()); double accuracy = (confidenceInterval[0] + confidenceInterval[1]) / 2; evalDesc = new EvaluatedDescription(entry.getKey(), @@ -235,6 +258,13 @@ return evalDescs; } + private void keepMostGeneralClasses(Set<NamedClass> classes){ + ClassHierarchy h = reasoner.getClassHierarchy(); + for(NamedClass nc : new HashSet<NamedClass>(classes)){ + classes.removeAll(h.getSubClasses(nc)); + } + } + public static void main(String[] args) throws Exception{ DisjointClassesLearner l = new DisjointClassesLearner(new SparqlEndpointKS(new SparqlEndpoint(new URL("http://dbpedia.aksw.org:8902/sparql"), Collections.singletonList("http://dbpedia.org"), Collections.<String>emptyList()))); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |