From: <ku...@us...> - 2008-08-20 14:37:21
|
Revision: 1109 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1109&view=rev Author: kurzum Date: 2008-08-20 14:37:13 +0000 (Wed, 20 Aug 2008) Log Message: ----------- Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/kb/aquisitors/SparqlTupelAquisitorImproved.java trunk/src/dl-learner/org/dllearner/scripts/WikipediaCategoryCleaner.java trunk/src/dl-learner/org/dllearner/server/DLLearnerWS.java trunk/src/dl-learner/org/dllearner/utilities/examples/AutomaticNegativeExampleFinderSPARQL.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/test/TestGetExampleBug.java Modified: trunk/src/dl-learner/org/dllearner/kb/aquisitors/SparqlTupelAquisitorImproved.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/aquisitors/SparqlTupelAquisitorImproved.java 2008-08-20 14:22:56 UTC (rev 1108) +++ trunk/src/dl-learner/org/dllearner/kb/aquisitors/SparqlTupelAquisitorImproved.java 2008-08-20 14:37:13 UTC (rev 1109) @@ -122,9 +122,14 @@ @Override public SortedSet<RDFNodeTuple> retrieveTuplesForClassesOnly(String uri){ + int tmp = recursionDepth; + recursionDepth=4; + SortedSet<RDFNodeTuple> tmpSet = retrieveTupel(uri); + recursionDepth = tmp; + return tmpSet; //getQuery - String sparqlQueryString = sparqlQueryMaker.makeSubjectQueryUsingFilters(uri); - return sparqlTasks.queryAsRDFNodeTuple(sparqlQueryString, PREDICATE, OBJECT); + //String sparqlQueryString = sparqlQueryMaker.makeSubjectQueryUsingFilters(uri); + //return sparqlTasks.queryAsRDFNodeTuple(sparqlQueryString, PREDICATE, OBJECT); } Modified: trunk/src/dl-learner/org/dllearner/scripts/WikipediaCategoryCleaner.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/WikipediaCategoryCleaner.java 2008-08-20 14:22:56 UTC (rev 1108) +++ trunk/src/dl-learner/org/dllearner/scripts/WikipediaCategoryCleaner.java 2008-08-20 14:37:13 UTC (rev 1109) @@ -223,8 +223,8 @@ lsc.sparqlEndpoint = sparqlTasks.getSparqlEndpoint(); lsc.recursiondepth = 1; - lsc.noisePercentage = 15; - lsc.guaranteeXgoodDescriptions = 200; + lsc.noisePercentage = 20; + lsc.guaranteeXgoodDescriptions = 100; lsc.maxExecutionTimeInSeconds = 50; lsc.logLevel = "TRACE"; // lsc.searchTreeFile = "log/WikipediaCleaner.txt"; Modified: trunk/src/dl-learner/org/dllearner/server/DLLearnerWS.java =================================================================== --- trunk/src/dl-learner/org/dllearner/server/DLLearnerWS.java 2008-08-20 14:22:56 UTC (rev 1108) +++ trunk/src/dl-learner/org/dllearner/server/DLLearnerWS.java 2008-08-20 14:37:13 UTC (rev 1109) @@ -681,15 +681,28 @@ @WebMethod public String[] getNegativeExamples(int sessionID, int componentID,String[] positives, int results, String namespace) throws ClientNotKnownException { - SortedSet<String> set = new TreeSet<String>(Arrays.asList(positives)); + int sparqlResultSetLimit = 500; + SortedSet<String> positiveSet = new TreeSet<String>(Arrays.asList(positives)); ClientState state = getState(sessionID); Component component = state.getComponent(componentID); SparqlKnowledgeSource ks=(SparqlKnowledgeSource)component; SPARQLTasks task=ks.getSPARQLTasks(); - AutomaticNegativeExampleFinderSPARQL finder=new AutomaticNegativeExampleFinderSPARQL(set,task); - //finder.makeNegativeExamplesFromRelatedInstances(set, namespace); - finder.makeNegativeExamplesFromParallelClasses(set, 25); + AutomaticNegativeExampleFinderSPARQL finder=new AutomaticNegativeExampleFinderSPARQL(positiveSet,task); + + finder.makeNegativeExamplesFromParallelClasses(positiveSet, sparqlResultSetLimit); SortedSet<String> negExamples=finder.getNegativeExamples(results); + if(negExamples.isEmpty()){ + finder.makeNegativeExamplesFromRelatedInstances(positiveSet, namespace); + negExamples = finder.getNegativeExamples(results); + if(negExamples.isEmpty()){ + finder.makeNegativeExamplesFromSuperClassesOfInstances(positiveSet, sparqlResultSetLimit); + negExamples = finder.getNegativeExamples(results); + if(negExamples.isEmpty()) { + finder.makeNegativeExamplesFromRandomInstances(); + negExamples = finder.getNegativeExamples(results); + } + } + } return negExamples.toArray(new String[negExamples.size()]); } Added: trunk/src/dl-learner/org/dllearner/test/TestGetExampleBug.java =================================================================== --- trunk/src/dl-learner/org/dllearner/test/TestGetExampleBug.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/test/TestGetExampleBug.java 2008-08-20 14:37:13 UTC (rev 1109) @@ -0,0 +1,86 @@ +package org.dllearner.test; + +import java.net.URL; +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.SimpleLayout; +import org.dllearner.kb.sparql.SPARQLTasks; +import org.dllearner.kb.sparql.SparqlEndpoint; +import org.dllearner.utilities.examples.AutomaticNegativeExampleFinderSPARQL; + +public class TestGetExampleBug { + + /** + * @param args + */ + public static void main(String[] args) { + Logger logger = Logger.getRootLogger(); + SimpleLayout layout = new SimpleLayout(); + ConsoleAppender consoleAppender = new ConsoleAppender(layout); + logger.removeAllAppenders(); + logger.addAppender(consoleAppender); + logger.setLevel(Level.TRACE); + //Logger.getLogger(SparqlQuery.class).setLevel(Level.DEBUG); + + try { + String OntowikiUrl="http://localhost/ontowiki-0.8.5/service/sparql"; + + String posExamples = "http://3ba.se/conferences/FMILeipzig"; + SortedSet<String> positiveSet = new TreeSet<String>(); + positiveSet.add(posExamples); + SPARQLTasks st = new SPARQLTasks(new SparqlEndpoint(new URL(OntowikiUrl))); + AutomaticNegativeExampleFinderSPARQL ane = + new AutomaticNegativeExampleFinderSPARQL(positiveSet,st); + SortedSet<String> negExamples = new TreeSet<String>(); + int results=100; + if(negExamples.isEmpty()){ + //ane.makeNegativeExamplesFromRelatedInstances(positiveSet, "http://3ba.se/conferences/"); + negExamples = ane.getNegativeExamples(results); + if(negExamples.isEmpty()){ + ane.makeNegativeExamplesFromSuperClassesOfInstances(positiveSet, 500); + negExamples = ane.getNegativeExamples(results); + if(negExamples.isEmpty()) { + ane.makeNegativeExamplesFromRandomInstances(); + negExamples = ane.getNegativeExamples(results); + } + } + } + + System.out.println(ane.getNegativeExamples(100)); + }catch (Exception e) { + e.printStackTrace(); + } + + /*$negExamples=$client->getNegativeExamples($id,$ksID,$posExamples,count($posExamples),"http://localhost/ontowiki/service/sparql"); + $negExamples=$negExamples->item; + $client->setLearningProblem($id, "posNegDefinition"); + $client->setPositiveExamples($id, $posExamples); + $client->setNegativeExamples($id, $negExamples); + +// choose refinement operator approach + $client->setLearningAlgorithm($id, "refexamples"); +// you can add the following to apply a config option to a component, e.g. ignore a concept +// $client->applyConfigEntryStringArray($id, $la_id, "ignoredConcepts", array('http://example.com/father#male')); + + $client->initAll($id); + +// learn concept + echo 'start learning ... '; +// get only concept +// $concept = $client->learn($id, "manchester"); +// get concept and additional information in JSON syntax + $concept = $client->learnDescriptionsEvaluated($id, 5); + echo 'OK <br />'; + echo 'solution: <pre>' . $concept . '</pre>'; + + ?>*/ + + + + } + +} Modified: trunk/src/dl-learner/org/dllearner/utilities/examples/AutomaticNegativeExampleFinderSPARQL.java =================================================================== --- trunk/src/dl-learner/org/dllearner/utilities/examples/AutomaticNegativeExampleFinderSPARQL.java 2008-08-20 14:22:56 UTC (rev 1108) +++ trunk/src/dl-learner/org/dllearner/utilities/examples/AutomaticNegativeExampleFinderSPARQL.java 2008-08-20 14:37:13 UTC (rev 1109) @@ -19,6 +19,7 @@ */ package org.dllearner.utilities.examples; +import java.util.Iterator; import java.util.SortedSet; import java.util.TreeSet; @@ -26,6 +27,7 @@ import org.dllearner.core.ComponentManager; import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.utilities.datastructures.SetManipulation; +import org.dllearner.utilities.owl.OWLVocabulary; public class AutomaticNegativeExampleFinderSPARQL { @@ -40,6 +42,7 @@ private SortedSet<String> fromRelated = new TreeSet<String>(); private SortedSet<String> fromSuperclasses = new TreeSet<String>();; private SortedSet<String> fromParallelClasses = new TreeSet<String>();; + private SortedSet<String> fromRandom = new TreeSet<String>();; private SortedSet<String> fromDomain = new TreeSet<String>();; private SortedSet<String> fromRange = new TreeSet<String>();; @@ -68,16 +71,20 @@ /** * aggregates all collected neg examples + * CAVE: it is necessary to call one of the make functions before calling this + * * @param neglimit size of negative Example set * @param stable decides whether neg Examples are randomly picked, default false, faster for developing, since the cache can be used * @return */ public SortedSet<String> getNegativeExamples(int neglimit, boolean stable ) { - SortedSet<String> negatives = new TreeSet<String>(); negatives.addAll(fromParallelClasses); negatives.addAll(fromRelated); negatives.addAll(fromSuperclasses); + if(negatives.isEmpty()) { + negatives.addAll(fromRandom); + } logger.debug("neg Example size before shrinking: " + negatives.size()); if (stable) { negatives = SetManipulation.stableShrink(negatives,neglimit); @@ -90,6 +97,18 @@ } + public void makeNegativeExamplesFromRandomInstances() { + logger.debug("making random examples "); + String variable = "subject"; + String sparqlQueryString="SELECT ?"+variable+" WHERE {" + + "?"+variable+" <" +OWLVocabulary.RDF_TYPE+">" + " ?o" + + "}"; + + fromRandom = sparqltasks.queryAsSet(sparqlQueryString, variable); + fromRandom.removeAll(fullPositiveSet); + logger.debug("|-negExample size from related: " + fromRelated.size()); + } + /** * makes neg ex from related instances, that take part in a role R(pos,neg) * filters all objects, that don't use the given namespace @@ -173,23 +192,48 @@ } + + /** + * it gets the first class of an arbitrary instance and queries the superclasses of it, + * could be more elaborate. + * It is better to use makeNegativeExamplesFromSuperClasses + * @param positiveSet + * @param sparqlResultSetLimit + */ + public void makeNegativeExamplesFromSuperClassesOfInstances(SortedSet<String> positiveSet, + int sparqlResultSetLimit) { + SortedSet<String> classes = new TreeSet<String>(); + Iterator<String> instanceIter = positiveSet.iterator(); + while(classes.isEmpty() && instanceIter.hasNext()) { + classes.addAll(sparqltasks.getClassesForInstance(instanceIter.next(), sparqlResultSetLimit)); + + } + makeNegativeExamplesFromSuperClasses(classes.first(), sparqlResultSetLimit); + } + + + public void makeNegativeExamplesFromSuperClasses(String concept, int sparqlResultSetLimit) { + makeNegativeExamplesFromSuperClasses( concept, sparqlResultSetLimit, 2); + } + + /** * if pos ex derive from one class, then neg ex are taken from a superclass * @param concept - * @param resultLimit + * @param sparqlResultSetLimit */ - public void makeNegativeExamplesFromSuperClasses(String concept, int resultLimit) { + public void makeNegativeExamplesFromSuperClasses(String concept, int sparqlResultSetLimit, int depth) { concept = concept.replaceAll("\"", ""); // superClasses.add(concept.replace("\"", "")); // logger.debug("before"+superClasses); - SortedSet<String> superClasses = sparqltasks.getSuperClasses(concept, 4); + SortedSet<String> superClasses = sparqltasks.getSuperClasses(concept, depth); logger.debug("making neg Examples from " + superClasses.size() + " superclasses"); for (String oneSuperClass : superClasses) { logger.debug(oneSuperClass); fromSuperclasses.addAll(sparqltasks.retrieveInstancesForClassDescription("\"" - + oneSuperClass + "\"", resultLimit)); + + oneSuperClass + "\"", sparqlResultSetLimit)); } this.fromSuperclasses.removeAll(fullPositiveSet); @@ -197,17 +241,17 @@ } @SuppressWarnings("unused") - private void makeNegativeExamplesFromDomain(String role, int resultLimit){ + private void makeNegativeExamplesFromDomain(String role, int sparqlResultSetLimit){ logger.debug("making Negative Examples from Domain of : "+role); - fromDomain.addAll(sparqltasks.getDomainInstances(role, resultLimit)); + fromDomain.addAll(sparqltasks.getDomainInstances(role, sparqlResultSetLimit)); fromDomain.removeAll(fullPositiveSet); logger.debug("|-neg Example size from Domain: "+this.fromDomain.size()); } @SuppressWarnings("unused") - private void makeNegativeExamplesFromRange(String role, int resultLimit){ + private void makeNegativeExamplesFromRange(String role, int sparqlResultSetLimit){ logger.debug("making Negative Examples from Range of : "+role); - fromRange.addAll(sparqltasks.getRangeInstances(role, resultLimit)); + fromRange.addAll(sparqltasks.getRangeInstances(role, sparqlResultSetLimit)); fromRange.removeAll(fullPositiveSet); logger.debug("|-neg Example size from Range: "+fromRange.size()); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |