From: <jen...@us...> - 2009-01-18 16:41:39
|
Revision: 1579 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1579&view=rev Author: jenslehmann Date: 2009-01-18 16:41:36 +0000 (Sun, 18 Jan 2009) Log Message: ----------- comparator for EL description edges Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/refinementoperators/ELDown2.java trunk/src/dl-learner/org/dllearner/test/junit/ELDownTests.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/algorithms/el/ELDescriptionEdgeComparator.java Added: trunk/src/dl-learner/org/dllearner/algorithms/el/ELDescriptionEdgeComparator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/algorithms/el/ELDescriptionEdgeComparator.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/algorithms/el/ELDescriptionEdgeComparator.java 2009-01-18 16:41:36 UTC (rev 1579) @@ -0,0 +1,47 @@ +/** + * Copyright (C) 2007-2009, Jens Lehmann + * + * This file is part of DL-Learner. + * + * DL-Learner is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * DL-Learner is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +package org.dllearner.algorithms.el; + +import java.util.Comparator; + +/** + * @author Jens Lehmann + * + */ +public class ELDescriptionEdgeComparator implements Comparator<ELDescriptionEdge> { + + private ELDescriptionNodeComparator nodeComp; + + public ELDescriptionEdgeComparator() { + nodeComp = new ELDescriptionNodeComparator(); + } + + @Override + public int compare(ELDescriptionEdge edge1, ELDescriptionEdge edge2) { + // perform string comparison on node labels + int comp = edge1.getLabel().compareTo(edge2.getLabel()); + if(comp==0) { + return nodeComp.compare(edge1.getNode(), edge2.getNode()); + } else { + return comp; + } + } + +} Modified: trunk/src/dl-learner/org/dllearner/refinementoperators/ELDown2.java =================================================================== --- trunk/src/dl-learner/org/dllearner/refinementoperators/ELDown2.java 2009-01-17 18:27:07 UTC (rev 1578) +++ trunk/src/dl-learner/org/dllearner/refinementoperators/ELDown2.java 2009-01-18 16:41:36 UTC (rev 1579) @@ -35,6 +35,7 @@ import org.apache.log4j.Logger; import org.dllearner.algorithms.el.ELDescriptionEdge; +import org.dllearner.algorithms.el.ELDescriptionEdgeComparator; import org.dllearner.algorithms.el.ELDescriptionNode; import org.dllearner.algorithms.el.ELDescriptionTree; import org.dllearner.core.ReasonerComponent; @@ -93,6 +94,9 @@ // utility class private Utility utility; + // comparators + ELDescriptionEdgeComparator edgeComp = new ELDescriptionEdgeComparator(); + public ELDown2(ReasonerComponent rs) { this.rs = rs; subsumptionHierarchy = rs.getClassHierarchy(); @@ -266,10 +270,12 @@ // loop through most general roles for(ObjectProperty op : mgr) { -// logger.trace("pick most general role: " + op); + logger.trace("pick most general role: " + op); // a list of subtrees (stored as edges i.e. role + root node which points to tree) - LinkedList<ELDescriptionEdge> m = new LinkedList<ELDescriptionEdge>(); +// LinkedList<ELDescriptionEdge> m = new LinkedList<ELDescriptionEdge>(); + // we must store m as set, otherwise we get duplicates + TreeSet<ELDescriptionEdge> m = new TreeSet<ELDescriptionEdge>(edgeComp); // create tree corresponding to top node ELDescriptionTree topTree = new ELDescriptionTree(rs, Thing.instance); @@ -281,7 +287,7 @@ while(!m.isEmpty()) { // pick and remove first element ELDescriptionEdge edge = m.pollFirst(); -// logger.trace("picked first element of M: " + edge); + logger.trace("picked first element of M: " + edge); ObjectProperty r = edge.getLabel(); // tp = t' in algorithm description (p stands for prime) ELDescriptionTree tp = edge.getNode().getTree(); @@ -296,20 +302,20 @@ ELDescriptionNode wClone = mergedTree.getNode(wPosition); -// logger.trace("merged to t_{C'}: \n" + mergedTree); + logger.trace("merged to t_{C'}: \n" + mergedTree); // we check equivalence by a minimality test (TODO: can we still do this?) boolean minimal = mergedTree.isMinimal(); MonitorFactory.add("as.minimal", "boolean", minimal ? 1 : 0); if(minimal) { -// logger.trace("Merged tree is minimal, i.e. not equivalent."); + logger.trace("Merged tree is minimal, i.e. not equivalent."); // it is not equivalent, i.e. we found a refinement refinements.add(mergedTree); } else { -// logger.trace("Merged tree is not minimal, i.e. equivalent."); + logger.trace("Merged tree is not minimal, i.e. equivalent."); // perform complex check in merged tree boolean check = asCheck(wClone); -// logger.trace("Result of complex check: " + check); + logger.trace("Result of complex check: " + check); MonitorFactory.add("as.check", "boolean", check ? 1 : 0); if(check) { @@ -318,19 +324,19 @@ m.add(new ELDescriptionEdge(subRole, tp.getRootNode())); } // refine tree using recursive operator call -// logger.trace("Recursive Call"); + logger.trace("Recursive Call"); // do not monitor recursive calls (counts time twice or more) mon.stop(); List<ELDescriptionTree> recRefs = refine(tp); mon.start(); -// logger.trace("Recursive Call Done"); + logger.trace("Recursive Call Done"); for(ELDescriptionTree tpp : recRefs) { m.add(new ELDescriptionEdge(r, tpp.getRootNode())); } } } -// logger.trace("M: " + m); + logger.trace("M: " + m); } } mon.stop(); Modified: trunk/src/dl-learner/org/dllearner/test/junit/ELDownTests.java =================================================================== --- trunk/src/dl-learner/org/dllearner/test/junit/ELDownTests.java 2009-01-17 18:27:07 UTC (rev 1578) +++ trunk/src/dl-learner/org/dllearner/test/junit/ELDownTests.java 2009-01-18 16:41:36 UTC (rev 1579) @@ -75,10 +75,11 @@ * @throws ParseException Thrown if concept syntax does not correspond * to current KB syntax. * @throws ComponentInitException + * @throws IOException */ @Test - public void test1() throws ParseException, ComponentInitException { - System.out.println("TEST 1"); + public void test1() throws ParseException, ComponentInitException, IOException { + System.out.println("TEST 1"); ReasonerComponent rs = TestOntologies.getTestOntology(TestOntology.SIMPLE); // input description @@ -112,6 +113,13 @@ System.out.println("desired: " + tmp.toString(KBParser.internalNamespace, null)); } + Logger logger = Logger.getRootLogger(); + logger.setLevel(Level.TRACE); + SimpleLayout layout = new SimpleLayout(); + FileAppender app = new FileAppender(layout, "log/el/test.txt", false); + logger.removeAllAppenders(); + logger.addAppender(app); + // perform refinement and compare solutions long startTime = System.nanoTime(); Set<Description> refinements = operator.refine(input); @@ -159,13 +167,7 @@ @Test public void test2() throws ParseException, IOException { - System.out.println("TEST 2"); -// Logger logger = Logger.getRootLogger(); -// logger.setLevel(Level.TRACE); -// SimpleLayout layout = new SimpleLayout(); -// FileAppender app = new FileAppender(layout, "log/el/log.txt", false); -// logger.removeAllAppenders(); -// logger.addAppender(app); + System.out.println("TEST 2"); ReasonerComponent rs = TestOntologies.getTestOntology(TestOntology.SIMPLE_NO_DR); @@ -180,6 +182,12 @@ desiredString.add("(human AND (EXISTS hasPet.bird AND EXISTS hasPet.cat))"); desiredString.add("(human AND (EXISTS hasPet.bird AND EXISTS hasPet.EXISTS has.TOP))"); desiredString.add("(human AND (EXISTS hasPet.bird AND EXISTS hasChild.TOP))"); + desiredString.add("(human AND (EXISTS hasPet.bird AND EXISTS hasPet.human))"); + desiredString.add("(human AND (EXISTS hasPet.bird AND EXISTS hasPet.(animal AND EXISTS has.TOP)))"); + desiredString.add("(human AND EXISTS hasPet.(bird AND cat))"); + desiredString.add("(human AND (EXISTS has.(animal AND EXISTS has.TOP) AND EXISTS hasPet.bird))"); + desiredString.add("(human AND (EXISTS has.(bird AND EXISTS has.TOP) AND EXISTS hasPet.bird))"); + desiredString.add("(human AND EXISTS hasPet.(bird AND EXISTS has.TOP))"); ConceptComparator cc = new ConceptComparator(); SortedSet<Description> desired = new TreeSet<Description>(cc); @@ -191,6 +199,13 @@ System.out.println("desired: " + tmp.toString(KBParser.internalNamespace, null)); } + Logger logger = Logger.getRootLogger(); + logger.setLevel(Level.TRACE); + SimpleLayout layout = new SimpleLayout(); + FileAppender app = new FileAppender(layout, "log/el/test_no_dr.txt", false); + logger.removeAllAppenders(); + logger.addAppender(app); + RefinementOperator operator = new ELDown2(rs); Set<Description> refinements = operator.refine(input); @@ -208,6 +223,7 @@ @Test public void test3() throws ParseException, IOException { System.out.println("TEST 3"); + ReasonerComponent rs = TestOntologies.getTestOntology(TestOntology.SIMPLE_NO_DISJOINT); // input description @@ -223,7 +239,7 @@ desiredString.add("(human AND (EXISTS hasChild.human AND (EXISTS has.TOP AND EXISTS has.animal)))"); desiredString.add("(human AND (EXISTS hasChild.human AND EXISTS has.(animal AND EXISTS has.TOP)))"); desiredString.add("(human AND (EXISTS hasChild.human AND (EXISTS has.animal AND EXISTS has.EXISTS has.TOP)))"); - + ConceptComparator cc = new ConceptComparator(); SortedSet<Description> desired = new TreeSet<Description>(cc); for(String str : desiredString) { @@ -234,6 +250,13 @@ System.out.println("desired: " + tmp.toString(KBParser.internalNamespace, null)); } + Logger logger = Logger.getRootLogger(); + logger.setLevel(Level.TRACE); + SimpleLayout layout = new SimpleLayout(); + FileAppender app = new FileAppender(layout, "log/el/test_no_disjoint.txt", false); + logger.removeAllAppenders(); + logger.addAppender(app); + RefinementOperator operator = new ELDown2(rs); Set<Description> refinements = operator.refine(input); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |