From: <lor...@us...> - 2012-07-02 11:48:10
|
Revision: 3768 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3768&view=rev Author: lorenz_b Date: 2012-07-02 11:47:59 +0000 (Mon, 02 Jul 2012) Log Message: ----------- Added caching decorator for CBD generator. Added some config options. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGenerator.java trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGeneratorImpl.java trunk/components-core/src/main/java/org/dllearner/kb/sparql/SymmetricConciseBoundedDescriptionGeneratorImpl.java Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/kb/sparql/CachingConciseBoundedDescriptionGenerator.java Added: trunk/components-core/src/main/java/org/dllearner/kb/sparql/CachingConciseBoundedDescriptionGenerator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/CachingConciseBoundedDescriptionGenerator.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/CachingConciseBoundedDescriptionGenerator.java 2012-07-02 11:47:59 UTC (rev 3768) @@ -0,0 +1,47 @@ +package org.dllearner.kb.sparql; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.hp.hpl.jena.rdf.model.Model; + +public class CachingConciseBoundedDescriptionGenerator implements ConciseBoundedDescriptionGenerator{ + + private Map<String, Model> cache; + private ConciseBoundedDescriptionGenerator cbdGen; + + public CachingConciseBoundedDescriptionGenerator(ConciseBoundedDescriptionGenerator cbdGen) { + this.cbdGen = cbdGen; + cache = new HashMap<String, Model>(); + } + + public Model getConciseBoundedDescription(String resourceURI){ + Model cbd = cache.get(resourceURI); + if(cbd == null){ + cbd = cbdGen.getConciseBoundedDescription(resourceURI); + cache.put(resourceURI, cbd); + } + return cbd; + } + + public Model getConciseBoundedDescription(String resourceURI, int depth){ + Model cbd = cache.get(resourceURI); + if(cbd == null){ + cbd = cbdGen.getConciseBoundedDescription(resourceURI, depth); + cache.put(resourceURI, cbd); + } + return cbd; + } + + @Override + public void setRestrictToNamespaces(List<String> namespaces) { + cbdGen.setRestrictToNamespaces(namespaces); + } + + @Override + public void setRecursionDepth(int maxRecursionDepth) { + cbdGen.setRecursionDepth(maxRecursionDepth); + } + +} Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGenerator.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGenerator.java 2012-06-29 12:18:39 UTC (rev 3767) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGenerator.java 2012-07-02 11:47:59 UTC (rev 3768) @@ -1,5 +1,7 @@ package org.dllearner.kb.sparql; +import java.util.List; + import com.hp.hpl.jena.rdf.model.Model; public interface ConciseBoundedDescriptionGenerator { @@ -7,4 +9,8 @@ public Model getConciseBoundedDescription(String resourceURI); public Model getConciseBoundedDescription(String resourceURI, int depth); + + public void setRestrictToNamespaces(List<String> namespaces); + + public void setRecursionDepth(int maxRecursionDepth); } Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGeneratorImpl.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGeneratorImpl.java 2012-06-29 12:18:39 UTC (rev 3767) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGeneratorImpl.java 2012-07-02 11:47:59 UTC (rev 3768) @@ -2,6 +2,9 @@ import java.io.UnsupportedEncodingException; import java.sql.SQLException; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; import java.util.Set; import org.apache.log4j.Level; @@ -13,18 +16,22 @@ import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; +import com.hp.hpl.jena.vocabulary.RDF; +import com.hp.hpl.jena.vocabulary.RDFS; public class ConciseBoundedDescriptionGeneratorImpl implements ConciseBoundedDescriptionGenerator{ private static final Logger logger = Logger.getLogger(ConciseBoundedDescriptionGeneratorImpl.class); private static final int CHUNK_SIZE = 1000; - private static final int DEFAULT_DEPTH = 2; private ExtractionDBCache cache; private SparqlEndpoint endpoint; private Model baseModel; + private List<String> namespaces; + private int maxRecursionDepth = 2; + public ConciseBoundedDescriptionGeneratorImpl(SparqlEndpoint endpoint, ExtractionDBCache cache) { this.endpoint = endpoint; this.cache = cache; @@ -39,7 +46,7 @@ } public Model getConciseBoundedDescription(String resourceURI){ - return getConciseBoundedDescription(resourceURI, DEFAULT_DEPTH); + return getConciseBoundedDescription(resourceURI, maxRecursionDepth); } public Model getConciseBoundedDescription(String resourceURI, int depth){ @@ -78,6 +85,16 @@ return all; } + @Override + public void setRestrictToNamespaces(List<String> namespaces) { + this.namespaces = namespaces; + } + + @Override + public void setRecursionDepth(int maxRecursionDepth) { + this.maxRecursionDepth = maxRecursionDepth; + } + /** * A SPARQL CONSTRUCT query is created, to get a RDF graph for the given example with a specific recursion depth. * @param example The example resource for which a CONSTRUCT query is created. @@ -95,11 +112,13 @@ sb.append("}\n"); sb.append("WHERE {\n"); sb.append("<").append(resource).append("> ").append("?p0 ").append("?o0").append(".\n"); + sb.append(createNamespacesFilter("?p0")); // sb.append("?p0 a ?type0.\n"); for(int i = 1; i < depth; i++){ sb.append("OPTIONAL{\n"); sb.append("?o").append(i-1).append(" ").append("?p").append(i).append(" ").append("?o").append(i).append(".\n"); // sb.append("?p").append(i).append(" ").append("a").append(" ").append("?type").append(i).append(".\n"); + sb.append(createNamespacesFilter("?p" + i)); } for(int i = 1; i < depth; i++){ sb.append("}"); @@ -110,6 +129,22 @@ return sb.toString(); } + private String createNamespacesFilter(String targetVar){ + String filter = ""; + if(namespaces != null){ + filter += "FILTER("; + for(Iterator<String> iter = namespaces.iterator(); iter.hasNext();){ + String ns = iter.next(); + filter += "(REGEX(STR(" + targetVar + "),'" + ns + "'))"; + if(iter.hasNext()){ + filter += " || "; + } + } + filter += ")"; + } + return filter; + } + private Model getModel(String query) throws UnsupportedEncodingException, SQLException{ if(logger.isDebugEnabled()){ logger.debug("Sending SPARQL query ..."); @@ -143,7 +178,10 @@ public static void main(String[] args) { Logger.getRootLogger().setLevel(Level.DEBUG); ConciseBoundedDescriptionGenerator cbdGen = new ConciseBoundedDescriptionGeneratorImpl(SparqlEndpoint.getEndpointDBpedia()); - cbdGen.getConciseBoundedDescription("http://dbpedia.org/resource/Leipzig", 2); + cbdGen = new CachingConciseBoundedDescriptionGenerator(cbdGen); + cbdGen.setRestrictToNamespaces(Arrays.asList(new String[]{"http://dbpedia.org/ontology/", RDF.getURI(), RDFS.getURI()})); + Model cbd = cbdGen.getConciseBoundedDescription("http://dbpedia.org/resource/Leipzig", 2); + System.out.println(cbd.size()); } } Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/SymmetricConciseBoundedDescriptionGeneratorImpl.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/SymmetricConciseBoundedDescriptionGeneratorImpl.java 2012-06-29 12:18:39 UTC (rev 3767) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/SymmetricConciseBoundedDescriptionGeneratorImpl.java 2012-07-02 11:47:59 UTC (rev 3768) @@ -2,6 +2,7 @@ import java.io.UnsupportedEncodingException; import java.sql.SQLException; +import java.util.List; import java.util.Set; import org.apache.log4j.Level; @@ -18,11 +19,13 @@ private static final Logger logger = Logger.getLogger(SymmetricConciseBoundedDescriptionGeneratorImpl.class); private static final int CHUNK_SIZE = 1000; - private static final int DEFAULT_DEPTH = 1; private ExtractionDBCache cache; private SparqlEndpoint endpoint; + private List<String> namespaces; + private int maxRecursionDepth = 1; + public SymmetricConciseBoundedDescriptionGeneratorImpl(SparqlEndpoint endpoint, ExtractionDBCache cache) { this.endpoint = endpoint; this.cache = cache; @@ -33,7 +36,7 @@ } public Model getConciseBoundedDescription(String resourceURI){ - return getConciseBoundedDescription(resourceURI, DEFAULT_DEPTH); + return getConciseBoundedDescription(resourceURI, maxRecursionDepth); } public Model getConciseBoundedDescription(String resourceURI, int depth){ @@ -43,6 +46,11 @@ return cbd; } + @Override + public void setRestrictToNamespaces(List<String> namespaces) { + this.namespaces = namespaces; + } + private Model getModelChunkedResourceIsObject(String resource, int depth){ String query = makeConstructQueryObject(resource, CHUNK_SIZE, 0, depth); Model all = ModelFactory.createDefaultModel(); @@ -194,4 +202,10 @@ cbdGen.getConciseBoundedDescription("http://dbpedia.org/resource/Leipzig", 1); } + @Override + public void setRecursionDepth(int maxRecursionDepth) { + this.maxRecursionDepth = maxRecursionDepth; + + } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |