From: <lor...@us...> - 2011-02-26 23:09:02
|
Revision: 2669 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2669&view=rev Author: lorenz_b Date: 2011-02-26 23:08:56 +0000 (Sat, 26 Feb 2011) Log Message: ----------- Reduced # of comparisons in filter. Modified Paths: -------------- trunk/autosparql/src/main/java/org/dllearner/autosparql/evaluation/QueryTreeFilterEvaluation.java trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/QueryTreeFactory.java trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/cache/QueryTreeCache.java trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/impl/QueryTreeFactoryImpl.java trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/util/QuestionBasedStatementFilter.java Added Paths: ----------- trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/util/QuestionBasedStatementSelector.java Modified: trunk/autosparql/src/main/java/org/dllearner/autosparql/evaluation/QueryTreeFilterEvaluation.java =================================================================== --- trunk/autosparql/src/main/java/org/dllearner/autosparql/evaluation/QueryTreeFilterEvaluation.java 2011-02-26 21:53:23 UTC (rev 2668) +++ trunk/autosparql/src/main/java/org/dllearner/autosparql/evaluation/QueryTreeFilterEvaluation.java 2011-02-26 23:08:56 UTC (rev 2669) @@ -13,6 +13,7 @@ import org.dllearner.sparqlquerygenerator.util.ModelGenerator; import org.dllearner.sparqlquerygenerator.util.ModelGenerator.Strategy; import org.dllearner.sparqlquerygenerator.util.QuestionBasedStatementFilter; +import org.dllearner.sparqlquerygenerator.util.QuestionBasedStatementSelector; import com.hp.hpl.jena.rdf.model.Model; @@ -46,6 +47,7 @@ QueryTree<String> tree = treeFactory.getQueryTree(uri, model); System.out.println("Tree without filtering:\n" + tree.getStringRepresentation()); + treeFactory.setStatementSelector(new QuestionBasedStatementSelector(new HashSet<String>(relevantWords))); treeFactory.setStatementFilter(new QuestionBasedStatementFilter(new HashSet<String>(relevantWords))); QueryTree<String> filteredTree = treeFactory.getQueryTree(uri, model); System.out.println("Tree with filtering:\n" + filteredTree.getStringRepresentation()); Modified: trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/QueryTreeFactory.java =================================================================== --- trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/QueryTreeFactory.java 2011-02-26 21:53:23 UTC (rev 2668) +++ trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/QueryTreeFactory.java 2011-02-26 23:08:56 UTC (rev 2669) @@ -25,6 +25,7 @@ import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.rdf.model.Selector; +import com.hp.hpl.jena.rdf.model.Statement; /** * @@ -43,7 +44,8 @@ void setObjectFilter(Filter filter); - void setStatementFilter(Selector filter); + void setStatementSelector(Selector selector); + void setStatementFilter(com.hp.hpl.jena.util.iterator.Filter<Statement> filter); } Modified: trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/cache/QueryTreeCache.java =================================================================== --- trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/cache/QueryTreeCache.java 2011-02-26 21:53:23 UTC (rev 2668) +++ trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/cache/QueryTreeCache.java 2011-02-26 23:08:56 UTC (rev 2669) @@ -47,7 +47,7 @@ } public void setStatementFilter(Selector filter){ - factory.setStatementFilter(filter); + factory.setStatementSelector(filter); } public void clear(){ Modified: trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/impl/QueryTreeFactoryImpl.java =================================================================== --- trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/impl/QueryTreeFactoryImpl.java 2011-02-26 21:53:23 UTC (rev 2668) +++ trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/impl/QueryTreeFactoryImpl.java 2011-02-26 23:08:56 UTC (rev 2669) @@ -56,7 +56,8 @@ private Filter predicateFilter = new ZeroFilter(); private Filter objectFilter = new ZeroFilter(); - private Selector statementFilter = new SimpleSelector(); + private Selector statementSelector = new SimpleSelector(); + private com.hp.hpl.jena.util.iterator.Filter<Statement> keepFilter; public QueryTreeFactoryImpl(){ comparator = new StatementComparator(); @@ -72,14 +73,24 @@ } @Override - public void setStatementFilter(Selector filter) { - this.statementFilter = filter; + public void setStatementSelector(Selector selector) { + this.statementSelector = selector; } @Override + public void setStatementFilter(com.hp.hpl.jena.util.iterator.Filter<Statement> statementFilter) { + this.keepFilter = statementFilter; + + } + + @Override public QueryTreeImpl<String> getQueryTree(String example, Model model) { - return createTree(model.getResource(example), model); + if(keepFilter == null){ + return createTree(model.getResource(example), model); + } else { + return createTreeOptimized(model.getResource(example), model); + } } @Override @@ -92,14 +103,44 @@ return new QueryTreeImpl<String>(example); } + private QueryTreeImpl<String> createTreeOptimized(Resource s, Model model){ + nodeId = 0; + SortedMap<String, SortedSet<Statement>> resource2Statements = new TreeMap<String, SortedSet<Statement>>(); + + fillMap(s, model, resource2Statements); + + QueryTreeImpl<String> tree = new QueryTreeImpl<String>(s.toString()); + fillTree(tree, resource2Statements); + + tree.setUserObject("?"); + return tree; + } + + private void fillMap(Resource s, Model model, SortedMap<String, SortedSet<Statement>> resource2Statements){ + Iterator<Statement> it = model.listStatements(s, null, (RDFNode)null).filterKeep(keepFilter); + Statement st; + SortedSet<Statement> statements; + while(it.hasNext()){ + st = it.next(); + statements = resource2Statements.get(st.getSubject().toString()); + if(statements == null){ + statements = new TreeSet<Statement>(comparator); + resource2Statements.put(st.getSubject().toString(), statements); + } + statements.add(st); + if(st.getObject().isURIResource()){ + fillMap(st.getObject().asResource(), model, resource2Statements); + } + } + } + private QueryTreeImpl<String> createTree(Resource s, Model model){ nodeId = 0; - SortedMap<String, SortedSet<Statement>> resource2Statements = new TreeMap<String, SortedSet<Statement>>(); Statement st; SortedSet<Statement> statements; - Iterator<Statement> it = model.listStatements(statementFilter); + Iterator<Statement> it = model.listStatements(statementSelector); while(it.hasNext()){ st = it.next(); statements = resource2Statements.get(st.getSubject().toString()); Modified: trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/util/QuestionBasedStatementFilter.java =================================================================== --- trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/util/QuestionBasedStatementFilter.java 2011-02-26 21:53:23 UTC (rev 2668) +++ trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/util/QuestionBasedStatementFilter.java 2011-02-26 23:08:56 UTC (rev 2669) @@ -5,18 +5,16 @@ import uk.ac.shef.wit.simmetrics.similaritymetrics.AbstractStringMetric; import uk.ac.shef.wit.simmetrics.similaritymetrics.QGramsDistance; -import com.hp.hpl.jena.rdf.model.Property; -import com.hp.hpl.jena.rdf.model.RDFNode; -import com.hp.hpl.jena.rdf.model.Resource; -import com.hp.hpl.jena.rdf.model.Selector; import com.hp.hpl.jena.rdf.model.Statement; +import com.hp.hpl.jena.util.iterator.Filter; -public class QuestionBasedStatementFilter implements Selector { +public class QuestionBasedStatementFilter extends Filter<Statement> { private Set<String> questionWords; private AbstractStringMetric metric; - private double threshold = 0.7; + private double threshold = 0.5; + int cnt = 0; public QuestionBasedStatementFilter(Set<String> questionWords){ this.questionWords = questionWords; @@ -24,23 +22,6 @@ } - @Override - public boolean test(Statement s) { - String predicate = s.getPredicate().getURI().substring(s.getPredicate().getURI().lastIndexOf("/")); - String object = null; - if(s.getObject().isURIResource()){ - object = s.getObject().asResource().getURI(); - object = object.substring(object.lastIndexOf("/")+1); - } else if(s.getObject().isLiteral()){ - object = s.getObject().asLiteral().getLexicalForm(); - } - if(isSimiliar2QuestionWord(object) || isSimiliar2QuestionWord(predicate)){ - return true; - } - - return false; - } - private boolean isSimiliar2QuestionWord(String s){ for(String word : questionWords){ if(areSimiliar(word, s)){ @@ -50,29 +31,26 @@ return false; } - private boolean areSimiliar(String s1, String s2){ + private boolean areSimiliar(String s1, String s2){//cnt++;System.out.println(cnt); float sim = metric.getSimilarity(s1, s2); return sim >= threshold; } @Override - public boolean isSimple() { + public boolean accept(Statement s) { + String predicate = s.getPredicate().getURI().substring(s.getPredicate().getURI().lastIndexOf("/")); + String object = null; + if(s.getObject().isURIResource()){ + object = s.getObject().asResource().getURI(); + object = object.substring(object.lastIndexOf("/")+1); + } else if(s.getObject().isLiteral()){ + object = s.getObject().asLiteral().getLexicalForm(); + } + if(isSimiliar2QuestionWord(object) || isSimiliar2QuestionWord(predicate)){ + return true; + } + return false; } - @Override - public Resource getSubject() { - return null; - } - - @Override - public Property getPredicate() { - return null; - } - - @Override - public RDFNode getObject() { - return null; - } - } Copied: trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/util/QuestionBasedStatementSelector.java (from rev 2667, trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/util/QuestionBasedStatementFilter.java) =================================================================== --- trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/util/QuestionBasedStatementSelector.java (rev 0) +++ trunk/sparql-query-generator/src/main/java/org/dllearner/sparqlquerygenerator/util/QuestionBasedStatementSelector.java 2011-02-26 23:08:56 UTC (rev 2669) @@ -0,0 +1,78 @@ +package org.dllearner.sparqlquerygenerator.util; + +import java.util.Set; + +import uk.ac.shef.wit.simmetrics.similaritymetrics.AbstractStringMetric; +import uk.ac.shef.wit.simmetrics.similaritymetrics.QGramsDistance; + +import com.hp.hpl.jena.rdf.model.Property; +import com.hp.hpl.jena.rdf.model.RDFNode; +import com.hp.hpl.jena.rdf.model.Resource; +import com.hp.hpl.jena.rdf.model.Selector; +import com.hp.hpl.jena.rdf.model.Statement; + +public class QuestionBasedStatementSelector implements Selector { + + private Set<String> questionWords; + private AbstractStringMetric metric; + private double threshold = 0.5; + int cnt = 0; + + public QuestionBasedStatementSelector(Set<String> questionWords){ + this.questionWords = questionWords; + metric = new QGramsDistance(); + + } + + @Override + public boolean test(Statement s) { + String predicate = s.getPredicate().getURI().substring(s.getPredicate().getURI().lastIndexOf("/")); + String object = null; + if(s.getObject().isURIResource()){ + object = s.getObject().asResource().getURI(); + object = object.substring(object.lastIndexOf("/")+1); + } else if(s.getObject().isLiteral()){ + object = s.getObject().asLiteral().getLexicalForm(); + } + if(isSimiliar2QuestionWord(object) || isSimiliar2QuestionWord(predicate)){ + return true; + } + + return false; + } + + private boolean isSimiliar2QuestionWord(String s){ + for(String word : questionWords){ + if(areSimiliar(word, s)){ + return true; + } + } + return false; + } + + private boolean areSimiliar(String s1, String s2){//cnt++;System.out.println(cnt); + float sim = metric.getSimilarity(s1, s2); + return sim >= threshold; + } + + @Override + public boolean isSimple() { + return false; + } + + @Override + public Resource getSubject() { + return null; + } + + @Override + public Property getPredicate() { + return null; + } + + @Override + public RDFNode getObject() { + return null; + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |