From: <lor...@us...> - 2013-05-02 08:43:10
|
Revision: 3932 http://sourceforge.net/p/dl-learner/code/3932 Author: lorenz_b Date: 2013-05-02 08:43:07 +0000 (Thu, 02 May 2013) Log Message: ----------- Added noise aware LGG generator. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/EvaluatedQueryTree.java trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/NoiseSensitiveLGG.java Added: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/EvaluatedQueryTree.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/EvaluatedQueryTree.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/EvaluatedQueryTree.java 2013-05-02 08:43:07 UTC (rev 3932) @@ -0,0 +1,42 @@ +package org.dllearner.algorithms.qtl.operations.lgg; + +import java.util.Collection; + +import org.dllearner.algorithms.qtl.datastructures.QueryTree; + +public class EvaluatedQueryTree<N> implements Comparable<EvaluatedQueryTree<N>>{ + + private QueryTree<N> tree; + private Collection<QueryTree<N>> uncoveredExamples; + private double score; + + public EvaluatedQueryTree(QueryTree<N> tree, Collection<QueryTree<N>> uncoveredExamples, double score) { + this.tree = tree; + this.uncoveredExamples = uncoveredExamples; + this.score = score; + } + + public QueryTree<N> getTree() { + return tree; + } + + public Collection<QueryTree<N>> getUncoveredExamples() { + return uncoveredExamples; + } + + public double getScore() { + return score; + } + + @Override + public int compareTo(EvaluatedQueryTree<N> other) { + double diff = score - other.getScore(); + if(diff == 0){ + return -1; + } else if(diff > 0){ + return -1; + } else { + return 1; + } + } +} \ No newline at end of file Added: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/NoiseSensitiveLGG.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/NoiseSensitiveLGG.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/operations/lgg/NoiseSensitiveLGG.java 2013-05-02 08:43:07 UTC (rev 3932) @@ -0,0 +1,111 @@ +package org.dllearner.algorithms.qtl.operations.lgg; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.PriorityQueue; +import java.util.Queue; +import java.util.SortedSet; +import java.util.TreeSet; + +import org.dllearner.algorithms.qtl.datastructures.QueryTree; + +public class NoiseSensitiveLGG<N> { + + private LGGGenerator<N> lggGenerator = new LGGGeneratorImpl<N>(); + + private Queue<EvaluatedQueryTree<N>> todoList; + private SortedSet<EvaluatedQueryTree<N>> solutions; + + public NoiseSensitiveLGG() { + } + + public List<EvaluatedQueryTree<N>> computeLGG(List<QueryTree<N>> trees){ + init(trees); + EvaluatedQueryTree<N> currentElement; + do{ + //pick best element from todo list + currentElement = todoList.poll(); + for (QueryTree<N> example : currentElement.getUncoveredExamples()) { + QueryTree<N> tree = currentElement.getTree(); + //compute the LGG + QueryTree<N> lgg = lggGenerator.getLGG(tree, example); + //compute examples which are not covered by LGG + Collection<QueryTree<N>> uncoveredExamples = new HashSet<QueryTree<N>>(); + for (QueryTree<N> queryTree : trees) { + boolean subsumed = queryTree.isSubsumedBy(lgg); + if(!subsumed){ + uncoveredExamples.add(queryTree); + } + } + //compute score + double score = (trees.size() - uncoveredExamples.size()) / (double)trees.size(); + //add to todo list, if not already contained in todo list or solution list + EvaluatedQueryTree<N> solution = new EvaluatedQueryTree<N>(lgg, uncoveredExamples, score); + todo(solution); + } + solutions.add(currentElement); +// todoList.remove(currentElement); + } while(!terminationCriteriaSatisfied()); + return new ArrayList<EvaluatedQueryTree<N>>(solutions); + } + + private void init(List<QueryTree<N>> trees){ + todoList = new PriorityQueue<EvaluatedQueryTree<N>>(); + solutions = new TreeSet<EvaluatedQueryTree<N>>(); +// EvaluatedQueryTree<N> dummy = new EvaluatedQueryTree<N>(new QueryTreeImpl<N>((N)"TOP"), trees, 0d); +// todoList.add(dummy); + //compute distinct trees + Collection<QueryTree<N>> distinctTrees = new HashSet<QueryTree<N>>(); + for (QueryTree<N> queryTree : trees) { + boolean distinct = true; + for (QueryTree<N> otherTree : distinctTrees) { + if(queryTree.isSubsumedBy(otherTree)){ + distinct = false; + break; + } + } + if(distinct){ + distinctTrees.add(queryTree); + } + } + for (QueryTree<N> queryTree : distinctTrees) { + Collection<QueryTree<N>> uncoveredExamples = new HashSet<QueryTree<N>>(distinctTrees); + uncoveredExamples.remove(queryTree); + double score = (trees.size() - uncoveredExamples.size()) / (double)trees.size(); + todoList.add(new EvaluatedQueryTree<N>(queryTree, uncoveredExamples, score)); + } + } + + /** + * Add tree to todo list if not already contained in that list or the solutions. + * @param solution + */ + private void todo(EvaluatedQueryTree<N> solution){ + //check if not already contained in todo list + for (EvaluatedQueryTree<N> evTree : todoList) { + if(sameTrees(solution.getTree(), evTree.getTree())){ + return; + } + } + //check if not already contained in solutions + for (EvaluatedQueryTree<N> evTree : solutions) { + if(sameTrees(solution.getTree(), evTree.getTree())){ + return; + } + } + todoList.add(solution); + } + + private boolean sameTrees(QueryTree<N> tree1, QueryTree<N> tree2){ + return tree1.isSubsumedBy(tree2) && tree2.isSubsumedBy(tree1); + } + + private boolean terminationCriteriaSatisfied(){ + return todoList.isEmpty(); + } + + + +} Modified: trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java 2013-05-02 07:35:58 UTC (rev 3931) +++ trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLClassExpressionToSPARQLConverter.java 2013-05-02 08:43:07 UTC (rev 3932) @@ -119,7 +119,7 @@ String var = variablesMapping.get(owlEntity); queryString += var; } - }System.out.println(queryString); + } return QueryFactory.create(queryString, Syntax.syntaxARQ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |