From: <jen...@us...> - 2008-02-21 16:25:57
|
Revision: 620 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=620&view=rev Author: jenslehmann Date: 2008-02-21 08:25:48 -0800 (Thu, 21 Feb 2008) Log Message: ----------- instance check code preparation Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/core/owl/FlatABox.java trunk/src/dl-learner/org/dllearner/reasoning/FastInstanceChecker.java trunk/src/dl-learner/org/dllearner/utilities/Helper.java Modified: trunk/src/dl-learner/org/dllearner/core/owl/FlatABox.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/owl/FlatABox.java 2008-02-21 16:21:05 UTC (rev 619) +++ trunk/src/dl-learner/org/dllearner/core/owl/FlatABox.java 2008-02-21 16:25:48 UTC (rev 620) @@ -1,3 +1,22 @@ +/** + * Copyright (C) 2007, 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.core.owl; import java.util.HashMap; @@ -6,28 +25,18 @@ import java.util.TreeSet; /** - * TODO: Später mal eine Singleton-Klasse daraus machen und get-und set-Methoden - * für alle Klassenvariablen. - * TODO: Diese Klasse soll später mal alles geparstes DL-Wissen enthalten. Es muss - * also irgendwie die "geparste ABox" (für eigenen Algorithmus) und das unveränderte - * Wissen enthalten (für KAON2). Eventuell ist auch eine Trennung in 2 Klassen möglich. + * A flat ABox can be used to store knowledge of a completely dematerialised knowledge base. * - * TODO: Singleton wieder rueckgaengig machen, da FlatABox nur noch - * Mittel zum Zweck fuer die neue abstrakte Reasoner-Klasse ist - * * @author Jens Lehmann * */ public class FlatABox { - - // singleton-instance - // private static FlatABox singleton = new FlatABox(); public SortedSet<String> roles = new TreeSet<String>(); public SortedSet<String> concepts = new TreeSet<String>(); public SortedSet<String> domain = new TreeSet<String>(); public SortedSet<String> top = new TreeSet<String>(); - public SortedSet<String> bottom = new TreeSet<String>(); + public SortedSet<String> bottom = new TreeSet<String>(); public Map<String,SortedSet<String>> atomicConceptsPos = new HashMap<String,SortedSet<String>>(); public Map<String,SortedSet<String>> atomicConceptsNeg = new HashMap<String,SortedSet<String>>(); @@ -37,29 +46,10 @@ public Map<String,SortedSet<String>> exampleConceptsPos = new HashMap<String,SortedSet<String>>(); public Map<String,SortedSet<String>> exampleConceptsNeg = new HashMap<String,SortedSet<String>>(); - // f�r bessere GP-Initialisierungs-Performance - private Object[] roleArray; - private Object[] conceptArray; - public FlatABox() { } - /* - public static FlatABox getInstance() { - return singleton; - } - */ - - // ABox vorbereiten f�r Algorithmus, hier wird nur eine Listenansicht auf - // Konzepte und Rollen erstellt, damit diese bei der GP-Initialisierung - // verwendet werden kann (es ist ansonsten nicht m�glich auf ein zuf�lliges - // Konzept zuzugreifen) - public void prepare() { - roleArray = roles.toArray(); - conceptArray = concepts.toArray(); - } - public SortedSet<String> getPositiveInstances(String conceptName) { return atomicConceptsPos.get(conceptName); } @@ -68,14 +58,6 @@ return atomicConceptsPos.get(conceptName); } - public String getConcept(int nr) { - return (String) conceptArray[nr]; - } - - public String getRole(int nr) { - return (String) roleArray[nr]; - } - @Override public String toString() { String output = ""; @@ -95,42 +77,41 @@ return (String) exampleConceptsPos.keySet().toArray()[0]; } - /* - public void createExampleABox() { - domain = new TreeSet<String>(); - domain.add("stefan"); - domain.add("markus"); - - top = domain; - bottom = new TreeSet<String>(); - - atomicConceptsPos = new HashMap<String,Set<String>>(); - Set<String> male = new TreeSet<String>(); - male.add("stefan"); - male.add("markus"); - atomicConceptsPos.put("male",male); - - atomicConceptsNeg = new HashMap<String,Set<String>>(); - Set<String> maleNeg = new TreeSet<String>(); - atomicConceptsNeg.put("male",maleNeg); - - rolesPos = new HashMap<String,Map<String,Set<String>>>(); - Map<String,Set<String>> hasChild = new HashMap<String,Set<String>>(); - Set<String> childsStefan = new TreeSet<String>(); - childsStefan.add("markus"); - hasChild.put("stefan",childsStefan); - Set<String> childsMarkus = new TreeSet<String>(); - hasChild.put("markus", childsMarkus); - rolesPos.put("hasChild", hasChild); - - rolesNeg = new HashMap<String,Map<String,Set<String>>>(); - Map<String,Set<String>> hasChildNeg = new HashMap<String,Set<String>>(); - Set<String> childsStefanNeg = new TreeSet<String>(); - hasChildNeg.put("stefan",childsStefanNeg); - Set<String> childsMarkusNeg = new TreeSet<String>(); - hasChildNeg.put("markus", childsMarkusNeg); - rolesNeg.put("hasChild", hasChildNeg); - } - */ +// public void createExampleABox() { +// domain = new TreeSet<String>(); +// domain.add("stefan"); +// domain.add("markus"); +// +// top = domain; +// bottom = new TreeSet<String>(); +// +// atomicConceptsPos = new HashMap<String,Set<String>>(); +// Set<String> male = new TreeSet<String>(); +// male.add("stefan"); +// male.add("markus"); +// atomicConceptsPos.put("male",male); +// +// atomicConceptsNeg = new HashMap<String,Set<String>>(); +// Set<String> maleNeg = new TreeSet<String>(); +// atomicConceptsNeg.put("male",maleNeg); +// +// rolesPos = new HashMap<String,Map<String,Set<String>>>(); +// Map<String,Set<String>> hasChild = new HashMap<String,Set<String>>(); +// Set<String> childsStefan = new TreeSet<String>(); +// childsStefan.add("markus"); +// hasChild.put("stefan",childsStefan); +// Set<String> childsMarkus = new TreeSet<String>(); +// hasChild.put("markus", childsMarkus); +// rolesPos.put("hasChild", hasChild); +// +// rolesNeg = new HashMap<String,Map<String,Set<String>>>(); +// Map<String,Set<String>> hasChildNeg = new HashMap<String,Set<String>>(); +// Set<String> childsStefanNeg = new TreeSet<String>(); +// hasChildNeg.put("stefan",childsStefanNeg); +// Set<String> childsMarkusNeg = new TreeSet<String>(); +// hasChildNeg.put("markus", childsMarkusNeg); +// rolesNeg.put("hasChild", hasChildNeg); +// } + } Modified: trunk/src/dl-learner/org/dllearner/reasoning/FastInstanceChecker.java =================================================================== --- trunk/src/dl-learner/org/dllearner/reasoning/FastInstanceChecker.java 2008-02-21 16:21:05 UTC (rev 619) +++ trunk/src/dl-learner/org/dllearner/reasoning/FastInstanceChecker.java 2008-02-21 16:25:48 UTC (rev 620) @@ -19,23 +19,90 @@ */ package org.dllearner.reasoning; +import java.util.HashMap; +import java.util.Map; import java.util.Set; import java.util.SortedSet; import org.dllearner.core.ComponentInitException; +import org.dllearner.core.KnowledgeSource; import org.dllearner.core.ReasonerComponent; +import org.dllearner.core.ReasoningService; import org.dllearner.core.config.ConfigEntry; import org.dllearner.core.config.InvalidConfigOptionValueException; +import org.dllearner.core.owl.FlatABox; import org.dllearner.core.owl.Individual; import org.dllearner.core.owl.NamedClass; import org.dllearner.core.owl.ObjectProperty; /** + * Reasoner for fast instance checks. It works by completely dematerialising the knowledge + * base to speed up later reasoning requests. It + * * @author Jens Lehmann * */ public class FastInstanceChecker extends ReasonerComponent { + private Set<NamedClass> atomicConcepts; + private Set<ObjectProperty> atomicRoles; + private SortedSet<Individual> individuals; + + private ReasoningService rs; + private ReasonerComponent rc; + + // instances of classes + public Map<NamedClass,SortedSet<Individual>> classInstancesPos = new HashMap<NamedClass,SortedSet<Individual>>(); + public Map<NamedClass,SortedSet<Individual>> classInstancesNeg = new HashMap<NamedClass,SortedSet<Individual>>(); + + // object property mappings + public Map<ObjectProperty,Map<Individual,SortedSet<Individual>>> opPos = new HashMap<ObjectProperty,Map<Individual,SortedSet<Individual>>>(); + public Map<ObjectProperty,Map<Individual,SortedSet<Individual>>> opNeg = new HashMap<ObjectProperty,Map<Individual,SortedSet<Individual>>>(); + + // TODO: datatype properties + + public FastInstanceChecker(Set<KnowledgeSource> sources) { + rc = new OWLAPIReasoner(sources); + try { + rc.init(); + } catch (ComponentInitException e1) { + e1.printStackTrace(); + } + atomicConcepts = rc.getAtomicConcepts(); + atomicRoles = rc.getAtomicRoles(); + individuals = rc.getIndividuals(); + rs = new ReasoningService(rc); + + // TODO: some code taken from Helper.createFlatABox, but pasted here because additional things need to + // be done (maybe this can be merge again with the FastRetrievalReasoner later) + long dematStartTime = System.currentTimeMillis(); + + FlatABox aBox = new FlatABox(); + for (NamedClass atomicConcept : rs.getAtomicConcepts()) { + // aBox.atomicConceptsPos.put(atomicConcept.getName(), getStringSet(rs + // .retrieval(atomicConcept))); +// Negation negatedAtomicConcept = new Negation(atomicConcept); + // aBox.atomicConceptsNeg.put(atomicConcept.getName(), getStringSet(rs + // .retrieval(negatedAtomicConcept))); + aBox.concepts.add(atomicConcept.getName()); + } + + for (ObjectProperty atomicRole : rs.getAtomicRoles()) { + // aBox.rolesPos.put(atomicRole.getName(), getStringMap(rs.getRoleMembers(atomicRole))); + aBox.roles.add(atomicRole.getName()); + } + + // aBox.domain = getStringSet(rs.getIndividuals()); + // aBox.top = aBox.domain; + + // System.out.println(aBox); + + long dematDuration = System.currentTimeMillis() - dematStartTime; + System.out.println("OK (" + dematDuration + " ms)"); + + } + + /* (non-Javadoc) * @see org.dllearner.core.Component#applyConfigEntry(org.dllearner.core.config.ConfigEntry) */ @@ -58,24 +125,21 @@ * @see org.dllearner.core.Reasoner#getAtomicConcepts() */ public Set<NamedClass> getAtomicConcepts() { - // TODO Auto-generated method stub - return null; + return atomicConcepts; } /* (non-Javadoc) * @see org.dllearner.core.Reasoner#getAtomicRoles() */ public Set<ObjectProperty> getAtomicRoles() { - // TODO Auto-generated method stub - return null; + return atomicRoles; } /* (non-Javadoc) * @see org.dllearner.core.Reasoner#getIndividuals() */ public SortedSet<Individual> getIndividuals() { - // TODO Auto-generated method stub - return null; + return individuals; } /* (non-Javadoc) Modified: trunk/src/dl-learner/org/dllearner/utilities/Helper.java =================================================================== --- trunk/src/dl-learner/org/dllearner/utilities/Helper.java 2008-02-21 16:21:05 UTC (rev 619) +++ trunk/src/dl-learner/org/dllearner/utilities/Helper.java 2008-02-21 16:25:48 UTC (rev 620) @@ -539,8 +539,6 @@ aBox.domain = getStringSet(rs.getIndividuals()); aBox.top = aBox.domain; - // ab hier keine �nderungen mehr an FlatABox - aBox.prepare(); // System.out.println(aBox); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |