From: <jen...@us...> - 2009-05-05 10:02:00
|
Revision: 1733 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1733&view=rev Author: jenslehmann Date: 2009-05-05 10:01:50 +0000 (Tue, 05 May 2009) Log Message: ----------- implemented changes suggested by Francesca Lisi Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/core/configurators/ClassLearningProblemConfigurator.java trunk/src/dl-learner/org/dllearner/core/configurators/ComponentFactory.java trunk/src/dl-learner/org/dllearner/core/configurators/FastInstanceCheckerConfigurator.java trunk/src/dl-learner/org/dllearner/core/options/URLConfigOption.java trunk/src/dl-learner/org/dllearner/core/owl/NamedClass.java trunk/src/dl-learner/org/dllearner/gui/StartGUI.java trunk/src/dl-learner/org/dllearner/gui/StatusPanel.java trunk/src/dl-learner/org/dllearner/gui/TutorialWindow.java trunk/src/dl-learner/org/dllearner/gui/tutorial.html trunk/src/dl-learner/org/dllearner/gui/widgets/WidgetPanelURL.java trunk/src/dl-learner/org/dllearner/learningproblems/ClassLearningProblem.java trunk/src/dl-learner/org/dllearner/reasoning/FastInstanceChecker.java Modified: trunk/src/dl-learner/org/dllearner/core/configurators/ClassLearningProblemConfigurator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/configurators/ClassLearningProblemConfigurator.java 2009-05-04 13:47:49 UTC (rev 1732) +++ trunk/src/dl-learner/org/dllearner/core/configurators/ClassLearningProblemConfigurator.java 2009-05-05 10:01:50 UTC (rev 1733) @@ -20,6 +20,7 @@ package org.dllearner.core.configurators; +import java.net.URL; import org.dllearner.core.ComponentManager; import org.dllearner.core.ReasonerComponent; import org.dllearner.learningproblems.ClassLearningProblem; @@ -47,7 +48,7 @@ * @param classToDescribe class of which a description should be learned * @return ClassLearningProblem **/ -public static ClassLearningProblem getClassLearningProblem(ReasonerComponent reasoningService, String classToDescribe) { +public static ClassLearningProblem getClassLearningProblem(ReasonerComponent reasoningService, URL classToDescribe) { ClassLearningProblem component = ComponentManager.getInstance().learningProblem(ClassLearningProblem.class, reasoningService); ComponentManager.getInstance().applyConfigEntry(component, "classToDescribe", classToDescribe); return component; @@ -57,13 +58,13 @@ * classToDescribe class of which a description should be learned. * mandatory: true| reinit necessary: false * default value: null -* @return String +* @return URL **/ -public String getClassToDescribe() { -return (String) ComponentManager.getInstance().getConfigOptionValue(classLearningProblem, "classToDescribe") ; +public URL getClassToDescribe() { +return (URL) ComponentManager.getInstance().getConfigOptionValue(classLearningProblem, "classToDescribe") ; } /** -* type Whether to learn an equivalence class or super class axiom or domain/range of a property.. +* type whether to learn an equivalence class or super class axiom. * mandatory: false| reinit necessary: true * default value: equivalence * @return String @@ -77,11 +78,11 @@ * mandatory: true| reinit necessary: false * default value: null **/ -public void setClassToDescribe(String classToDescribe) { +public void setClassToDescribe(URL classToDescribe) { ComponentManager.getInstance().applyConfigEntry(classLearningProblem, "classToDescribe", classToDescribe); } /** -* @param type Whether to learn an equivalence class or super class axiom or domain/range of a property.. +* @param type whether to learn an equivalence class or super class axiom. * mandatory: false| reinit necessary: true * default value: equivalence **/ Modified: trunk/src/dl-learner/org/dllearner/core/configurators/ComponentFactory.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/configurators/ComponentFactory.java 2009-05-04 13:47:49 UTC (rev 1732) +++ trunk/src/dl-learner/org/dllearner/core/configurators/ComponentFactory.java 2009-05-05 10:01:50 UTC (rev 1733) @@ -122,7 +122,7 @@ * @param reasoningService see ReasoningService * @return a component ready for initialization ClassLearningProblem **/ -public static ClassLearningProblem getClassLearningProblem(ReasonerComponent reasoningService, String classToDescribe) { +public static ClassLearningProblem getClassLearningProblem(ReasonerComponent reasoningService, URL classToDescribe) { return ClassLearningProblemConfigurator.getClassLearningProblem(reasoningService, classToDescribe); } Modified: trunk/src/dl-learner/org/dllearner/core/configurators/FastInstanceCheckerConfigurator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/configurators/FastInstanceCheckerConfigurator.java 2009-05-04 13:47:49 UTC (rev 1732) +++ trunk/src/dl-learner/org/dllearner/core/configurators/FastInstanceCheckerConfigurator.java 2009-05-05 10:01:50 UTC (rev 1733) @@ -70,15 +70,6 @@ public boolean getDefaultNegation() { return (Boolean) ComponentManager.getInstance().getConfigOptionValue(fastInstanceChecker, "defaultNegation") ; } -/** -* forallRetrievalSemantics This option controls how to interpret the all quantifier in orall r.C. The standard option isto return all those which do not have an r-filler not in C. The domain semantics is to use thosewhich are in the domain of r and do not have an r-filler not in C. The forallExists semantics is touse those which have at least one r-filler and do not have an r-filler not in C.. -* mandatory: false| reinit necessary: true -* default value: standard -* @return String -**/ -public String getForallRetrievalSemantics() { -return (String) ComponentManager.getInstance().getConfigOptionValue(fastInstanceChecker, "forallRetrievalSemantics") ; -} /** * @param reasonerType FaCT++ or Pellet to dematerialize. @@ -98,15 +89,6 @@ ComponentManager.getInstance().applyConfigEntry(fastInstanceChecker, "defaultNegation", defaultNegation); reinitNecessary = true; } -/** -* @param forallRetrievalSemantics This option controls how to interpret the all quantifier in orall r.C. The standard option isto return all those which do not have an r-filler not in C. The domain semantics is to use thosewhich are in the domain of r and do not have an r-filler not in C. The forallExists semantics is touse those which have at least one r-filler and do not have an r-filler not in C.. -* mandatory: false| reinit necessary: true -* default value: standard -**/ -public void setForallRetrievalSemantics(String forallRetrievalSemantics) { -ComponentManager.getInstance().applyConfigEntry(fastInstanceChecker, "forallRetrievalSemantics", forallRetrievalSemantics); -reinitNecessary = true; -} /** * true, if this component needs reinitializsation. Modified: trunk/src/dl-learner/org/dllearner/core/options/URLConfigOption.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/options/URLConfigOption.java 2009-05-04 13:47:49 UTC (rev 1732) +++ trunk/src/dl-learner/org/dllearner/core/options/URLConfigOption.java 2009-05-05 10:01:50 UTC (rev 1733) @@ -33,6 +33,8 @@ private boolean refersToFile = false; + private boolean refersToOWLClass = false; + public URLConfigOption(String name, String description) { super(name, description); } @@ -64,6 +66,23 @@ this.refersToFile = refersToFile; } + /** + * Returns whether the URI can refer to a class in a loaded + * ontology. This can be used in user interfaces for this component. + * @return the refersToOWLClass Whether it refers to an OWL class. + */ + public boolean refersToOWLClass() { + return refersToOWLClass; + } + + /** + * @param refersToFile Set whether this option refers to an OWL class in the + * loaded ontology. + */ + public void setRefersToOWLClass(boolean refersToOWLClass) { + this.refersToOWLClass = refersToOWLClass; + } + /* (non-Javadoc) * @see org.dllearner.core.config.ConfigOption#checkType(java.lang.Object) */ Modified: trunk/src/dl-learner/org/dllearner/core/owl/NamedClass.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/owl/NamedClass.java 2009-05-04 13:47:49 UTC (rev 1732) +++ trunk/src/dl-learner/org/dllearner/core/owl/NamedClass.java 2009-05-05 10:01:50 UTC (rev 1733) @@ -19,6 +19,7 @@ */ package org.dllearner.core.owl; +import java.net.URI; import java.util.Map; import org.dllearner.utilities.Helper; @@ -38,6 +39,10 @@ this.name = name; } + public NamedClass(URI uri) { + this.name = uri.toString(); + } + public String getName() { return name; } Modified: trunk/src/dl-learner/org/dllearner/gui/StartGUI.java =================================================================== --- trunk/src/dl-learner/org/dllearner/gui/StartGUI.java 2009-05-04 13:47:49 UTC (rev 1732) +++ trunk/src/dl-learner/org/dllearner/gui/StartGUI.java 2009-05-05 10:01:50 UTC (rev 1733) @@ -46,6 +46,7 @@ import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.SimpleLayout; +import org.dllearner.algorithms.el.ELLearningAlgorithm; import org.dllearner.algorithms.refinement2.ROLComponent2; import org.dllearner.core.Component; import org.dllearner.core.KnowledgeSource; @@ -55,7 +56,9 @@ import org.dllearner.kb.OWLAPIOntology; import org.dllearner.kb.OWLFile; import org.dllearner.learningproblems.PosNegLPStandard; +import org.dllearner.learningproblems.PosNegLPStrict; import org.dllearner.reasoning.FastInstanceChecker; +import org.dllearner.reasoning.FastRetrievalReasoner; /** * This class builds the basic GUI elements and is used to start the DL-Learner @@ -127,9 +130,15 @@ List<Class<? extends Component>> ignoredKnowledgeSources = new LinkedList<Class<? extends Component>>(); ignoredKnowledgeSources.add(OWLAPIOntology.class); panels[0] = new ComponentPanel(config, this, KnowledgeSource.class, OWLFile.class, ignoredKnowledgeSources); - panels[1] = new ComponentPanel(config, this, ReasonerComponent.class, FastInstanceChecker.class); - panels[2] = new ComponentPanel(config, this, LearningProblem.class, PosNegLPStandard.class); - panels[3] = new ComponentPanel(config, this, LearningAlgorithm.class, ROLComponent2.class); + List<Class<? extends Component>> ignoredReasoners = new LinkedList<Class<? extends Component>>(); + ignoredReasoners.add(FastRetrievalReasoner.class); + panels[1] = new ComponentPanel(config, this, ReasonerComponent.class, FastInstanceChecker.class, ignoredReasoners); + List<Class<? extends Component>> ignoredLearningProblems = new LinkedList<Class<? extends Component>>(); + ignoredLearningProblems.add(PosNegLPStrict.class); + panels[2] = new ComponentPanel(config, this, LearningProblem.class, PosNegLPStandard.class, ignoredLearningProblems); + List<Class<? extends Component>> ignoredAlgorithms = new LinkedList<Class<? extends Component>>(); + ignoredAlgorithms.add(ELLearningAlgorithm.class); + panels[3] = new ComponentPanel(config, this, LearningAlgorithm.class, ROLComponent2.class, ignoredAlgorithms); runPanel = new RunPanel(config, this); // add tabs for panels Modified: trunk/src/dl-learner/org/dllearner/gui/StatusPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/gui/StatusPanel.java 2009-05-04 13:47:49 UTC (rev 1732) +++ trunk/src/dl-learner/org/dllearner/gui/StatusPanel.java 2009-05-05 10:01:50 UTC (rev 1733) @@ -34,7 +34,7 @@ private static final long serialVersionUID = 2426470148153461670L; - private String tabInitText = "Please fill in the mandatory config options and proceed to the next tab."; + private String tabInitText = "<html>Please fill in the mandatory config options and proceed to the next tab.<br />(Move the mouse over an option name to view a short description of it.)</html>"; private String tabCompleteText = "All mandatory options filled in. You can continue to the next tab."; Modified: trunk/src/dl-learner/org/dllearner/gui/TutorialWindow.java =================================================================== --- trunk/src/dl-learner/org/dllearner/gui/TutorialWindow.java 2009-05-04 13:47:49 UTC (rev 1732) +++ trunk/src/dl-learner/org/dllearner/gui/TutorialWindow.java 2009-05-05 10:01:50 UTC (rev 1733) @@ -42,7 +42,7 @@ setTitle("Quick Tutorial"); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setLocationByPlatform(true); - setSize(300, 600); + setSize(525, 600); setVisible(true); getContentPane().setLayout(new BorderLayout()); Modified: trunk/src/dl-learner/org/dllearner/gui/tutorial.html =================================================================== --- trunk/src/dl-learner/org/dllearner/gui/tutorial.html 2009-05-04 13:47:49 UTC (rev 1732) +++ trunk/src/dl-learner/org/dllearner/gui/tutorial.html 2009-05-05 10:01:50 UTC (rev 1733) @@ -23,6 +23,27 @@ special role: It is used to start the learning algorithm and display statistical information. </p><br /> + +<p> +<i>Example:</i><br /> +Suppose you want to learn the definition of a class in an existing ontology. In this case, +you can proceed as follows:<br /> +1. In the tab "Knowledge Source", choose an OWL file containing your ontology.<br /> +2. Click on the tab "Reasoner". We recommend to the defaults unchanged here, but you + are free to modify the settings and choose the reasoner you like.<br /> +3. Click on the tab "Learning Problem". This may take a while, since the reasoner will now + read the ontology you specified in step 1. Since you want to learn the definition of a class, + use the drop down box and select "Class Learning Problem". After this, set the value of + the option "classToDescribe" to the desired class.<br /> +4. Click on the "Learning Algorithm" tab. Here, you can select a learning algorithm and + modify its settings. If you are unsure what to do, just stick with the default values.<br /> +5. Click on the "Run" tab and press the "Start" button. The algorithm is now running + and the currently best solutions found are displayed in the panel below (using Manchester + OWL Syntax) along with some reasoning statistics. Depending on the learning algorithm + and settings, the run may not terminate (in reasonable time). In such a case you can use + the "Stop" button to gracefully stop the algorithm.<br /> +For explanations of components in each step, please consult the DL-Learner manual. +</p><br /> <p> <i>Tab heads explanation:</i><br /> @@ -33,6 +54,7 @@ <p><i>Further references:</i><br /> Homepage: <a href="http://dl-learner.org">http://dl-learner.org</a><br /> +DL-Learner Manual: <a href="http://dl-learner.org/files/dl-learner-manual.pdf">http://dl-learner.org/files/dl-learner-manual.pdf</a><br /> DL-Learner Architecture: <a href="http://dl-learner.org/wiki/Architecture">http://dl-learner.org/wiki/Architecture</a> </p><br /> Modified: trunk/src/dl-learner/org/dllearner/gui/widgets/WidgetPanelURL.java =================================================================== --- trunk/src/dl-learner/org/dllearner/gui/widgets/WidgetPanelURL.java 2009-05-04 13:47:49 UTC (rev 1732) +++ trunk/src/dl-learner/org/dllearner/gui/widgets/WidgetPanelURL.java 2009-05-05 10:01:50 UTC (rev 1733) @@ -23,14 +23,22 @@ import java.awt.event.ActionListener; import java.net.MalformedURLException; import java.net.URL; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; import javax.swing.JButton; +import javax.swing.JComboBox; import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JTextField; import org.dllearner.core.Component; +import org.dllearner.core.ReasonerComponent; +import org.dllearner.core.configurators.ClassLearningProblemConfigurator; import org.dllearner.core.options.URLConfigOption; +import org.dllearner.core.owl.NamedClass; import org.dllearner.gui.Config; import org.dllearner.gui.ExampleFileChooser; import org.dllearner.kb.OWLFile; @@ -51,6 +59,9 @@ private URL value; private JTextField stringField; + private JComboBox comboBox; + private List<NamedClass> classes; + /** * Provides a widget for URL options. * @@ -97,6 +108,16 @@ e1.printStackTrace(); } fireValueChanged(value); + } else if (e.getSource() == comboBox) { + // pick the selected class + NamedClass clazz = classes.get(comboBox.getSelectedIndex()); + try { + value = new URL(clazz.getName()); + } catch (MalformedURLException e1) { + // cannot happen + e1.printStackTrace(); + } + fireValueChanged(value); } } @@ -107,30 +128,45 @@ // get current value of this option for the given component value = config.getConfigOptionValue(component, configOption); - // text field for strings - stringField = new JTextField(35); - if (value != null) { - stringField.setText(value.toString()); - } - stringField.setToolTipText(configOption.getAllowedValuesDescription()); + // if the option value is an OWL class, we offer a dropdown box + if(((URLConfigOption) configOption).refersToOWLClass()) { + comboBox = new JComboBox(); + ReasonerComponent reasoner = config.getReasoner(); + String baseURI = reasoner.getBaseURI(); + Map<String,String> prefixes = reasoner.getPrefixes(); + classes = new LinkedList<NamedClass>(reasoner.getNamedClasses()); + for(NamedClass clazz : classes) { + comboBox.addItem(clazz.toManchesterSyntaxString(baseURI, prefixes)); + } + comboBox.addActionListener(this); + comboBox.setSelectedIndex(0); + add(comboBox); + } else { + // text field for strings + stringField = new JTextField(35); + if (value != null) { + stringField.setText(value.toString()); + } + stringField.setToolTipText(configOption.getAllowedValuesDescription()); - // set button (value is only updated when this button is pressed => - // would better without set) - setButton = new JButton("Set"); - setButton.addActionListener(this); + // set button (value is only updated when this button is pressed => + // would be better without set) + setButton = new JButton("Set"); + setButton.addActionListener(this); - add(stringField); - add(setButton); + add(stringField); + add(setButton); - // if the URL can refer to a file, we add the possibility to - // choose a local file - if (((URLConfigOption) configOption).refersToFile()) { - chooseLocalButton = new JButton("Choose Local File"); - chooseLocalButton.addActionListener(this); - add(new JLabel(" or ")); - add(chooseLocalButton); + // if the URL can refer to a file, we add the possibility to + // choose a local file + if (((URLConfigOption) configOption).refersToFile()) { + chooseLocalButton = new JButton("Choose Local File"); + chooseLocalButton.addActionListener(this); + add(new JLabel(" or ")); + add(chooseLocalButton); + } } - + } } Modified: trunk/src/dl-learner/org/dllearner/learningproblems/ClassLearningProblem.java =================================================================== --- trunk/src/dl-learner/org/dllearner/learningproblems/ClassLearningProblem.java 2009-05-04 13:47:49 UTC (rev 1732) +++ trunk/src/dl-learner/org/dllearner/learningproblems/ClassLearningProblem.java 2009-05-05 10:01:50 UTC (rev 1733) @@ -33,6 +33,7 @@ import org.dllearner.core.configurators.ClassLearningProblemConfigurator; import org.dllearner.core.options.ConfigOption; import org.dllearner.core.options.StringConfigOption; +import org.dllearner.core.options.URLConfigOption; import org.dllearner.core.owl.Axiom; import org.dllearner.core.owl.Description; import org.dllearner.core.owl.EquivalentClassesAxiom; @@ -74,8 +75,10 @@ public static Collection<ConfigOption<?>> createConfigOptions() { Collection<ConfigOption<?>> options = new LinkedList<ConfigOption<?>>(); - options.add(new StringConfigOption("classToDescribe", "class of which a description should be learned", null, true, false)); - StringConfigOption type = new StringConfigOption("type", "Whether to learn an equivalence class or super class axiom or domain/range of a property.","equivalence"); + URLConfigOption classToDescribeOption = new URLConfigOption("classToDescribe", "class of which a description should be learned", null, true, false); + classToDescribeOption.setRefersToOWLClass(true); + options.add(classToDescribeOption); + StringConfigOption type = new StringConfigOption("type", "whether to learn an equivalence class or super class axiom","equivalence"); // or domain/range of a property. type.setAllowedValues(new String[] {"equivalence", "superClass"}); // , "domain", "range"}); options.add(type); return options; @@ -87,7 +90,8 @@ @Override public void init() throws ComponentInitException { - classToDescribe = new NamedClass(configurator.getClassToDescribe()); + classToDescribe = new NamedClass(configurator.getClassToDescribe().toString()); + if(!reasoner.getNamedClasses().contains(classToDescribe)) { throw new ComponentInitException("The class \"" + configurator.getClassToDescribe() + "\" does not exist. Make sure you spelled it correctly."); } Modified: trunk/src/dl-learner/org/dllearner/reasoning/FastInstanceChecker.java =================================================================== --- trunk/src/dl-learner/org/dllearner/reasoning/FastInstanceChecker.java 2009-05-04 13:47:49 UTC (rev 1732) +++ trunk/src/dl-learner/org/dllearner/reasoning/FastInstanceChecker.java 2009-05-05 10:01:50 UTC (rev 1733) @@ -162,7 +162,7 @@ forallSemantics.setAllowedValues(new String[] { "standard", "domain", "forallExists" }); // closure option? see: // http://owlapi.svn.sourceforge.net/viewvc/owlapi/owl1_1/trunk/tutorial/src/main/java/uk/ac/manchester/owl/tutorial/examples/ClosureAxiomsExample.java?view=markup - options.add(forallSemantics); +// options.add(forallSemantics); return options; } @@ -586,9 +586,9 @@ // \forall restrictions are difficult to handle; assume we want to check // \forall hasChild.male with domain(hasChild)=Person; then for all non-persons // this is satisfied trivially (all of their non-existing children are male) - if(!configurator.getForallRetrievalSemantics().equals("standard")) { - throw new Error("Only forallExists semantics currently implemented."); - } +// if(!configurator.getForallRetrievalSemantics().equals("standard")) { +// throw new Error("Only forallExists semantics currently implemented."); +// } // problem: we need to make sure that \neg \exists r.\top \equiv \forall r.\bot // can still be reached in an algorithm (\forall r.\bot \equiv \bot under forallExists This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2009-05-05 12:16:17
|
Revision: 1736 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1736&view=rev Author: jenslehmann Date: 2009-05-05 12:12:49 +0000 (Tue, 05 May 2009) Log Message: ----------- modified random guesser such that it works for all learning problems Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/algorithms/RandomGuesser.java trunk/src/dl-learner/org/dllearner/algorithms/gp/GPUtilities.java trunk/src/dl-learner/org/dllearner/gui/widgets/WidgetPanelURL.java Modified: trunk/src/dl-learner/org/dllearner/algorithms/RandomGuesser.java =================================================================== --- trunk/src/dl-learner/org/dllearner/algorithms/RandomGuesser.java 2009-05-05 11:52:27 UTC (rev 1735) +++ trunk/src/dl-learner/org/dllearner/algorithms/RandomGuesser.java 2009-05-05 12:12:49 UTC (rev 1736) @@ -24,19 +24,30 @@ import org.apache.log4j.Logger; import org.dllearner.algorithms.gp.GPUtilities; -import org.dllearner.algorithms.gp.Program; +import org.dllearner.core.EvaluatedDescription; import org.dllearner.core.LearningAlgorithm; import org.dllearner.core.LearningProblem; import org.dllearner.core.ReasonerComponent; +import org.dllearner.core.Score; import org.dllearner.core.configurators.RandomGuesserConfigurator; import org.dllearner.core.options.ConfigEntry; import org.dllearner.core.options.ConfigOption; import org.dllearner.core.options.IntegerConfigOption; import org.dllearner.core.options.InvalidConfigOptionValueException; import org.dllearner.core.owl.Description; -import org.dllearner.learningproblems.EvaluatedDescriptionPosNeg; -import org.dllearner.learningproblems.ScorePosNeg; +/** + * This learning algorithm provides a random guessing technique to solve + * learning problems in description logics/OWL. Solutions of such problems + * are concepts, which can be viewed as trees. The algorithm takes as input + * the number of guesses (how many concepts to generate) and the maximum depth + * of the concepts/trees. Using this, it randomly creates trees by calling the + * "grow" method of a genetic programming algorithm. The target language is + * currently ALC. + * + * @author Jens Lehmann + * + */ public class RandomGuesser extends LearningAlgorithm { private RandomGuesserConfigurator configurator; @@ -46,13 +57,15 @@ } private Description bestDefinition = null; - private ScorePosNeg bestScore; + private Score bestScore; private double bestFitness = Double.NEGATIVE_INFINITY; + private boolean isRunning = false; + private double lengthPenalty = 0.02; private int numberOfTrees = 100; private int maxDepth = 5; - private static Logger logger = Logger.getLogger(RandomGuesser.class); + private static Logger logger = Logger.getLogger(RandomGuesser.class); public RandomGuesser(LearningProblem learningProblem, ReasonerComponent rs) { super(learningProblem, rs); @@ -71,7 +84,7 @@ public static Collection<ConfigOption<?>> createConfigOptions() { Collection<ConfigOption<?>> options = new LinkedList<ConfigOption<?>>(); - options.add(new IntegerConfigOption("numberOfTrees", "number of randomly generated concepts/trees", 100)); + options.add(new IntegerConfigOption("numberOfGuesses", "number of randomly generated concepts/trees", 100)); options.add(new IntegerConfigOption("maxDepth", "maximum depth of generated concepts/trees", 5)); return options; } @@ -82,10 +95,11 @@ @Override public <T> void applyConfigEntry(ConfigEntry<T> entry) throws InvalidConfigOptionValueException { String name = entry.getOptionName(); - if (name.equals("numberOfTrees")) + if (name.equals("numberOfGuesses")) { numberOfTrees = (Integer) entry.getValue(); - else if(name.equals("maxDepth")) + } else if(name.equals("maxDepth")) { maxDepth = (Integer) entry.getValue(); + } } /* (non-Javadoc) @@ -93,35 +107,38 @@ */ @Override public void init() { - // TODO Auto-generated method stub - + } @Override public void start() { - // this.learningProblem = learningProblem; + isRunning = true; - // indem man die Klasse GP.Program verwendet, kann man auch - // alle Features z.B. ADC, Type-Guessing verwenden - Program p; + Description d; for(int i=0; i<numberOfTrees; i++) { - // p = GPUtilities.createGrowRandomProgram(learningProblem, maxDepth); - p = GPUtilities.createGrowRandomProgram(learningProblem, reasoner, maxDepth, false); - if(p.getFitness()>bestFitness) { - bestFitness = p.getFitness(); - bestScore = p.getScore(); - bestDefinition = p.getTree(); +// p = GPUtilities.createGrowRandomProgram(learningProblem, reasoner, maxDepth, false); + d = GPUtilities.createGrowRandomTree(learningProblem, reasoner, maxDepth, false); + + double acc = learningProblem.getAccuracy(d); + double fitness = acc - lengthPenalty * d.getLength(); + + if(fitness>bestFitness) { + bestFitness = fitness; + bestScore = learningProblem.computeScore(d); + bestDefinition = d; // p.getTree(); } } logger.info("Random-Guesser (" + numberOfTrees + " trials, maximum depth " + maxDepth + ")"); logger.info("best solution: " + bestDefinition); logger.info("fitness: " + bestFitness); + + isRunning = false; } // @Override - public ScorePosNeg getSolutionScore() { + public Score getSolutionScore() { return bestScore; } @@ -131,13 +148,13 @@ } @Override - public EvaluatedDescriptionPosNeg getCurrentlyBestEvaluatedDescription() { - return new EvaluatedDescriptionPosNeg(bestDefinition,bestScore); + public EvaluatedDescription getCurrentlyBestEvaluatedDescription() { + return learningProblem.evaluate(bestDefinition); +// return new EvaluatedDescriptionPosNeg(bestDefinition,bestScore); } @Override public void stop() { - // TODO Auto-generated method stub } @@ -146,8 +163,7 @@ */ @Override public boolean isRunning() { - // TODO Auto-generated method stub - return false; + return isRunning; } } Modified: trunk/src/dl-learner/org/dllearner/algorithms/gp/GPUtilities.java =================================================================== --- trunk/src/dl-learner/org/dllearner/algorithms/gp/GPUtilities.java 2009-05-05 11:52:27 UTC (rev 1735) +++ trunk/src/dl-learner/org/dllearner/algorithms/gp/GPUtilities.java 2009-05-05 12:12:49 UTC (rev 1736) @@ -690,7 +690,7 @@ return createProgram(learningProblem, createGrowRandomTree(learningProblem, rs, depth,false)); } - private static Description createGrowRandomTree(LearningProblem learningProblem, ReasonerComponent rs, int depth, boolean useADC) { + public static Description createGrowRandomTree(LearningProblem learningProblem, ReasonerComponent rs, int depth, boolean useADC) { /* private static Concept pickAlphabetSymbol(boolean useADC) { FlatABox abox = FlatABox.getInstance(); Modified: trunk/src/dl-learner/org/dllearner/gui/widgets/WidgetPanelURL.java =================================================================== --- trunk/src/dl-learner/org/dllearner/gui/widgets/WidgetPanelURL.java 2009-05-05 11:52:27 UTC (rev 1735) +++ trunk/src/dl-learner/org/dllearner/gui/widgets/WidgetPanelURL.java 2009-05-05 12:12:49 UTC (rev 1736) @@ -26,7 +26,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.Set; import javax.swing.JButton; import javax.swing.JComboBox; @@ -36,7 +35,6 @@ import org.dllearner.core.Component; import org.dllearner.core.ReasonerComponent; -import org.dllearner.core.configurators.ClassLearningProblemConfigurator; import org.dllearner.core.options.URLConfigOption; import org.dllearner.core.owl.NamedClass; import org.dllearner.gui.Config; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2009-05-15 11:55:24
|
Revision: 1751 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1751&view=rev Author: jenslehmann Date: 2009-05-15 11:55:08 +0000 (Fri, 15 May 2009) Log Message: ----------- - prepared class matching - added support for ASK queries Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java trunk/src/dl-learner/org/dllearner/kb/sparql/SparqlEndpoint.java trunk/src/dl-learner/org/dllearner/kb/sparql/SparqlQuery.java trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java trunk/src/dl-learner/org/dllearner/scripts/matching/Utility.java Modified: trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java 2009-05-14 06:33:31 UTC (rev 1750) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java 2009-05-15 11:55:08 UTC (rev 1751) @@ -28,6 +28,7 @@ import org.dllearner.utilities.datastructures.StringTuple; import org.dllearner.utilities.owl.OWLVocabulary; +import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.query.ResultSetFactory; import com.hp.hpl.jena.query.ResultSetFormatter; Modified: trunk/src/dl-learner/org/dllearner/kb/sparql/SparqlEndpoint.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/SparqlEndpoint.java 2009-05-14 06:33:31 UTC (rev 1750) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/SparqlEndpoint.java 2009-05-15 11:55:08 UTC (rev 1751) @@ -85,6 +85,8 @@ return getEndpointLOCALDBpedia(); } else if (name.equals("LOCALGEONAMES")) { return getEndpointLOCALGeonames(); + } else if (name.equals("LOCALGEODATA")) { + return getEndpointLOCALGeoData(); } else if (name.equals("LOCALJOSECKI") || name.equals("LOCALJOSEKI") ) { return getEndpointlocalJoseki(); } else if (name.equals("LOCALJOSEKIBIBLE")||name.equals("LOCALJOSECKIBIBLE")) { Modified: trunk/src/dl-learner/org/dllearner/kb/sparql/SparqlQuery.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/SparqlQuery.java 2009-05-14 06:33:31 UTC (rev 1750) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/SparqlQuery.java 2009-05-15 11:55:08 UTC (rev 1751) @@ -41,7 +41,7 @@ /** * Represents one SPARQL query. It includes support for stopping the SPARQL * query (which may be necessary if a timeout is reached) and is designed to be - * able to run a query in a separate thread. + * able to run a query in a separate thread. * * @author Jens Lehmann * @author Sebastian Hellmann @@ -142,6 +142,15 @@ return rs; } + public boolean sendAsk() { + isRunning = true; + String service = sparqlEndpoint.getURL().toString(); + queryExecution = new QueryEngineHTTP(service, sparqlQueryString); + boolean result = queryExecution.execAsk(); + isRunning = false; + return result; + } + /** * Stops the execution of the query. */ Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java 2009-05-14 06:33:31 UTC (rev 1750) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java 2009-05-15 11:55:08 UTC (rev 1751) @@ -20,12 +20,14 @@ package org.dllearner.scripts.matching; import java.io.BufferedReader; +import java.io.File; import java.io.FileReader; import java.io.IOException; import java.net.URI; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; +import java.util.zip.DataFormatException; import org.apache.log4j.Level; import org.apache.log4j.Logger; @@ -140,25 +142,13 @@ return discarded; } - public static void main(String args[]) throws IOException { + public static void main(String args[]) throws IOException, DataFormatException { Logger.getRootLogger().setLevel(Level.TRACE); // test file - String testFile = "log/geodata/owlsameas_en.dat"; + File testFile = new File("log/geodata/owlsameas_en.dat"); // map for collecting matches - Map<URI,URI> matches = new HashMap<URI,URI>(); - // read file line by line to collect matches - BufferedReader br = new BufferedReader(new FileReader(testFile)); - String line; - while ((line = br.readLine()) != null) { - String[] tmp = line.split("\t"); -// System.out.println(line); -// for(String test : tmp) { -// System.out.println(test); -// } - - matches.put(URI.create(tmp[1]), URI.create(tmp[0] + "#id")); - } + Map<URI,URI> matches = Utility.getMatches(testFile); // perform evaluation and print results Evaluation eval = new Evaluation(matches); System.out.println(eval.getTests() + " points tested (" + eval.getDiscarded() + " discarded)"); Added: trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java 2009-05-15 11:55:08 UTC (rev 1751) @@ -0,0 +1,96 @@ +/** + * 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.scripts.matching; + +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; +import java.util.Map.Entry; +import java.util.zip.DataFormatException; + +import org.dllearner.algorithms.celoe.CELOE; +import org.dllearner.core.ComponentManager; +import org.dllearner.core.LearningProblemUnsupportedException; +import org.dllearner.core.ReasonerComponent; +import org.dllearner.kb.sparql.SparqlEndpoint; +import org.dllearner.kb.sparql.SparqlKnowledgeSource; +import org.dllearner.kb.sparql.SparqlQuery; +import org.dllearner.learningproblems.PosOnlyLP; +import org.dllearner.reasoning.FastInstanceChecker; + +/** + * Uses learning algorithms to learn class definitions for DBpedia + * classes in LinkedGeoData. As a final result, we can classify most + * objects in LinkedGeoData using the DBpedia ontology. + * + * @author Jens Lehmann + * + */ +public class LearnOSMClasses { + + private static SparqlEndpoint dbpediaEndpoint = SparqlEndpoint.getEndpointLOCALDBpedia(); + private static SparqlEndpoint geoDataEndpoint = SparqlEndpoint.getEndpointLOCALGeoData(); + + public static void main(String args[]) throws IOException, DataFormatException, LearningProblemUnsupportedException { + File matchesFile = new File("log/geodata/owlsameas_en.dat"); + Map<URI,URI> matches = Utility.getMatches(matchesFile); + +// SPARQLTasks st = new SPARQLTasks(dbpediaEndpoint); + Set<String> positives = new TreeSet<String>(); + Set<String> negatives = new TreeSet<String>(); + + // loop through all matches + for(Entry<URI,URI> match : matches.entrySet()) { + URI dbpediaURI = match.getKey(); + URI lgdURI = match.getValue(); + // test whether the dbpediaURI is a city + String query = "ASK {<"+dbpediaURI+"> a <http://dbpedia.org/ontology/City>}"; + SparqlQuery sq = new SparqlQuery(query, dbpediaEndpoint); + boolean isCity = sq.sendAsk(); + if(isCity) { + positives.add(lgdURI.toString()); + } else { + negatives.add(lgdURI.toString()); + } + } + + Set<String> instances = new TreeSet<String>(); + instances.addAll(positives); + instances.addAll(negatives); + + // plug together DL-Learner components + ComponentManager cm = ComponentManager.getInstance(); + SparqlKnowledgeSource ks = cm.knowledgeSource(SparqlKnowledgeSource.class); + ks.getConfigurator().setInstances(instances); + ks.getConfigurator().setPredefinedEndpoint("LOCALGEODATA"); + ReasonerComponent reasoner = cm.reasoner(FastInstanceChecker.class, ks); + PosOnlyLP lp = cm.learningProblem(PosOnlyLP.class, reasoner); + lp.getConfigurator().setPositiveExamples(positives); + CELOE algorithm = cm.learningAlgorithm(CELOE.class, lp, reasoner); + + // execute algorithm + algorithm.start(); +// Set<EvaluatedDescriptionPosOnly> solutions = (Set<EvaluatedDescriptionPosOnly>) algorithm.getCurrentlyBestEvaluatedDescriptions(); + } + +} Added: trunk/src/dl-learner/org/dllearner/scripts/matching/Utility.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/Utility.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/Utility.java 2009-05-15 11:55:08 UTC (rev 1751) @@ -0,0 +1,68 @@ +/** + * 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.scripts.matching; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.net.URI; +import java.util.HashMap; +import java.util.Map; +import java.util.zip.DataFormatException; + +/** + * Utility methods for creating/optimising matches between knowledge bases. + * + * @author Jens Lehmann + * + */ +public final class Utility { + + /** + * Reads in a file containing known matches between knowledge bases. + * + * Note: + * - Currently, it is assumed that the format is URI + tabulator + URI + newline. + * - Currently, #id is appended to the second URI on the line. + * - Currently, the order is reversed. + * + * @param file A file, which contains matches. + * @return A map containing the matches. + * @throws IOException If an error occurs during reading the file. + */ + public static Map<URI, URI> getMatches(File file) throws IOException, DataFormatException { + Map<URI,URI> matches = new HashMap<URI,URI>(); + // read file line by line to collect matches + BufferedReader br = new BufferedReader(new FileReader(file)); + String line; + int lineCount = 0; + while ((line = br.readLine()) != null) { + String[] tmp = line.split("\t"); + if(tmp.length != 2) { + throw new DataFormatException("Line " + lineCount + " incorrectly formatted."); + } + matches.put(URI.create(tmp[1]), URI.create(tmp[0] + "#id")); + lineCount++; + } + return matches; + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2009-05-18 15:38:42
|
Revision: 1755 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1755&view=rev Author: jenslehmann Date: 2009-05-18 15:38:38 +0000 (Mon, 18 May 2009) Log Message: ----------- continued class matching ASK queries now work in combination with cache Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/algorithms/celoe/CELOE.java trunk/src/dl-learner/org/dllearner/kb/sparql/Cache.java trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java trunk/src/dl-learner/org/dllearner/learningproblems/PosOnlyLP.java trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java trunk/src/dl-learner/org/dllearner/scripts/matching/Utility.java Modified: trunk/src/dl-learner/org/dllearner/algorithms/celoe/CELOE.java =================================================================== --- trunk/src/dl-learner/org/dllearner/algorithms/celoe/CELOE.java 2009-05-18 14:15:08 UTC (rev 1754) +++ trunk/src/dl-learner/org/dllearner/algorithms/celoe/CELOE.java 2009-05-18 15:38:38 UTC (rev 1755) @@ -36,7 +36,6 @@ import org.dllearner.core.LearningProblem; import org.dllearner.core.ReasonerComponent; import org.dllearner.core.configurators.CELOEConfigurator; -import org.dllearner.core.configurators.Configurator; import org.dllearner.core.options.CommonConfigOptions; import org.dllearner.core.options.ConfigOption; import org.dllearner.core.owl.ClassHierarchy; @@ -124,7 +123,7 @@ private int maxHorizExp = 0; @Override - public Configurator getConfigurator() { + public CELOEConfigurator getConfigurator() { return configurator; } Modified: trunk/src/dl-learner/org/dllearner/kb/sparql/Cache.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/Cache.java 2009-05-18 14:15:08 UTC (rev 1754) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/Cache.java 2009-05-18 15:38:38 UTC (rev 1755) @@ -312,6 +312,19 @@ return result; } + public boolean executeSparqlAskQuery(SparqlQuery query) { + String str = getCacheEntry(query.getSparqlQueryString()); + JamonMonitorLogger.increaseCount(Cache.class, "TotalQueries"); + if(str != null) { + JamonMonitorLogger.increaseCount(Cache.class, "SuccessfulHits"); + return Boolean.parseBoolean(str); + } else { + Boolean result = query.sendAsk(); + addToCache(query.getSparqlQueryString(), result.toString()); + return result; + } + } + /** * deletes all Files in the cacheDir, does not delete the cacheDir itself, * and can thus still be used without creating a new Cache Object Modified: trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java 2009-05-18 14:15:08 UTC (rev 1754) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java 2009-05-18 15:38:38 UTC (rev 1755) @@ -507,6 +507,15 @@ return jsonString; } + public boolean ask(String askQueryString) { + if(cache == null) { + SparqlQuery sq = new SparqlQuery(askQueryString, sparqlEndpoint); + return sq.sendAsk(); + } else { + return cache.executeSparqlAskQuery(new SparqlQuery(askQueryString, sparqlEndpoint)); + } + } + /** * a String Helper which constructs the limit clause of a sparql query. if * sparqlResultLimit is zero, returns nothing Modified: trunk/src/dl-learner/org/dllearner/learningproblems/PosOnlyLP.java =================================================================== --- trunk/src/dl-learner/org/dllearner/learningproblems/PosOnlyLP.java 2009-05-18 14:15:08 UTC (rev 1754) +++ trunk/src/dl-learner/org/dllearner/learningproblems/PosOnlyLP.java 2009-05-18 15:38:38 UTC (rev 1755) @@ -31,6 +31,7 @@ import org.dllearner.core.EvaluatedDescription; import org.dllearner.core.LearningProblem; import org.dllearner.core.ReasonerComponent; +import org.dllearner.core.configurators.PosNegLPStandardConfigurator; import org.dllearner.core.configurators.PosOnlyLPConfigurator; import org.dllearner.core.options.CommonConfigMappings; import org.dllearner.core.options.ConfigEntry; @@ -66,6 +67,7 @@ public PosOnlyLP(ReasonerComponent reasoningService) { super(reasoningService); + configurator = new PosOnlyLPConfigurator(this); } /* Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java 2009-05-18 14:15:08 UTC (rev 1754) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java 2009-05-18 15:38:38 UTC (rev 1755) @@ -29,12 +29,14 @@ import java.util.zip.DataFormatException; import org.dllearner.algorithms.celoe.CELOE; +import org.dllearner.core.ComponentInitException; import org.dllearner.core.ComponentManager; import org.dllearner.core.LearningProblemUnsupportedException; import org.dllearner.core.ReasonerComponent; +import org.dllearner.kb.sparql.Cache; +import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlKnowledgeSource; -import org.dllearner.kb.sparql.SparqlQuery; import org.dllearner.learningproblems.PosOnlyLP; import org.dllearner.reasoning.FastInstanceChecker; @@ -51,11 +53,11 @@ private static SparqlEndpoint dbpediaEndpoint = SparqlEndpoint.getEndpointLOCALDBpedia(); private static SparqlEndpoint geoDataEndpoint = SparqlEndpoint.getEndpointLOCALGeoData(); - public static void main(String args[]) throws IOException, DataFormatException, LearningProblemUnsupportedException { + public static void main(String args[]) throws IOException, DataFormatException, LearningProblemUnsupportedException, ComponentInitException { File matchesFile = new File("log/geodata/owlsameas_en.dat"); Map<URI,URI> matches = Utility.getMatches(matchesFile); -// SPARQLTasks st = new SPARQLTasks(dbpediaEndpoint); + SPARQLTasks dbpedia = new SPARQLTasks(new Cache("cache/matching"),dbpediaEndpoint); Set<String> positives = new TreeSet<String>(); Set<String> negatives = new TreeSet<String>(); @@ -65,8 +67,8 @@ URI lgdURI = match.getValue(); // test whether the dbpediaURI is a city String query = "ASK {<"+dbpediaURI+"> a <http://dbpedia.org/ontology/City>}"; - SparqlQuery sq = new SparqlQuery(query, dbpediaEndpoint); - boolean isCity = sq.sendAsk(); + boolean isCity = dbpedia.ask(query); +// System.out.println(isCity + " " + lgdURI); if(isCity) { positives.add(lgdURI.toString()); } else { @@ -78,18 +80,31 @@ instances.addAll(positives); instances.addAll(negatives); + System.out.println(instances.size() + " instances - " + positives.size() + " positive examples"); + // plug together DL-Learner components ComponentManager cm = ComponentManager.getInstance(); + SparqlKnowledgeSource ks = cm.knowledgeSource(SparqlKnowledgeSource.class); ks.getConfigurator().setInstances(instances); ks.getConfigurator().setPredefinedEndpoint("LOCALGEODATA"); + ks.getConfigurator().setSaveExtractedFragment(true); + ks.init(); + ReasonerComponent reasoner = cm.reasoner(FastInstanceChecker.class, ks); + reasoner.init(); + PosOnlyLP lp = cm.learningProblem(PosOnlyLP.class, reasoner); lp.getConfigurator().setPositiveExamples(positives); - CELOE algorithm = cm.learningAlgorithm(CELOE.class, lp, reasoner); + lp.init(); + CELOE celoe = cm.learningAlgorithm(CELOE.class, lp, reasoner); + celoe.getConfigurator().setUseHasValueConstructor(true); + celoe.getConfigurator().setValueFrequencyThreshold(3); + celoe.init(); + // execute algorithm - algorithm.start(); + celoe.start(); // Set<EvaluatedDescriptionPosOnly> solutions = (Set<EvaluatedDescriptionPosOnly>) algorithm.getCurrentlyBestEvaluatedDescriptions(); } Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/Utility.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/Utility.java 2009-05-18 14:15:08 UTC (rev 1754) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/Utility.java 2009-05-18 15:38:38 UTC (rev 1755) @@ -28,6 +28,8 @@ import java.util.Map; import java.util.zip.DataFormatException; +import org.apache.log4j.Logger; + /** * Utility methods for creating/optimising matches between knowledge bases. * @@ -36,6 +38,8 @@ */ public final class Utility { + private static Logger logger = Logger.getLogger(Utility.class); + /** * Reads in a file containing known matches between knowledge bases. * @@ -59,9 +63,13 @@ if(tmp.length != 2) { throw new DataFormatException("Line " + lineCount + " incorrectly formatted."); } +// if(matches.containsKey(URI.create(tmp[1]))) { +// logger.warn("multiple key " + tmp[1] + " ... ignoring all but one value"); +// } matches.put(URI.create(tmp[1]), URI.create(tmp[0] + "#id")); lineCount++; } + logger.info("read " + lineCount + " lines"); return matches; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2009-05-21 08:46:45
|
Revision: 1765 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1765&view=rev Author: jenslehmann Date: 2009-05-21 08:46:28 +0000 (Thu, 21 May 2009) Log Message: ----------- several smaller changes Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/algorithms/celoe/CELOE.java trunk/src/dl-learner/org/dllearner/algorithms/refinement2/ROLComponent2.java trunk/src/dl-learner/org/dllearner/cli/Start.java trunk/src/dl-learner/org/dllearner/core/IndividualReasoner.java trunk/src/dl-learner/org/dllearner/core/ReasonerComponent.java trunk/src/dl-learner/org/dllearner/core/configurators/ROLComponent2Configurator.java trunk/src/dl-learner/org/dllearner/core/configurators/RandomGuesserConfigurator.java trunk/src/dl-learner/org/dllearner/core/configurators/RefinementOperatorConfigurator.java trunk/src/dl-learner/org/dllearner/core/options/CommonConfigOptions.java trunk/src/dl-learner/org/dllearner/learningproblems/EvaluatedDescriptionPosNeg.java trunk/src/dl-learner/org/dllearner/learningproblems/EvaluatedDescriptionPosOnly.java trunk/src/dl-learner/org/dllearner/learningproblems/PosOnlyLP.java trunk/src/dl-learner/org/dllearner/learningproblems/ScorePosOnly.java trunk/src/dl-learner/org/dllearner/refinementoperators/RhoDRDown.java trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java Modified: trunk/src/dl-learner/org/dllearner/algorithms/celoe/CELOE.java =================================================================== --- trunk/src/dl-learner/org/dllearner/algorithms/celoe/CELOE.java 2009-05-20 09:22:49 UTC (rev 1764) +++ trunk/src/dl-learner/org/dllearner/algorithms/celoe/CELOE.java 2009-05-21 08:46:28 UTC (rev 1765) @@ -569,6 +569,8 @@ // inc. minimum since we found no other node which also has min. horiz. exp. minHorizExp++; + +// System.out.println("minimum horizontal expansion is now " + minHorizExp); } } Modified: trunk/src/dl-learner/org/dllearner/algorithms/refinement2/ROLComponent2.java =================================================================== --- trunk/src/dl-learner/org/dllearner/algorithms/refinement2/ROLComponent2.java 2009-05-20 09:22:49 UTC (rev 1764) +++ trunk/src/dl-learner/org/dllearner/algorithms/refinement2/ROLComponent2.java 2009-05-21 08:46:28 UTC (rev 1765) @@ -199,6 +199,7 @@ options.add(CommonConfigOptions.useNegation()); options.add(CommonConfigOptions.useBooleanDatatypes()); options.add(CommonConfigOptions.useDoubleDatatypes()); + options.add(CommonConfigOptions.useStringDatatypes()); options.add(CommonConfigOptions.maxExecutionTimeInSeconds()); options.add(CommonConfigOptions.minExecutionTimeInSeconds()); options.add(CommonConfigOptions.guaranteeXgoodDescriptions()); Modified: trunk/src/dl-learner/org/dllearner/cli/Start.java =================================================================== --- trunk/src/dl-learner/org/dllearner/cli/Start.java 2009-05-20 09:22:49 UTC (rev 1764) +++ trunk/src/dl-learner/org/dllearner/cli/Start.java 2009-05-21 08:46:28 UTC (rev 1765) @@ -133,7 +133,7 @@ if (args.length > 1 && args[0].equals("-q")) { inQueryMode = true; } - + // create loggers (a simple logger which outputs // its messages to the console and a log file) @@ -205,7 +205,9 @@ e.printStackTrace(); System.exit(0); } + start.start(inQueryMode); + // write JaMON report in HTML file File jamonlog = new File("log/jamon.html"); Files.createFile(jamonlog, MonitorFactory.getReport()); @@ -843,7 +845,8 @@ } while (!(queryStr.equalsIgnoreCase("q") || queryStr.equalsIgnoreCase("quit"))); } - + + /** * error handling over the logger * Modified: trunk/src/dl-learner/org/dllearner/core/IndividualReasoner.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/IndividualReasoner.java 2009-05-20 09:22:49 UTC (rev 1764) +++ trunk/src/dl-learner/org/dllearner/core/IndividualReasoner.java 2009-05-21 08:46:28 UTC (rev 1765) @@ -183,4 +183,13 @@ */ public SortedSet<Individual> getFalseDatatypeMembers(DatatypeProperty datatypeProperty); + /** + * Convenience method, which can be used which returns the property values as + * strings (note that any literal can be represented as string, even numbers). + * @see #getDatatypeMembers(DatatypeProperty) + * @param datatypeProperty A data property. + * @return The mapping between individuals and string values through the given property. + */ + public Map<Individual, SortedSet<String>> getStringDatatypeMembers(DatatypeProperty datatypeProperty); + } Modified: trunk/src/dl-learner/org/dllearner/core/ReasonerComponent.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/ReasonerComponent.java 2009-05-20 09:22:49 UTC (rev 1764) +++ trunk/src/dl-learner/org/dllearner/core/ReasonerComponent.java 2009-05-21 08:46:28 UTC (rev 1765) @@ -661,6 +661,32 @@ } @Override + public final Map<Individual, SortedSet<String>> getStringDatatypeMembers( + DatatypeProperty datatypeProperty) { + try { + return getStringDatatypeMembersImpl(datatypeProperty); + } catch (ReasoningMethodUnsupportedException e) { + handleExceptions(e); + return null; + } + } + + protected Map<Individual, SortedSet<String>> getStringDatatypeMembersImpl( + DatatypeProperty datatypeProperty) throws ReasoningMethodUnsupportedException { + Map<Individual, SortedSet<Constant>> mapping = getDatatypeMembersImpl(datatypeProperty); + Map<Individual, SortedSet<String>> ret = new TreeMap<Individual, SortedSet<String>>(); + for (Entry<Individual, SortedSet<Constant>> e : mapping.entrySet()) { + SortedSet<Constant> values = e.getValue(); + SortedSet<String> valuesString = new TreeSet<String>(); + for (Constant c : values) { + valuesString.add(c.getLiteral()); + } + ret.put(e.getKey(), valuesString); + } + return ret; + } + + @Override public final SortedSet<DatatypeProperty> getDatatypeProperties() { try { return getDatatypePropertiesImpl(); Modified: trunk/src/dl-learner/org/dllearner/core/configurators/ROLComponent2Configurator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/configurators/ROLComponent2Configurator.java 2009-05-20 09:22:49 UTC (rev 1764) +++ trunk/src/dl-learner/org/dllearner/core/configurators/ROLComponent2Configurator.java 2009-05-21 08:46:28 UTC (rev 1765) @@ -279,6 +279,15 @@ return (Boolean) ComponentManager.getInstance().getConfigOptionValue(rOLComponent2, "useDoubleDatatypes") ; } /** +* useStringDatatypes specifies whether string datatypes are used in the learning algorothm. +* mandatory: false| reinit necessary: true +* default value: false +* @return boolean +**/ +public boolean getUseStringDatatypes() { +return (Boolean) ComponentManager.getInstance().getConfigOptionValue(rOLComponent2, "useStringDatatypes") ; +} +/** * maxExecutionTimeInSeconds algorithm will stop after specified seconds. * mandatory: false| reinit necessary: true * default value: 0 @@ -622,6 +631,15 @@ reinitNecessary = true; } /** +* @param useStringDatatypes specifies whether string datatypes are used in the learning algorothm. +* mandatory: false| reinit necessary: true +* default value: false +**/ +public void setUseStringDatatypes(boolean useStringDatatypes) { +ComponentManager.getInstance().applyConfigEntry(rOLComponent2, "useStringDatatypes", useStringDatatypes); +reinitNecessary = true; +} +/** * @param maxExecutionTimeInSeconds algorithm will stop after specified seconds. * mandatory: false| reinit necessary: true * default value: 0 Modified: trunk/src/dl-learner/org/dllearner/core/configurators/RandomGuesserConfigurator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/configurators/RandomGuesserConfigurator.java 2009-05-20 09:22:49 UTC (rev 1764) +++ trunk/src/dl-learner/org/dllearner/core/configurators/RandomGuesserConfigurator.java 2009-05-21 08:46:28 UTC (rev 1765) @@ -56,13 +56,13 @@ } /** -* numberOfTrees number of randomly generated concepts/trees. +* numberOfGuesses number of randomly generated concepts/trees. * mandatory: false| reinit necessary: true -* default value: 5 +* default value: 100 * @return int **/ -public int getNumberOfTrees() { -return (Integer) ComponentManager.getInstance().getConfigOptionValue(randomGuesser, "numberOfTrees") ; +public int getNumberOfGuesses() { +return (Integer) ComponentManager.getInstance().getConfigOptionValue(randomGuesser, "numberOfGuesses") ; } /** * maxDepth maximum depth of generated concepts/trees. @@ -75,12 +75,12 @@ } /** -* @param numberOfTrees number of randomly generated concepts/trees. +* @param numberOfGuesses number of randomly generated concepts/trees. * mandatory: false| reinit necessary: true -* default value: 5 +* default value: 100 **/ -public void setNumberOfTrees(int numberOfTrees) { -ComponentManager.getInstance().applyConfigEntry(randomGuesser, "numberOfTrees", numberOfTrees); +public void setNumberOfGuesses(int numberOfGuesses) { +ComponentManager.getInstance().applyConfigEntry(randomGuesser, "numberOfGuesses", numberOfGuesses); reinitNecessary = true; } /** Modified: trunk/src/dl-learner/org/dllearner/core/configurators/RefinementOperatorConfigurator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/configurators/RefinementOperatorConfigurator.java 2009-05-20 09:22:49 UTC (rev 1764) +++ trunk/src/dl-learner/org/dllearner/core/configurators/RefinementOperatorConfigurator.java 2009-05-21 08:46:28 UTC (rev 1765) @@ -54,4 +54,8 @@ public boolean getUseDoubleDatatypes() { return false; } + + public boolean getUseStringDatatypes() { + return false; + } } Modified: trunk/src/dl-learner/org/dllearner/core/options/CommonConfigOptions.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/options/CommonConfigOptions.java 2009-05-20 09:22:49 UTC (rev 1764) +++ trunk/src/dl-learner/org/dllearner/core/options/CommonConfigOptions.java 2009-05-21 08:46:28 UTC (rev 1765) @@ -49,6 +49,7 @@ public static boolean useNegationDefault = true; public static boolean useBooleanDatatypesDefault = true; public static boolean useDoubleDatatypesDefault = true; + public static boolean useStringDatatypesDefault = false; public static int maxExecutionTimeInSecondsDefault = 0; public static int minExecutionTimeInSecondsDefault = 0; public static int guaranteeXgoodDescriptionsDefault = 1; @@ -159,6 +160,10 @@ return new BooleanConfigOption("useDoubleDatatypes", "specifies whether boolean datatypes are used in the learning algorothm",useDoubleDatatypesDefault); } + public static BooleanConfigOption useStringDatatypes() { + return new BooleanConfigOption("useStringDatatypes", "specifies whether string datatypes are used in the learning algorothm",useStringDatatypesDefault); + } + public static IntegerConfigOption maxExecutionTimeInSeconds() { return new IntegerConfigOption("maxExecutionTimeInSeconds", "algorithm will stop after specified seconds",maxExecutionTimeInSecondsDefault); } Modified: trunk/src/dl-learner/org/dllearner/learningproblems/EvaluatedDescriptionPosNeg.java =================================================================== --- trunk/src/dl-learner/org/dllearner/learningproblems/EvaluatedDescriptionPosNeg.java 2009-05-20 09:22:49 UTC (rev 1764) +++ trunk/src/dl-learner/org/dllearner/learningproblems/EvaluatedDescriptionPosNeg.java 2009-05-21 08:46:28 UTC (rev 1765) @@ -53,7 +53,7 @@ */ public EvaluatedDescriptionPosNeg(Description description, ScorePosNeg score) { super(description, score); - score2 = (ScorePosNeg) score; + score2 = score; } /** Modified: trunk/src/dl-learner/org/dllearner/learningproblems/EvaluatedDescriptionPosOnly.java =================================================================== --- trunk/src/dl-learner/org/dllearner/learningproblems/EvaluatedDescriptionPosOnly.java 2009-05-20 09:22:49 UTC (rev 1764) +++ trunk/src/dl-learner/org/dllearner/learningproblems/EvaluatedDescriptionPosOnly.java 2009-05-21 08:46:28 UTC (rev 1765) @@ -19,9 +19,11 @@ */ package org.dllearner.learningproblems; +import java.util.Set; + import org.dllearner.core.EvaluatedDescription; -import org.dllearner.core.Score; import org.dllearner.core.owl.Description; +import org.dllearner.core.owl.Individual; /** * @author Jens Lehmann @@ -29,8 +31,31 @@ */ public class EvaluatedDescriptionPosOnly extends EvaluatedDescription { - public EvaluatedDescriptionPosOnly(Description description, Score score) { + private ScorePosOnly score2; + + public EvaluatedDescriptionPosOnly(Description description, ScorePosOnly score) { super(description, score); + score2 = score; } + @Override + public String toString() { + return description.toString() + "(accuracy: " + getAccuracy() + ")"; + } + + /** + * @see org.dllearner.learningproblems.ScorePosNeg#getCoveredPositives() + * @return Positive examples covered by the description. + */ + public Set<Individual> getCoveredPositives() { + return score2.getCoveredInstances(); + } + + public Set<Individual> getNotCoveredPositives() { + return score2.getNotCoveredPositives(); + } + + public Set<Individual> getAdditionalInstances() { + return score2.getAdditionalInstances(); + } } Modified: trunk/src/dl-learner/org/dllearner/learningproblems/PosOnlyLP.java =================================================================== --- trunk/src/dl-learner/org/dllearner/learningproblems/PosOnlyLP.java 2009-05-20 09:22:49 UTC (rev 1764) +++ trunk/src/dl-learner/org/dllearner/learningproblems/PosOnlyLP.java 2009-05-21 08:46:28 UTC (rev 1765) @@ -145,9 +145,12 @@ Set<Individual> retrieval = reasoner.getIndividuals(description); Set<Individual> instancesCovered = new TreeSet<Individual>(); + Set<Individual> instancesNotCovered = new TreeSet<Individual>(); for(Individual ind : positiveExamples) { if(retrieval.contains(ind)) { instancesCovered.add(ind); + } else { + instancesNotCovered.add(ind); } } @@ -156,14 +159,14 @@ // pass only additional instances to score object retrieval.removeAll(instancesCovered); - return new ScorePosOnly(instancesCovered, coverage, retrieval, protusion, getAccuracy(coverage, protusion)); + return new ScorePosOnly(instancesCovered, instancesNotCovered, coverage, retrieval, protusion, getAccuracy(coverage, protusion)); } /* (non-Javadoc) * @see org.dllearner.core.LearningProblem#evaluate(org.dllearner.core.owl.Description) */ @Override - public EvaluatedDescription evaluate(Description description) { + public EvaluatedDescriptionPosOnly evaluate(Description description) { ScorePosOnly score = computeScore(description); return new EvaluatedDescriptionPosOnly(description, score); } Modified: trunk/src/dl-learner/org/dllearner/learningproblems/ScorePosOnly.java =================================================================== --- trunk/src/dl-learner/org/dllearner/learningproblems/ScorePosOnly.java 2009-05-20 09:22:49 UTC (rev 1764) +++ trunk/src/dl-learner/org/dllearner/learningproblems/ScorePosOnly.java 2009-05-21 08:46:28 UTC (rev 1765) @@ -31,14 +31,16 @@ public class ScorePosOnly extends Score { private Set<Individual> coveredInstances; + private Set<Individual> notCoveredPositives; private Set<Individual> additionalInstances; private double coverage; private double addition; private double accuracy; - public ScorePosOnly(Set<Individual> coveredInstances, double coverage, Set<Individual> additionalInstances, double protusion, double accuracy) { + public ScorePosOnly(Set<Individual> coveredInstances, Set<Individual> notCoveredPositives, double coverage, Set<Individual> additionalInstances, double protusion, double accuracy) { this.coveredInstances = coveredInstances; + this.notCoveredPositives = notCoveredPositives; this.additionalInstances = additionalInstances; this.coverage = coverage; this.addition = protusion; @@ -79,6 +81,13 @@ } /** + * @return the coveredInstances + */ + public Set<Individual> getNotCoveredPositives() { + return notCoveredPositives; + } + + /** * @return the additionalInstances */ public Set<Individual> getAdditionalInstances() { Modified: trunk/src/dl-learner/org/dllearner/refinementoperators/RhoDRDown.java =================================================================== --- trunk/src/dl-learner/org/dllearner/refinementoperators/RhoDRDown.java 2009-05-20 09:22:49 UTC (rev 1764) +++ trunk/src/dl-learner/org/dllearner/refinementoperators/RhoDRDown.java 2009-05-21 08:46:28 UTC (rev 1765) @@ -172,6 +172,7 @@ private boolean useNegation = true; private boolean useBooleanDatatypes = true; private boolean useDoubleDatatypes = true; + private boolean useStringDatatypes = false; private boolean disjointChecks = true; private boolean instanceBasedDisjoints = true; @@ -202,6 +203,7 @@ useNegation = configurator.getUseNegation(); useBooleanDatatypes = configurator.getUseBooleanDatatypes(); useDoubleDatatypes = configurator.getUseDoubleDatatypes(); + useStringDatatypes = configurator.getUseStringDatatypes(); init(); } @@ -224,6 +226,7 @@ this.useNegation = useNegation; this.useBooleanDatatypes = useBooleanDatatypes; this.useDoubleDatatypes = useDoubleDatatypes; + useStringDatatypes = configurator.getUseStringDatatypes(); if(startClass != null) { this.startClass = startClass; } Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java 2009-05-20 09:22:49 UTC (rev 1764) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java 2009-05-21 08:46:28 UTC (rev 1765) @@ -29,10 +29,17 @@ import java.util.zip.DataFormatException; import org.dllearner.algorithms.celoe.CELOE; +import org.dllearner.algorithms.refinement2.ROLComponent2; import org.dllearner.core.ComponentInitException; import org.dllearner.core.ComponentManager; import org.dllearner.core.LearningProblemUnsupportedException; import org.dllearner.core.ReasonerComponent; +import org.dllearner.core.owl.Description; +import org.dllearner.core.owl.Individual; +import org.dllearner.core.owl.NamedClass; +import org.dllearner.core.owl.ObjectProperty; +import org.dllearner.core.owl.ObjectValueRestriction; +import org.dllearner.core.owl.Union; import org.dllearner.kb.manipulator.Manipulator; import org.dllearner.kb.manipulator.StringToResource; import org.dllearner.kb.manipulator.Rule.Months; @@ -40,6 +47,7 @@ import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlKnowledgeSource; +import org.dllearner.learningproblems.EvaluatedDescriptionPosOnly; import org.dllearner.learningproblems.PosOnlyLP; import org.dllearner.reasoning.FastInstanceChecker; @@ -74,8 +82,10 @@ // System.out.println(isCity + " " + lgdURI); if(isCity) { positives.add(lgdURI.toString()); + System.out.println("+\""+lgdURI+"\""); } else { negatives.add(lgdURI.toString()); + System.out.println("-\""+lgdURI+"\""); } } @@ -93,7 +103,7 @@ ks.getConfigurator().setPredefinedEndpoint("LOCALGEODATA"); ks.getConfigurator().setSaveExtractedFragment(true); Manipulator m = Manipulator.getDefaultManipulator(); - m.addRule(new StringToResource(Months.DECEMBER,"http://linkedgeodata.org/vocabulary", 40)); + m.addRule(new StringToResource(Months.DECEMBER,"http://linkedgeodata.org/vocabulary", 0)); ks.setManipulator(m); ks.init(); @@ -105,10 +115,36 @@ lp.init(); CELOE celoe = cm.learningAlgorithm(CELOE.class, lp, reasoner); +// ROLComponent2 celoe = cm.learningAlgorithm(ROLComponent2.class, lp, reasoner); + celoe.getConfigurator().setUseAllConstructor(false); +// celoe.getConfigurator().setUseExistsConstructor(false); + celoe.getConfigurator().setUseCardinalityRestrictions(false); + celoe.getConfigurator().setUseBooleanDatatypes(false); + celoe.getConfigurator().setUseDoubleDatatypes(false); + celoe.getConfigurator().setUseNegation(false); celoe.getConfigurator().setUseHasValueConstructor(true); - celoe.getConfigurator().setValueFrequencyThreshold(3); + celoe.getConfigurator().setValueFrequencyThreshold(10); + celoe.getConfigurator().setMaxExecutionTimeInSeconds(1000); + celoe.getConfigurator().setNoisePercentage(0.1); celoe.init(); + // debugging +// ObjectProperty place = new ObjectProperty("http://linkedgeodata.org/vocabulary#place"); +// Individual city = new Individual("http://linkedgeodata.org/vocabulary/city"); +// Individual village = new Individual("http://linkedgeodata.org/vocabulary/village"); +// Individual town = new Individual("http://linkedgeodata.org/vocabulary/town"); +// Individual suburb = new Individual("http://linkedgeodata.org/vocabulary/suburb"); +// Description vd = new ObjectValueRestriction(place, village); +// Description vc = new ObjectValueRestriction(place, city); +// Description vt = new ObjectValueRestriction(place, town); +// Description vs = new ObjectValueRestriction(place, suburb); +// Description d = new Union(vd, vt, vs); +// EvaluatedDescriptionPosOnly ed = lp.evaluate(d); +// System.out.println(ed); +// System.out.println(ed.getCoveredPositives().size() + ": " + ed.getCoveredPositives()); +// System.out.println(ed.getNotCoveredPositives().size() + ": " + ed.getNotCoveredPositives()); +// System.out.println(ed.getAdditionalInstances().size() + ": " + ed.getAdditionalInstances()); + // execute algorithm celoe.start(); // Set<EvaluatedDescriptionPosOnly> solutions = (Set<EvaluatedDescriptionPosOnly>) algorithm.getCurrentlyBestEvaluatedDescriptions(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2009-05-22 14:14:39
|
Revision: 1766 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1766&view=rev Author: jenslehmann Date: 2009-05-22 13:47:11 +0000 (Fri, 22 May 2009) Log Message: ----------- DBpedia->LGD city matching Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java trunk/src/dl-learner/org/dllearner/learningproblems/PosOnlyLP.java trunk/src/dl-learner/org/dllearner/refinementoperators/RhoDRDown.java trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaLinkedGeoData.java trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaPoint.java trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java trunk/src/dl-learner/org/dllearner/scripts/matching/LGDPoint.java trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java Modified: trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java 2009-05-21 08:46:28 UTC (rev 1765) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java 2009-05-22 13:47:11 UTC (rev 1766) @@ -28,7 +28,6 @@ import org.dllearner.utilities.datastructures.StringTuple; import org.dllearner.utilities.owl.OWLVocabulary; -import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.query.ResultSetFactory; import com.hp.hpl.jena.query.ResultSetFormatter; Modified: trunk/src/dl-learner/org/dllearner/learningproblems/PosOnlyLP.java =================================================================== --- trunk/src/dl-learner/org/dllearner/learningproblems/PosOnlyLP.java 2009-05-21 08:46:28 UTC (rev 1765) +++ trunk/src/dl-learner/org/dllearner/learningproblems/PosOnlyLP.java 2009-05-22 13:47:11 UTC (rev 1766) @@ -28,10 +28,8 @@ import java.util.SortedSet; import java.util.TreeSet; -import org.dllearner.core.EvaluatedDescription; import org.dllearner.core.LearningProblem; import org.dllearner.core.ReasonerComponent; -import org.dllearner.core.configurators.PosNegLPStandardConfigurator; import org.dllearner.core.configurators.PosOnlyLPConfigurator; import org.dllearner.core.options.CommonConfigMappings; import org.dllearner.core.options.ConfigEntry; Modified: trunk/src/dl-learner/org/dllearner/refinementoperators/RhoDRDown.java =================================================================== --- trunk/src/dl-learner/org/dllearner/refinementoperators/RhoDRDown.java 2009-05-21 08:46:28 UTC (rev 1765) +++ trunk/src/dl-learner/org/dllearner/refinementoperators/RhoDRDown.java 2009-05-22 13:47:11 UTC (rev 1766) @@ -172,6 +172,7 @@ private boolean useNegation = true; private boolean useBooleanDatatypes = true; private boolean useDoubleDatatypes = true; + @SuppressWarnings("unused") private boolean useStringDatatypes = false; private boolean disjointChecks = true; private boolean instanceBasedDisjoints = true; Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaLinkedGeoData.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaLinkedGeoData.java 2009-05-21 08:46:28 UTC (rev 1765) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaLinkedGeoData.java 2009-05-22 13:47:11 UTC (rev 1766) @@ -32,6 +32,9 @@ import java.util.Date; import java.util.LinkedList; +import org.apache.log4j.Logger; +import org.dllearner.kb.sparql.Cache; +import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlQuery; import org.dllearner.utilities.Files; @@ -50,6 +53,8 @@ */ public class DBpediaLinkedGeoData { + private static Logger logger = Logger.getLogger(DBpediaLinkedGeoData.class); + // chose between nt and dat private static String dbpediaFileFormat = "dat"; static File dbpediaFile = new File("log/DBpedia_POIs." + dbpediaFileFormat); @@ -57,12 +62,15 @@ private static File matchingFile = new File("log/DBpedia_GeoData_Links.nt"); private static File missesFile = new File("log/DBpedia_GeoData_Misses.dat"); - private static double scoreThreshold = 0.8; + private static double scoreThreshold = 0.9; private static StringDistance distance = new Jaro(); + private static String usedDatatype = "xsd:decimal"; + // public static SparqlEndpoint dbpediaEndpoint = SparqlEndpoint.getEndpointDBpedia(); public static SparqlEndpoint dbpediaEndpoint = SparqlEndpoint.getEndpointLOCALDBpedia(); private static SparqlEndpoint geoDataEndpoint = SparqlEndpoint.getEndpointLOCALGeoData(); + private static SPARQLTasks lgd = new SPARQLTasks(new Cache("cache/matcher/"), geoDataEndpoint); // read in DBpedia ontology such that we perform taxonomy reasoning // private static ReasonerComponent reasoner = TestOntologies.getTestOntology(TestOntology.DBPEDIA_OWL); @@ -283,19 +291,20 @@ // (we make sure that returned points are in the same POI class) String queryStr = "select ?point ?lat ?long ?name ?name_en ?name_int where { "; queryStr += LGDPoint.getSPARQLRestriction(dbpediaPoint.getPoiClass(), "?point"); - queryStr += "?point <http://linkedgeodata.org/vocabulary/latitude> ?lat ."; - queryStr += "FILTER (xsd:float(?lat) > " + minLat + ") ."; - queryStr += "FILTER (xsd:float(?lat) < " + maxLat + ") ."; - queryStr += "?point <http://linkedgeodata.org/vocabulary/longitude> ?long ."; - queryStr += "FILTER (xsd:float(?long) > " + minLong + ") ."; - queryStr += "FILTER (xsd:float(?long) < " + maxLong + ") ."; - queryStr += "?point <http://linkedgeodata.org/vocabulary/name> ?name ."; - queryStr += "OPTIONAL { ?point <http://linkedgeodata.org/vocabulary/name%25en> ?name_en } ."; - queryStr += "OPTIONAL { ?point <http://linkedgeodata.org/vocabulary/name_int> ?name_int } ."; + queryStr += "?point <http://www.w3.org/2003/01/geo/wgs84_pos#lat> ?lat ."; + queryStr += "FILTER ("+usedDatatype+"(?lat) > " + minLat + ") ."; + queryStr += "FILTER ("+usedDatatype+"(?lat) < " + maxLat + ") ."; + queryStr += "?point <http://www.w3.org/2003/01/geo/wgs84_pos#long> ?long ."; + queryStr += "FILTER ("+usedDatatype+"(?long) > " + minLong + ") ."; + queryStr += "FILTER ("+usedDatatype+"(?long) < " + maxLong + ") ."; + queryStr += "?point <http://linkedgeodata.org/vocabulary#name> ?name ."; + queryStr += "OPTIONAL { ?point <http://linkedgeodata.org/vocabulary#name%25en> ?name_en } ."; + queryStr += "OPTIONAL { ?point <http://linkedgeodata.org/vocabulary#name_int> ?name_int } ."; queryStr += "}"; - SparqlQuery query = new SparqlQuery(queryStr, geoDataEndpoint); - ResultSet rs = query.send(); +// SparqlQuery query = new SparqlQuery(queryStr, geoDataEndpoint); +// ResultSet rs = query.send(); + ResultSet rs = lgd.queryAsResultSet(queryStr); double highestScore = 0; String bestURI = null; @@ -312,6 +321,10 @@ // from LGD we take name, name%25en, name, int_name String dbpediaLabel1 = dbpediaPoint.getLabel(); String dbpediaLabel2 = dbpediaPoint.getPlainLabel(); + +// System.out.println("label 1: " + dbpediaLabel1); +// System.out.println("label 2: " + dbpediaLabel2); + String lgdLabel1 = qs.getLiteral("name").toString(); stringSimilarity = distance.score(dbpediaLabel1, lgdLabel1); stringSimilarity = Math.max(distance.score(dbpediaLabel2, lgdLabel1), stringSimilarity); @@ -340,10 +353,10 @@ } if(highestScore > scoreThreshold) { - System.out.println("Match: " + highestScore + " " + bestLabel + " (" + bestURI + ")"); + logger.info("Match: " + highestScore + " " + bestLabel + " (" + dbpediaPoint.getUri() + " --> " + bestURI + ")"); return URI.create(bestURI); } else { - System.out.println("No match: " + highestScore + " " + bestLabel + " (" + bestURI + ")"); + logger.info("No match: " + highestScore + " " + bestLabel + " (" + dbpediaPoint.getUri() + " --/-> " + bestURI + ")"); return null; } Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaPoint.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaPoint.java 2009-05-21 08:46:28 UTC (rev 1765) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaPoint.java 2009-05-22 13:47:11 UTC (rev 1766) @@ -25,7 +25,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.dllearner.kb.sparql.SparqlQuery; +import org.dllearner.kb.sparql.Cache; +import org.dllearner.kb.sparql.SPARQLTasks; import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.ResultSet; @@ -46,8 +47,12 @@ // number of decimals indicates a large object) private int decimalCount; - Pattern pattern = Pattern.compile("\\w+"); + // all word symbols + space + Pattern pattern = Pattern.compile("[\\w| ]+"); + // use a cache such that DBpedia points can be quickly constructed from URIs + private static SPARQLTasks st = new SPARQLTasks(new Cache("cache/dbpedia_points/"), DBpediaLinkedGeoData.dbpediaEndpoint); + /** * Constructs a DBpedia point using SPARQL. * @param uri URI of DBpedia resource. @@ -66,8 +71,9 @@ queryStr += "FILTER (?type LIKE <http://dbpedia.org/ontology/%>) ."; queryStr += "} }"; - SparqlQuery query = new SparqlQuery(queryStr, DBpediaLinkedGeoData.dbpediaEndpoint); - ResultSet rs = query.send(); +// SparqlQuery query = new SparqlQuery(queryStr, DBpediaLinkedGeoData.dbpediaEndpoint); + ResultSet rs = st.queryAsResultSet(queryStr); +// ResultSet rs = query.send(); classes = new String[] { }; List<String> classList = new LinkedList<String>(); Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java 2009-05-21 08:46:28 UTC (rev 1765) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java 2009-05-22 13:47:11 UTC (rev 1766) @@ -19,12 +19,9 @@ */ package org.dllearner.scripts.matching; -import java.io.BufferedReader; import java.io.File; -import java.io.FileReader; import java.io.IOException; import java.net.URI; -import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.zip.DataFormatException; @@ -86,10 +83,10 @@ URI matchedURI = null; if(dbpediaPoint.getPoiClass() == POIClass.CITY) { - logger.trace("searching match for " + match.getKey() + "..."); + logger.info("Eval: searching match for " + match.getKey() + "..."); matchedURI = DBpediaLinkedGeoData.findGeoDataMatch(dbpediaPoint); } else { - System.out.println("skipping"); + System.out.println("skipping " + dbpediaPoint.getUri() + " (not detected as a city)"); continue; } @@ -98,15 +95,15 @@ // no match found if(matchedURI == null) { noMatchCount++; - logger.trace(" ... no match found"); + logger.info("Eval: ... no match found"); // correct match found } else if(matchedURI.equals(testURI)) { correctMatchCount++; - logger.trace(" ... " + testURI + " correctly detected"); + logger.info("Eval: ... " + testURI + " correctly detected"); // incorrect match found } else { incorrectMatchCount++; - logger.trace(" ... " + matchedURI + " detected, but " + testURI + " is correct"); + logger.info("Eval: ... " + matchedURI + " detected, but " + testURI + " is correct"); } tests++; @@ -153,7 +150,7 @@ public static void main(String args[]) throws IOException, DataFormatException { - Logger.getRootLogger().setLevel(Level.TRACE); + Logger.getRootLogger().setLevel(Level.INFO); // test file File testFile = new File("log/geodata/owlsameas_en.dat"); // map for collecting matches @@ -161,8 +158,8 @@ // perform evaluation and print results Evaluation eval = new Evaluation(matches); System.out.println(eval.getTests() + " points tested (" + eval.getDiscarded() + " discarded)"); - System.out.println("precision: " + eval.getPrecision()); - System.out.println("recall: " + eval.getRecall()); + System.out.println("precision: " + eval.getPrecision() + " (" + eval.getCorrectMatchCount() + "/" + eval.getMatchCount() + ")"); + System.out.println("recall: " + eval.getRecall() + " (" + eval.getCorrectMatchCount() + "/" + eval.getTests() + ")"); } } Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/LGDPoint.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/LGDPoint.java 2009-05-21 08:46:28 UTC (rev 1765) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/LGDPoint.java 2009-05-22 13:47:11 UTC (rev 1766) @@ -51,7 +51,7 @@ public static String getSPARQLRestriction(POIClass poiClass, String variable) { switch(poiClass) { - case CITY : return variable + " <http://linkedgeodata.org/vocabulary#amenity> \"city\" ."; + case CITY : return "{ " + variable + " <http://linkedgeodata.org/vocabulary#place> \"city\" } UNION {" + variable + " <http://linkedgeodata.org/vocabulary#place> \"village\" } UNION {" + variable + " <http://linkedgeodata.org/vocabulary#place> \"town\" } UNION {" + variable + " <http://linkedgeodata.org/vocabulary#place> \"suburb\" }"; default: throw new Error("Cannot restrict."); } } Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java 2009-05-21 08:46:28 UTC (rev 1765) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java 2009-05-22 13:47:11 UTC (rev 1766) @@ -29,17 +29,10 @@ import java.util.zip.DataFormatException; import org.dllearner.algorithms.celoe.CELOE; -import org.dllearner.algorithms.refinement2.ROLComponent2; import org.dllearner.core.ComponentInitException; import org.dllearner.core.ComponentManager; import org.dllearner.core.LearningProblemUnsupportedException; import org.dllearner.core.ReasonerComponent; -import org.dllearner.core.owl.Description; -import org.dllearner.core.owl.Individual; -import org.dllearner.core.owl.NamedClass; -import org.dllearner.core.owl.ObjectProperty; -import org.dllearner.core.owl.ObjectValueRestriction; -import org.dllearner.core.owl.Union; import org.dllearner.kb.manipulator.Manipulator; import org.dllearner.kb.manipulator.StringToResource; import org.dllearner.kb.manipulator.Rule.Months; @@ -47,7 +40,6 @@ import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlKnowledgeSource; -import org.dllearner.learningproblems.EvaluatedDescriptionPosOnly; import org.dllearner.learningproblems.PosOnlyLP; import org.dllearner.reasoning.FastInstanceChecker; @@ -79,6 +71,12 @@ // test whether the dbpediaURI is a city String query = "ASK {<"+dbpediaURI+"> a <http://dbpedia.org/ontology/City>}"; boolean isCity = dbpedia.ask(query); + if(!isCity) { + // DBpedia ontology does not capture all cities, so we also use UMBEL, YAGO + String query2 = "ASK {<"+dbpediaURI+"> a ?x . FILTER(?x LIKE <%City%>) }"; + String query3 = "ASK {<"+dbpediaURI+"> a ?x . FILTER(?x LIKE <%Cities%>) }"; + isCity = dbpedia.ask(query2) || dbpedia.ask(query3); + } // System.out.println(isCity + " " + lgdURI); if(isCity) { positives.add(lgdURI.toString()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2009-05-25 16:15:44
|
Revision: 1767 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1767&view=rev Author: jenslehmann Date: 2009-05-25 16:15:37 +0000 (Mon, 25 May 2009) Log Message: ----------- extended DBpedia->LGD matching to cover 7 different POI types Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaLinkedGeoData.java trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaPoint.java trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java trunk/src/dl-learner/org/dllearner/scripts/matching/LGDPoint.java trunk/src/dl-learner/org/dllearner/scripts/matching/POIClass.java Modified: trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java 2009-05-22 13:47:11 UTC (rev 1766) +++ trunk/src/dl-learner/org/dllearner/kb/sparql/SPARQLTasks.java 2009-05-25 16:15:37 UTC (rev 1767) @@ -52,7 +52,7 @@ * the Endpoint the sparql queries will be send to */ public SPARQLTasks(final SparqlEndpoint sparqlEndpoint) { - super(); +// super(); this.cache = null; this.sparqlEndpoint = sparqlEndpoint; } @@ -64,7 +64,7 @@ * the Endpoint the sparql queries will be send to */ public SPARQLTasks(final Cache cache, final SparqlEndpoint sparqlEndpoint) { - super(); +// super(); this.cache = cache; this.sparqlEndpoint = sparqlEndpoint; } @@ -472,7 +472,6 @@ /** * low level, executes query returns ResultSet. - * TODO: Why convert from result set to JSON and back? See method below. * * @param sparqlQueryString * The query @@ -480,7 +479,13 @@ */ public ResultSetRewindable queryAsResultSet(String sparqlQueryString) { SparqlQuery sq = new SparqlQuery(sparqlQueryString, sparqlEndpoint); - return sq.send(); + if(cache == null) { + return sq.send(); + } else { + // get JSON from cache and convert to result set + String json = cache.executeSparqlQuery(sq); + return SparqlQuery.convertJSONtoResultSet(json); + } } /** Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaLinkedGeoData.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaLinkedGeoData.java 2009-05-22 13:47:11 UTC (rev 1766) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaLinkedGeoData.java 2009-05-25 16:15:37 UTC (rev 1767) @@ -70,7 +70,7 @@ // public static SparqlEndpoint dbpediaEndpoint = SparqlEndpoint.getEndpointDBpedia(); public static SparqlEndpoint dbpediaEndpoint = SparqlEndpoint.getEndpointLOCALDBpedia(); private static SparqlEndpoint geoDataEndpoint = SparqlEndpoint.getEndpointLOCALGeoData(); - private static SPARQLTasks lgd = new SPARQLTasks(new Cache("cache/matcher/"), geoDataEndpoint); + private static SPARQLTasks lgd = new SPARQLTasks(new Cache("cache/lgd/"), geoDataEndpoint); // read in DBpedia ontology such that we perform taxonomy reasoning // private static ReasonerComponent reasoner = TestOntologies.getTestOntology(TestOntology.DBPEDIA_OWL); @@ -266,27 +266,39 @@ fos.close(); } + /** + * The main matching method. The matching is directed from DBpedia to LGD, + * i.e. given a POI in DBpedia, we try to find a match in LGD. + * + * @param dbpediaPoint The DBpedia point. + * @return The URI of the matched LGD point or null if no match was found. + * @throws IOException Thrown if a query or linked data access does not work. + */ public static URI findGeoDataMatch(DBpediaPoint dbpediaPoint) throws IOException { // 1 degree is about 111 km (depending on the specific point) - int distanceThresholdMeters = 1000; + double distanceThresholdMeters = dbpediaPoint.getPoiClass().getMaxBox(); boolean quiet = true; if(useSparqlForGettingNearbyPoints) { - // TODO: convert from meters to lat/long - double distanceThresholdLat = 0.5; - double distanceThresholdLong = 0.5; - - // Triplify: $1= , $2= , $3 = distance in meters + // deprecated: direct specification of long/lat difference +// double distanceThresholdLat = 0.5; +// double distanceThresholdLong = 0.5; + // create a box around the point +// double minLat2 = dbpediaPoint.getGeoLat() - distanceThresholdLat; +// double maxLat2 = dbpediaPoint.getGeoLat() + distanceThresholdLat; +// double minLong2 = dbpediaPoint.getGeoLong() - distanceThresholdLong; +// double maxLong2 = dbpediaPoint.getGeoLong() + distanceThresholdLong; + + // Triplify: $1 = latitude, $2 = longitude, $3 = distance in meters + // LGD uses integer for lat/long (standard values multiplied by 10000000) // $box='longitude between CEIL(($2-($3/1000)/abs(cos(radians($1))*111))*10000000) and CEIL(($2+($3/1000)/abs(cos(radians($1))*111))*10000000) // AND latitude between CEIL(($1-($3/1000/111))*10000000) and CEIL(($1+($3/1000/111))*10000000)'; - // create a box around the point - double minLat = dbpediaPoint.getGeoLat() - distanceThresholdLat; - double maxLat = dbpediaPoint.getGeoLat() + distanceThresholdLat; - double minLong = dbpediaPoint.getGeoLong() - distanceThresholdLong; - double maxLong = dbpediaPoint.getGeoLong() + distanceThresholdLong; - + double minLat = dbpediaPoint.getGeoLat()-(distanceThresholdMeters/1000/111); + double maxLat = dbpediaPoint.getGeoLat()+(distanceThresholdMeters/1000/111); + double minLong = dbpediaPoint.getGeoLong()-(distanceThresholdMeters/1000)/Math.abs(Math.cos(Math.toRadians(dbpediaPoint.getGeoLat()))*111); + double maxLong = dbpediaPoint.getGeoLong()+(distanceThresholdMeters/1000)/Math.abs(Math.cos(Math.toRadians(dbpediaPoint.getGeoLat()))*111); // query all points in the box corresponding to this class // (we make sure that returned points are in the same POI class) String queryStr = "select ?point ?lat ?long ?name ?name_en ?name_int where { "; Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaPoint.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaPoint.java 2009-05-22 13:47:11 UTC (rev 1766) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaPoint.java 2009-05-25 16:15:37 UTC (rev 1767) @@ -68,7 +68,7 @@ queryStr += "<"+uri+"> rdfs:label ?label . "; queryStr += "OPTIONAL { <"+uri+"> rdf:type ?type . "; queryStr += "FILTER (!(?type LIKE <http://dbpedia.org/ontology/Resource>)) ."; - queryStr += "FILTER (?type LIKE <http://dbpedia.org/ontology/%>) ."; + queryStr += "FILTER (?type LIKE <http://dbpedia.org/ontology/%> || ?type LIKE <http://umbel.org/umbel/sc/%>) ."; queryStr += "} }"; // SparqlQuery query = new SparqlQuery(queryStr, DBpediaLinkedGeoData.dbpediaEndpoint); @@ -147,10 +147,28 @@ return str + ")"; } + // maps classes (in DBpedia ontology or otherwise) to supported POI classes private POIClass getPOIClass(String[] classes) { for(String clazz : classes) { +// System.out.println("class: " + clazz); if(clazz.equals("http://dbpedia.org/ontology/City")) { return POIClass.CITY; + } if(clazz.equals("http://umbel.org/umbel/sc/City")) { + return POIClass.CITY; + } else if(clazz.equals("http://dbpedia.org/ontology/Lake")) { + return POIClass.LAKE; + } else if(clazz.equals("http://dbpedia.org/ontology/University")) { + return POIClass.UNIVERSITY; + } else if(clazz.equals("http://dbpedia.org/ontology/School")) { + return POIClass.SCHOOL; + } else if(clazz.equals("http://dbpedia.org/ontology/Country")) { + return POIClass.COUNTRY; + } else if(clazz.equals("http://dbpedia.org/ontology/Airport")) { + return POIClass.AIRPORT; + } else if(clazz.equals("http://umbel.org/umbel/sc/Airfield")) { + return POIClass.AIRPORT; + } else if(clazz.equals("http://dbpedia.org/ontology/Station")) { + return POIClass.RAILWAY_STATION; } } return null; Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java 2009-05-22 13:47:11 UTC (rev 1766) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java 2009-05-25 16:15:37 UTC (rev 1767) @@ -22,6 +22,8 @@ import java.io.File; import java.io.IOException; import java.net.URI; +import java.util.Date; +import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.zip.DataFormatException; @@ -47,6 +49,11 @@ private double precision; private double recall; + private Map<POIClass, Integer> testsPerClass = new HashMap<POIClass, Integer>(); + private Map<POIClass, Integer> noMatchPerClass = new HashMap<POIClass, Integer>(); + private Map<POIClass, Integer> correctMatchPerClass = new HashMap<POIClass, Integer>(); + private Map<POIClass, Integer> incorrectMatchPerClass = new HashMap<POIClass, Integer>(); + private static Logger logger = Logger.getLogger(Evaluation.class); // map from DBpedia to LinkedGeoData @@ -58,6 +65,14 @@ correctMatchCount = 0; incorrectMatchCount = 0; + // init counts + for(POIClass poiClass : POIClass.values()) { + testsPerClass.put(poiClass, 0); + noMatchPerClass.put(poiClass, 0); + correctMatchPerClass.put(poiClass, 0); + incorrectMatchPerClass.put(poiClass, 0); + } + for(Entry<URI,URI> match : testMatches.entrySet()) { // find point in DBpedia file: // approach 1: @@ -82,12 +97,16 @@ URI matchedURI = null; - if(dbpediaPoint.getPoiClass() == POIClass.CITY) { - logger.info("Eval: searching match for " + match.getKey() + "..."); + if(dbpediaPoint.getPoiClass() == null) { + if(dbpediaPoint.getClasses().length == 0) { + System.out.println("skipping " + dbpediaPoint.getUri() + " (unknown POI type)"); + } else { + System.out.println("skipping " + dbpediaPoint.getUri() + " (unsupported POI type)"); + } + continue; + } else { + logger.info("Eval: searching match for " + match.getKey() + "(" + dbpediaPoint.getPoiClass() + ") ..."); matchedURI = DBpediaLinkedGeoData.findGeoDataMatch(dbpediaPoint); - } else { - System.out.println("skipping " + dbpediaPoint.getUri() + " (not detected as a city)"); - continue; } URI testURI = match.getValue(); @@ -95,18 +114,22 @@ // no match found if(matchedURI == null) { noMatchCount++; + inc(noMatchPerClass, dbpediaPoint.getPoiClass()); logger.info("Eval: ... no match found"); // correct match found } else if(matchedURI.equals(testURI)) { correctMatchCount++; + inc(correctMatchPerClass, dbpediaPoint.getPoiClass()); logger.info("Eval: ... " + testURI + " correctly detected"); // incorrect match found } else { incorrectMatchCount++; + inc(incorrectMatchPerClass, dbpediaPoint.getPoiClass()); logger.info("Eval: ... " + matchedURI + " detected, but " + testURI + " is correct"); } tests++; + inc(testsPerClass, dbpediaPoint.getPoiClass()); } matchCount = correctMatchCount + incorrectMatchCount; @@ -148,6 +171,50 @@ return discarded; } + private void inc(Map<POIClass,Integer> map, POIClass poiClass) { +// if(map.containsKey(poiClass)) { + map.put(poiClass, map.get(poiClass)+1); +// } else { +// map.put(poiClass, 1); +// } + } + + public Integer getCorrectMatchPerClass(POIClass poiClass) { + return correctMatchPerClass.get(poiClass); + } + + public Integer getIncorrectMatchPerClass(POIClass poiClass) { + return incorrectMatchPerClass.get(poiClass); + } + + public Integer getTestsPerClass(POIClass poiClass) { + return testsPerClass.get(poiClass); + } + + public Integer getMatchPerClass(POIClass poiClass) { + return incorrectMatchPerClass.get(poiClass) + correctMatchPerClass.get(poiClass); + } + + public Integer getNoMatchPerClass(POIClass poiClass) { + return noMatchPerClass.get(poiClass); + } + + public double getPrecisionPerClass(POIClass poiClass) { + if(getMatchPerClass(poiClass) == 0) { + return 0; + } else { + return correctMatchPerClass.get(poiClass) / (double) getMatchPerClass(poiClass); + } + } + + public double getRecallPerClass(POIClass poiClass) { + if(testsPerClass.get(poiClass) == 0) { + return 0; + } else { + return correctMatchPerClass.get(poiClass) / (double) testsPerClass.get(poiClass); + } + } + public static void main(String args[]) throws IOException, DataFormatException { Logger.getRootLogger().setLevel(Level.INFO); @@ -156,10 +223,24 @@ // map for collecting matches Map<URI,URI> matches = Utility.getMatches(testFile); // perform evaluation and print results + System.out.println(new Date()); Evaluation eval = new Evaluation(matches); + System.out.println(new Date()); + + for(POIClass poiClass : POIClass.values()) { + System.out.println(); + System.out.println("summary for POI class " + poiClass + ":"); + System.out.println(eval.getTestsPerClass(poiClass) + " points tested"); + System.out.println("precision: " + eval.getPrecisionPerClass(poiClass) + " (" + eval.getCorrectMatchPerClass(poiClass) + "/" + eval.getMatchPerClass(poiClass) + ")"); + System.out.println("recall: " + eval.getRecallPerClass(poiClass) + " (" + eval.getCorrectMatchPerClass(poiClass) + "/" + eval.getTestsPerClass(poiClass) + ")"); + } + + System.out.println(""); + System.out.println("Overall summary:"); System.out.println(eval.getTests() + " points tested (" + eval.getDiscarded() + " discarded)"); System.out.println("precision: " + eval.getPrecision() + " (" + eval.getCorrectMatchCount() + "/" + eval.getMatchCount() + ")"); System.out.println("recall: " + eval.getRecall() + " (" + eval.getCorrectMatchCount() + "/" + eval.getTests() + ")"); + } } Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/LGDPoint.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/LGDPoint.java 2009-05-22 13:47:11 UTC (rev 1766) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/LGDPoint.java 2009-05-25 16:15:37 UTC (rev 1767) @@ -52,6 +52,12 @@ public static String getSPARQLRestriction(POIClass poiClass, String variable) { switch(poiClass) { case CITY : return "{ " + variable + " <http://linkedgeodata.org/vocabulary#place> \"city\" } UNION {" + variable + " <http://linkedgeodata.org/vocabulary#place> \"village\" } UNION {" + variable + " <http://linkedgeodata.org/vocabulary#place> \"town\" } UNION {" + variable + " <http://linkedgeodata.org/vocabulary#place> \"suburb\" }"; + case UNIVERSITY : return variable + " <http://linkedgeodata.org/vocabulary#amenity> \"university\" . "; + case SCHOOL : return variable + " <http://linkedgeodata.org/vocabulary#amenity> \"school\" . "; + case AIRPORT : return variable + " <http://linkedgeodata.org/vocabulary#aeroway> \"aerodrome\" . "; + case LAKE : return variable + " <http://linkedgeodata.org/vocabulary#natural> \"water\" . "; + case COUNTRY : return variable + " <http://linkedgeodata.org/vocabulary#place> \"country\" . "; + case RAILWAY_STATION : return variable + " <http://linkedgeodata.org/vocabulary#railway> \"station\" . "; default: throw new Error("Cannot restrict."); } } Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/POIClass.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/POIClass.java 2009-05-22 13:47:11 UTC (rev 1766) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/POIClass.java 2009-05-25 16:15:37 UTC (rev 1767) @@ -28,6 +28,44 @@ */ public enum POIClass { - CITY, COUNTRY + // 50 km box + CITY (50000), + // 5 km box + AIRPORT (5000), + + // 10 km box + UNIVERSITY (10000), + + // 10 km box - usage unclear +// MUNICIPALITY (10000), + + SCHOOL (10000), + + RAILWAY_STATION (10000), + + // 1000 km box + LAKE (1000000000), + + // 5000 km box + COUNTRY (5000000); + + private double maxBox; + + POIClass(double maxBox) { + this.maxBox = maxBox; + } + + /** + * Maximum distance coordinates and actual position of + * this POI type can differ in meters. Retrieving POIs within + * the box specified by this distance should always contain + * the POI itself. + * + * @return The distance in meters different typical POIs for this + * type can differ. + */ + public double getMaxBox() { + return maxBox; + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2009-05-27 09:53:32
|
Revision: 1772 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1772&view=rev Author: jenslehmann Date: 2009-05-27 09:53:20 +0000 (Wed, 27 May 2009) Log Message: ----------- matching refined further Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/reasoning/FastInstanceChecker.java trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaLinkedGeoData.java trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaPoint.java trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java Modified: trunk/src/dl-learner/org/dllearner/reasoning/FastInstanceChecker.java =================================================================== --- trunk/src/dl-learner/org/dllearner/reasoning/FastInstanceChecker.java 2009-05-26 14:22:14 UTC (rev 1771) +++ trunk/src/dl-learner/org/dllearner/reasoning/FastInstanceChecker.java 2009-05-27 09:53:20 UTC (rev 1772) @@ -458,7 +458,8 @@ Individual i = ((ObjectValueRestriction)description).getIndividual(); ObjectProperty op = (ObjectProperty) ((ObjectValueRestriction)description).getRestrictedPropertyExpression(); - return opPos.get(op).get(individual).contains(i); + Set<Individual> inds = opPos.get(op).get(individual); + return inds == null ? false : inds.contains(i); } else if (description instanceof BooleanValueRestriction) { DatatypeProperty dp = ((BooleanValueRestriction) description) .getRestrictedPropertyExpresssion(); Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaLinkedGeoData.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaLinkedGeoData.java 2009-05-26 14:22:14 UTC (rev 1771) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaLinkedGeoData.java 2009-05-27 09:53:20 UTC (rev 1772) @@ -74,7 +74,8 @@ public static SparqlEndpoint dbpediaEndpoint = SparqlEndpoint.getEndpointLOCALDBpedia(); private static SPARQLTasks dbpedia = new SPARQLTasks(new Cache("cache/dbpedia_file/"), dbpediaEndpoint); private static SparqlEndpoint geoDataEndpoint = SparqlEndpoint.getEndpointLOCALGeoData(); - private static SPARQLTasks lgd = new SPARQLTasks(new Cache("cache/lgd/"), geoDataEndpoint); +// private static SPARQLTasks lgd = new SPARQLTasks(new Cache("cache/lgd/"), geoDataEndpoint); + private static SPARQLTasks lgd = new SPARQLTasks(geoDataEndpoint); private static Map<POIClass, Integer> noMatchPerClass = new HashMap<POIClass, Integer>(); private static Map<POIClass, Integer> matchPerClass = new HashMap<POIClass, Integer>(); @@ -363,6 +364,9 @@ queryStr += "?point <http://linkedgeodata.org/vocabulary#name> ?name ."; queryStr += "OPTIONAL { ?point <http://linkedgeodata.org/vocabulary#name%25en> ?name_en } ."; queryStr += "OPTIONAL { ?point <http://linkedgeodata.org/vocabulary#name_int> ?name_int } ."; + // filter out ways => we assume that it is always better to match a point and not a way + // (if there is a way, there should also be a point but not vice versa) + queryStr += "FILTER (?point LIKE <http://linkedgeodata.org/triplify/node/%>) ."; queryStr += "}"; // SparqlQuery query = new SparqlQuery(queryStr, geoDataEndpoint); @@ -410,6 +414,7 @@ double distanceScore = Math.pow(frac-1,4); double score = 0.8 * stringSimilarity + 0.2 * distanceScore; +// if(qs.getResource("point").toString().contains("/way/"); if(score > highestScore) { highestScore = score; Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaPoint.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaPoint.java 2009-05-26 14:22:14 UTC (rev 1771) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaPoint.java 2009-05-27 09:53:20 UTC (rev 1772) @@ -157,12 +157,22 @@ return POIClass.CITY; } else if(clazz.equals("http://dbpedia.org/ontology/Lake")) { return POIClass.LAKE; + } else if(clazz.equals("http://umbel.org/umbel/sc/Lake")) { + return POIClass.LAKE; } else if(clazz.equals("http://dbpedia.org/ontology/University")) { return POIClass.UNIVERSITY; } else if(clazz.equals("http://dbpedia.org/ontology/School")) { return POIClass.SCHOOL; + } else if(clazz.equals("http://umbel.org/umbel/sc/SchoolInstitution")) { + return POIClass.SCHOOL; + } else if(clazz.equals("http://umbel.org/umbel/sc/HighSchool")) { + return POIClass.SCHOOL; } else if(clazz.equals("http://dbpedia.org/ontology/Country")) { return POIClass.COUNTRY; + } else if(clazz.equals("http://umbel.org/umbel/sc/Country")) { + return POIClass.COUNTRY; + } else if(clazz.equals("http://umbel.org/umbel/sc/IndependentCountry")) { + return POIClass.COUNTRY; } else if(clazz.equals("http://dbpedia.org/ontology/Airport")) { return POIClass.AIRPORT; } else if(clazz.equals("http://umbel.org/umbel/sc/Airfield")) { @@ -171,18 +181,28 @@ return POIClass.RAILWAY_STATION; } else if(clazz.equals("http://dbpedia.org/ontology/Stadium")) { return POIClass.STADIUM; + } else if(clazz.equals("http://umbel.org/umbel/sc/Stadium")) { + return POIClass.STADIUM; } else if(clazz.equals("http://dbpedia.org/ontology/Island")) { return POIClass.ISLAND; } else if(clazz.equals("http://dbpedia.org/ontology/River")) { return POIClass.RIVER; + } else if(clazz.equals("http://umbel.org/umbel/sc/River")) { + return POIClass.RIVER; } else if(clazz.equals("http://dbpedia.org/ontology/Bridge")) { return POIClass.BRIDGE; + } else if(clazz.equals("http://umbel.org/umbel/sc/Bridge")) { + return POIClass.BRIDGE; } else if(clazz.equals("http://dbpedia.org/ontology/Mountain")) { return POIClass.MOUNTAIN; } else if(clazz.equals("http://umbel.org/umbel/sc/Mountain")) { return POIClass.MOUNTAIN; } else if(clazz.equals("http://dbpedia.org/ontology/Lighthouse")) { return POIClass.LIGHT_HOUSE; + } else if(clazz.equals("http://umbel.org/umbel/sc/Lighthouse")) { + return POIClass.LIGHT_HOUSE; + } else if(clazz.equals("http://dbpedia.org/ontology/RadioStation")) { + return POIClass.RADIO_STATION; } } return null; Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java 2009-05-26 14:22:14 UTC (rev 1771) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java 2009-05-27 09:53:20 UTC (rev 1772) @@ -86,6 +86,10 @@ // logger.trace("searching match for " + match.getKey() + "..."); + // we make the assumption that we always want to match against nodes + if(match.getValue().toString().contains("/way/")) + continue; + DBpediaPoint dbpediaPoint = null; try { dbpediaPoint = new DBpediaPoint(match.getKey()); Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java 2009-05-26 14:22:14 UTC (rev 1771) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/LearnOSMClasses.java 2009-05-27 09:53:20 UTC (rev 1772) @@ -69,16 +69,17 @@ URI dbpediaURI = match.getKey(); URI lgdURI = match.getValue(); // test whether the dbpediaURI is a city - String query = "ASK {<"+dbpediaURI+"> a <http://dbpedia.org/ontology/City>}"; - boolean isCity = dbpedia.ask(query); - if(!isCity) { - // DBpedia ontology does not capture all cities, so we also use UMBEL, YAGO - String query2 = "ASK {<"+dbpediaURI+"> a ?x . FILTER(?x LIKE <%City%>) }"; - String query3 = "ASK {<"+dbpediaURI+"> a ?x . FILTER(?x LIKE <%Cities%>) }"; - isCity = dbpedia.ask(query2) || dbpedia.ask(query3); - } +// String query = "ASK {<"+dbpediaURI+"> a <http://dbpedia.org/ontology/City>}"; + String query = "ASK {<"+dbpediaURI+"> a <http://dbpedia.org/ontology/Organisation>}"; + boolean isInClass = dbpedia.ask(query); +// if(!isCity) { +// // DBpedia ontology does not capture all cities, so we also use UMBEL, YAGO +// String query2 = "ASK {<"+dbpediaURI+"> a ?x . FILTER(?x LIKE <%City%>) }"; +// String query3 = "ASK {<"+dbpediaURI+"> a ?x . FILTER(?x LIKE <%Cities%>) }"; +// isCity = dbpedia.ask(query2) || dbpedia.ask(query3); +// } // System.out.println(isCity + " " + lgdURI); - if(isCity) { + if(isInClass) { positives.add(lgdURI.toString()); System.out.println("+\""+lgdURI+"\""); } else { @@ -121,9 +122,9 @@ celoe.getConfigurator().setUseDoubleDatatypes(false); celoe.getConfigurator().setUseNegation(false); celoe.getConfigurator().setUseHasValueConstructor(true); - celoe.getConfigurator().setValueFrequencyThreshold(10); - celoe.getConfigurator().setMaxExecutionTimeInSeconds(1000); - celoe.getConfigurator().setNoisePercentage(0.1); + celoe.getConfigurator().setValueFrequencyThreshold(3); + celoe.getConfigurator().setMaxExecutionTimeInSeconds(100); + celoe.getConfigurator().setNoisePercentage(0.2); celoe.init(); // debugging This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ku...@us...> - 2009-05-29 15:22:34
|
Revision: 1781 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1781&view=rev Author: kurzum Date: 2009-05-29 15:22:25 +0000 (Fri, 29 May 2009) Log Message: ----------- classes to produce fragment ontology with all strings in lgd converted to classes Added Paths: ----------- trunk/src/dl-learner/org/dllearner/kb/manipulator/AddAllStringsAsClasses.java trunk/src/dl-learner/org/dllearner/scripts/matching/Stanley.java Added: trunk/src/dl-learner/org/dllearner/kb/manipulator/AddAllStringsAsClasses.java =================================================================== --- trunk/src/dl-learner/org/dllearner/kb/manipulator/AddAllStringsAsClasses.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/kb/manipulator/AddAllStringsAsClasses.java 2009-05-29 15:22:25 UTC (rev 1781) @@ -0,0 +1,123 @@ +/** + * Copyright (C) 2007-2008, 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.kb.manipulator; + +import java.net.URLEncoder; +import java.util.SortedSet; +import java.util.TreeSet; + +import org.dllearner.kb.extraction.Node; +import org.dllearner.utilities.JamonMonitorLogger; +import org.dllearner.utilities.datastructures.RDFNodeTuple; +import org.dllearner.utilities.owl.OWLVocabulary; + +import com.hp.hpl.jena.rdf.model.Literal; +import com.hp.hpl.jena.rdf.model.impl.ResourceImpl; + +public class AddAllStringsAsClasses extends Rule{ + String namespace; + + + /** + * @param month + * @param resourceNamespace ns for the created uris + * @param limit does not convert strings that are longer than a specific value, zero means convert all + */ + public AddAllStringsAsClasses(Months month, String resourceNamespace) { + super(month); + String slash = ""; + if(!resourceNamespace.endsWith("/")) { + slash="/"; + } + + this.namespace = resourceNamespace+slash; + + } + + + @Override + public SortedSet<RDFNodeTuple> applyRule(Node subject, SortedSet<RDFNodeTuple> tuples){ + SortedSet<RDFNodeTuple> keep = new TreeSet<RDFNodeTuple>(); + for (RDFNodeTuple tuple : tuples) { + //System.out.println(tuple); + //System.exit(0); + if(tuple.b.isURIResource()){ + //System.out.println("added"); + keep.add(tuple); + continue; + } + + //RDFNode b = null; + if(!tuple.b.isURIResource()){ + boolean replace = true; + + //check for numbers + if(((Literal) tuple.b).getDatatypeURI()!= null){ + replace = false; + } + + //if string is an uri + if(tuple.b.toString().startsWith("http://")){ + //System.out.println(tuple.b.toString()); + if( tuple.b.toString().startsWith("http://ru.wikipedia.org/wiki/СеÑ") || + tuple.bPartContains(" ") + ){ + //filter + continue; + } + + tuple.b = new ResourceImpl(tuple.b.toString()); + replace = false; + } + + + if (replace){ + + String tmp = tuple.b.toString(); + //System.out.println("replaced: "+tmp); + try{ + //encode + tmp = URLEncoder.encode(tmp, "UTF-8"); + }catch (Exception e) { + e.printStackTrace(); + System.exit(0); + } + tmp = namespace+tmp; + tmp = tmp.replaceAll("%", "_"); + keep.add(new RDFNodeTuple(new ResourceImpl(OWLVocabulary.RDF_TYPE),new ResourceImpl(tmp))); + + }else { + // do nothing + }//end else + + }//end if + keep.add(tuple); + } + return keep; + } + + @Override + public void logJamon(){ + JamonMonitorLogger.increaseCount(AddAllStringsAsClasses.class, "replacedObjects"); + } + + + +} Added: trunk/src/dl-learner/org/dllearner/scripts/matching/Stanley.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/Stanley.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/Stanley.java 2009-05-29 15:22:25 UTC (rev 1781) @@ -0,0 +1,155 @@ +/** + * 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.scripts.matching; + +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; +import java.util.Map.Entry; +import java.util.zip.DataFormatException; + +import org.dllearner.algorithms.celoe.CELOE; +import org.dllearner.core.ComponentInitException; +import org.dllearner.core.ComponentManager; +import org.dllearner.core.LearningProblemUnsupportedException; +import org.dllearner.core.ReasonerComponent; +import org.dllearner.kb.manipulator.AddAllStringsAsClasses; +import org.dllearner.kb.manipulator.Manipulator; +import org.dllearner.kb.manipulator.Rule.Months; +import org.dllearner.kb.sparql.Cache; +import org.dllearner.kb.sparql.SPARQLTasks; +import org.dllearner.kb.sparql.SparqlEndpoint; +import org.dllearner.kb.sparql.SparqlKnowledgeSource; +import org.dllearner.learningproblems.PosOnlyLP; +import org.dllearner.reasoning.FastInstanceChecker; + +/** + * This class produces a fragment for dbpedia and linkedgeodata + * for lgd all strings are converted to classes + * + */ +@SuppressWarnings("unused") +public class Stanley { + + private static SparqlEndpoint dbpediaEndpoint = SparqlEndpoint.getEndpointLOCALDBpedia(); +// private static SparqlEndpoint geoDataEndpoint = SparqlEndpoint.getEndpointLOCALGeoData(); + + public static void main(String args[]) throws IOException, DataFormatException, LearningProblemUnsupportedException, ComponentInitException { + File matchesFile = new File("log/geodata/owlsameas_en.dat"); + Map<URI,URI> matches = Utility.getMatches(matchesFile); + + //SPARQLTasks dbpedia = new SPARQLTasks(new Cache("matching"),dbpediaEndpoint); + Set<String> positives = new TreeSet<String>(); + Set<String> negatives = new TreeSet<String>(); + + // loop through all matches + for(Entry<URI,URI> match : matches.entrySet()) { + URI dbpediaURI = match.getKey(); + + URI lgdURI = match.getValue(); + // test whether the dbpediaURI is a city +// String query = "ASK {<"+dbpediaURI+"> a <http://dbpedia.org/ontology/City>}"; + //String query = "ASK {<"+dbpediaURI+"> a <http://dbpedia.org/ontology/Organisation>}"; + //boolean isInClass = dbpedia.ask(query); +// if(!isCity) { +// // DBpedia ontology does not capture all cities, so we also use UMBEL, YAGO +// String query2 = "ASK {<"+dbpediaURI+"> a ?x . FILTER(?x LIKE <%City%>) }"; +// String query3 = "ASK {<"+dbpediaURI+"> a ?x . FILTER(?x LIKE <%Cities%>) }"; +// isCity = dbpedia.ask(query2) || dbpedia.ask(query3); +// } +// System.out.println(isCity + " " + lgdURI); +// if(isInClass) { +// +// System.out.println("+\""+lgdURI+"\""); +// } else { +// negatives.add(lgdURI.toString()); +// System.out.println("-\""+lgdURI+"\""); +// } + //System.out.println(lgdURI.toString()); + positives.add(lgdURI.toString()); + } + //System.exit(0); + Set<String> instances = new TreeSet<String>(); + instances.addAll(positives); + instances.addAll(negatives); + + System.out.println(instances.size() + " instances - " + positives.size() + " positive examples"); + + // plug together DL-Learner components + ComponentManager cm = ComponentManager.getInstance(); + + SparqlKnowledgeSource ks = cm.knowledgeSource(SparqlKnowledgeSource.class); + ks.getConfigurator().setInstances(instances); + ks.getConfigurator().setPredefinedEndpoint("LOCALGEODATA"); + //ks.getConfigurator().setPredefinedEndpoint("LOCALDBPEDIA"); + ks.getConfigurator().setSaveExtractedFragment(true); + Manipulator m = Manipulator.getDefaultManipulator(); + //m.addRule(new StringToResource(Months.NOVEMBER,"http://linkedgeodata.org/vocabulary", 0)); + m.addRule(new AddAllStringsAsClasses(Months.NOVEMBER, "http://linkedgeodata.org/vocabulary")); + ks.setManipulator(m); + ks.init(); + System.exit(0); + ReasonerComponent reasoner = cm.reasoner(FastInstanceChecker.class, ks); + reasoner.init(); + + PosOnlyLP lp = cm.learningProblem(PosOnlyLP.class, reasoner); + lp.getConfigurator().setPositiveExamples(positives); + lp.init(); + + CELOE celoe = cm.learningAlgorithm(CELOE.class, lp, reasoner); +// ROLComponent2 celoe = cm.learningAlgorithm(ROLComponent2.class, lp, reasoner); + celoe.getConfigurator().setUseAllConstructor(false); +// celoe.getConfigurator().setUseExistsConstructor(false); + celoe.getConfigurator().setUseCardinalityRestrictions(false); + celoe.getConfigurator().setUseBooleanDatatypes(false); + celoe.getConfigurator().setUseDoubleDatatypes(false); + celoe.getConfigurator().setUseNegation(false); + celoe.getConfigurator().setUseHasValueConstructor(true); + celoe.getConfigurator().setValueFrequencyThreshold(3); + celoe.getConfigurator().setMaxExecutionTimeInSeconds(100); + celoe.getConfigurator().setNoisePercentage(0.2); + celoe.init(); + + // debugging +// ObjectProperty place = new ObjectProperty("http://linkedgeodata.org/vocabulary#place"); +// Individual city = new Individual("http://linkedgeodata.org/vocabulary/city"); +// Individual village = new Individual("http://linkedgeodata.org/vocabulary/village"); +// Individual town = new Individual("http://linkedgeodata.org/vocabulary/town"); +// Individual suburb = new Individual("http://linkedgeodata.org/vocabulary/suburb"); +// Description vd = new ObjectValueRestriction(place, village); +// Description vc = new ObjectValueRestriction(place, city); +// Description vt = new ObjectValueRestriction(place, town); +// Description vs = new ObjectValueRestriction(place, suburb); +// Description d = new Union(vd, vt, vs); +// EvaluatedDescriptionPosOnly ed = lp.evaluate(d); +// System.out.println(ed); +// System.out.println(ed.getCoveredPositives().size() + ": " + ed.getCoveredPositives()); +// System.out.println(ed.getNotCoveredPositives().size() + ": " + ed.getNotCoveredPositives()); +// System.out.println(ed.getAdditionalInstances().size() + ": " + ed.getAdditionalInstances()); + + // execute algorithm + celoe.start(); +// Set<EvaluatedDescriptionPosOnly> solutions = (Set<EvaluatedDescriptionPosOnly>) algorithm.getCurrentlyBestEvaluatedDescriptions(); + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2009-06-11 14:55:13
|
Revision: 1793 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1793&view=rev Author: jenslehmann Date: 2009-06-11 14:55:10 +0000 (Thu, 11 Jun 2009) Log Message: ----------- script for evaluating CELOE Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/core/owl/DatatypeProperty.java trunk/src/dl-learner/org/dllearner/core/owl/Entity.java trunk/src/dl-learner/org/dllearner/core/owl/Individual.java trunk/src/dl-learner/org/dllearner/core/owl/NamedClass.java trunk/src/dl-learner/org/dllearner/core/owl/ObjectProperty.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java Modified: trunk/src/dl-learner/org/dllearner/core/owl/DatatypeProperty.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/owl/DatatypeProperty.java 2009-06-07 21:01:00 UTC (rev 1792) +++ trunk/src/dl-learner/org/dllearner/core/owl/DatatypeProperty.java 2009-06-11 14:55:10 UTC (rev 1793) @@ -19,6 +19,7 @@ */ package org.dllearner.core.owl; +import java.net.URI; import java.util.Map; import org.dllearner.utilities.Helper; @@ -46,6 +47,10 @@ return name; } + public URI getURI() { + return URI.create(name); + } + @Override public String toString() { return toString(null, null); Modified: trunk/src/dl-learner/org/dllearner/core/owl/Entity.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/owl/Entity.java 2009-06-07 21:01:00 UTC (rev 1792) +++ trunk/src/dl-learner/org/dllearner/core/owl/Entity.java 2009-06-11 14:55:10 UTC (rev 1793) @@ -19,6 +19,8 @@ */ package org.dllearner.core.owl; +import java.net.URI; + /** * Marker interface for classes, properties, individuals. * @@ -27,4 +29,6 @@ */ public interface Entity extends NamedKBElement { + public URI getURI(); + } Modified: trunk/src/dl-learner/org/dllearner/core/owl/Individual.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/owl/Individual.java 2009-06-07 21:01:00 UTC (rev 1792) +++ trunk/src/dl-learner/org/dllearner/core/owl/Individual.java 2009-06-11 14:55:10 UTC (rev 1793) @@ -19,6 +19,7 @@ */ package org.dllearner.core.owl; +import java.net.URI; import java.util.Map; import org.dllearner.utilities.Helper; @@ -37,6 +38,10 @@ return name; } + public URI getURI() { + return URI.create(name); + } + public Individual(String name) { this.name = name; } Modified: trunk/src/dl-learner/org/dllearner/core/owl/NamedClass.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/owl/NamedClass.java 2009-06-07 21:01:00 UTC (rev 1792) +++ trunk/src/dl-learner/org/dllearner/core/owl/NamedClass.java 2009-06-11 14:55:10 UTC (rev 1793) @@ -47,6 +47,10 @@ return name; } + public URI getURI() { + return URI.create(name); + } + public int getLength() { return 1; } Modified: trunk/src/dl-learner/org/dllearner/core/owl/ObjectProperty.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/owl/ObjectProperty.java 2009-06-07 21:01:00 UTC (rev 1792) +++ trunk/src/dl-learner/org/dllearner/core/owl/ObjectProperty.java 2009-06-11 14:55:10 UTC (rev 1793) @@ -19,6 +19,7 @@ */ package org.dllearner.core.owl; +import java.net.URI; import java.util.Map; import org.dllearner.utilities.Helper; @@ -40,6 +41,10 @@ return 1; } + public URI getURI() { + return URI.create(name); + } + @Override public String toString() { return name; Added: trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java 2009-06-11 14:55:10 UTC (rev 1793) @@ -0,0 +1,363 @@ +/** + * Copyright (C) 2007-2008, 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.scripts.evaluation; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.text.DecimalFormat; +import java.util.Arrays; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.dllearner.algorithms.celoe.CELOE; +import org.dllearner.core.ComponentInitException; +import org.dllearner.core.ComponentManager; +import org.dllearner.core.EvaluatedDescription; +import org.dllearner.core.LearningProblemUnsupportedException; +import org.dllearner.core.ReasonerComponent; +import org.dllearner.core.configurators.CELOEConfigurator; +import org.dllearner.core.owl.Individual; +import org.dllearner.core.owl.NamedClass; +import org.dllearner.kb.OWLFile; +import org.dllearner.learningproblems.ClassLearningProblem; +import org.dllearner.learningproblems.EvaluatedDescriptionClass; +import org.dllearner.reasoning.FastInstanceChecker; +import org.dllearner.utilities.statistics.Stat; + +/** + * The script loads an ontology, loops through all classes having at least a + * specified amount of instances, and evaluates a learning algorithm on those. + * It measures how many times the algorithm missed an appropriate solution of a + * problem, how often it found the correct solution (and the position of the + * solution in the suggestion list). It also tries to find consequences of + * adding an axiom (either it helped to detect an inconsistency or the class now + * has more inferred instances). + * + * @author Jens Lehmann + * + */ +public class OntologyEngineering { + + private static double minAccuracy = 0.85; + + private static int minInstanceCount = 3; + + private static int algorithmRuntimeInSeconds = 10; + + private static DecimalFormat df = new DecimalFormat(); + + @SuppressWarnings("unchecked") + public static void main(String[] args) throws ComponentInitException, + LearningProblemUnsupportedException, IOException { + + Logger.getRootLogger().setLevel(Level.WARN); + + // OWL file is the first argument of the script + if (args.length == 0) { + System.out.println("You need to give an OWL file as argument."); + System.exit(0); + } + File owlFile = new File(args[0]); + + ComponentManager cm = ComponentManager.getInstance(); + + // load OWL in reasoner + OWLFile ks = cm.knowledgeSource(OWLFile.class); + ks.getConfigurator().setUrl(owlFile.toURI().toURL()); + ks.init(); + ReasonerComponent reasoner = cm.reasoner(FastInstanceChecker.class, ks); + reasoner.init(); + System.out.println("Loaded ontology " + args[0] + "."); + + String baseURI = reasoner.getBaseURI(); + Map<String, String> prefixes = reasoner.getPrefixes(); + + // general statistical information + String userInputProtocol = ""; + int classCandidatesCount = 0; + Stat instanceCountStat = new Stat(); + + // equivalence classes + int candidatesAboveThresholdCount = 0; + int missesCount = 0; + int foundDescriptionCount = 0; + int noSensibleDescriptionCount = 0; + int inconsistencyDetected = 0; + int moreInstancesCount = 0; + Stat moreInstancesCountStat = new Stat(); + Stat accStat = new Stat(); + Stat accSelectedStat = new Stat(); + Stat accAboveThresholdStat = new Stat(); + Stat positionStat = new Stat(); + + // super classes + int candidatesAboveThresholdCountSC = 0; + int missesCountSC = 0; + int foundDescriptionCountSC = 0; + int noSensibleDescriptionCountSC = 0; + int inconsistencyDetectedSC = 0; + int moreInstancesCountSC = 0; + Stat moreInstancesCountStatSC = new Stat(); + Stat accStatSC = new Stat(); + Stat accSelectedStatSC = new Stat(); + Stat accAboveThresholdStatSC = new Stat(); + Stat positionStatSC = new Stat(); + + // loop through all classes + Set<NamedClass> classes = new TreeSet<NamedClass>(reasoner.getNamedClasses()); + classes.remove(new NamedClass("http://www.w3.org/2002/07/owl#Thing")); + // reduce number of classes for testing purposes +// shrinkSet(classes, 20); + for (NamedClass nc : classes) { + // check whether the class has sufficient instances + int instanceCount = reasoner.getIndividuals(nc).size(); + if (instanceCount < minInstanceCount) { + System.out.println("class " + nc.toManchesterSyntaxString(baseURI, prefixes) + + " has only " + instanceCount + " instances (minimum: " + minInstanceCount + + ") - skipping"); + } else { + System.out.println("\nlearning axioms for class " + + nc.toManchesterSyntaxString(baseURI, prefixes) + " with " + instanceCount + + " instances"); + classCandidatesCount++; + instanceCountStat.addNumber(instanceCount); + + TreeSet<EvaluatedDescriptionClass> suggestions; + // i=0 is equivalence and i=1 is super class + for (int i = 0; i <= 1; i++) { + // learn equivalence axiom + ClassLearningProblem lp = cm.learningProblem(ClassLearningProblem.class, + reasoner); + lp.getConfigurator().setClassToDescribe(nc.getURI().toURL()); + if (i == 0) { + System.out + .println("generating suggestions for equivalent class (please wait " + + algorithmRuntimeInSeconds + " seconds)"); + lp.getConfigurator().setType("equivalence"); + } else { + System.out.println("suggestions for super class (please wait " + + algorithmRuntimeInSeconds + " seconds)"); + lp.getConfigurator().setType("superClass"); + } + lp.init(); + + CELOE celoe = cm.learningAlgorithm(CELOE.class, lp, reasoner); + CELOEConfigurator cf = celoe.getConfigurator(); + cf.setUseNegation(false); + cf.setValueFrequencyThreshold(3); + cf.setMaxExecutionTimeInSeconds(algorithmRuntimeInSeconds); + cf.setNoisePercentage(0.05); + cf.setMaxNrOfResults(10); + celoe.init(); + + celoe.start(); + + // test whether a solution above the threshold was found + EvaluatedDescription best = celoe.getCurrentlyBestEvaluatedDescription(); + double bestAcc = best.getAccuracy(); + if (i == 0) { + accStat.addNumber(bestAcc); + } else { + accStatSC.addNumber(bestAcc); + } + if (bestAcc < minAccuracy) { + System.out + .println("The algorithm did not find a suggestion with an accuracy above the threshold of " + + (100 * minAccuracy) + + "%. (The best one was \"" + + best.getDescription().toManchesterSyntaxString(baseURI, + prefixes) + + "\" with an accuracy of " + + df.format(bestAcc) + ".) - skipping"); + } else { + + if (i == 0) { + accAboveThresholdStat.addNumber(bestAcc); + candidatesAboveThresholdCount++; + } else { + accAboveThresholdStatSC.addNumber(bestAcc); + candidatesAboveThresholdCountSC++; + } + + suggestions = (TreeSet<EvaluatedDescriptionClass>) celoe + .getCurrentlyBestEvaluatedDescriptions(); + List<EvaluatedDescriptionClass> suggestionsList = new LinkedList<EvaluatedDescriptionClass>( + suggestions.descendingSet()); + + int nr = 0; + for (EvaluatedDescription suggestion : suggestionsList) { + System.out.println(nr + + ": " + + suggestion.getDescription().toManchesterSyntaxString(baseURI, + prefixes) + " (accuracy: " + + df.format(suggestion.getAccuracy()) + ")"); + nr++; + } + + // knowledge engineer feedback: + // - number 0-9: one of axioms is appropriate + // - m ("missing"): none of the axioms is appropriate, + // but there is one which was not found + // - n ("none"): none of the axioms is appropriate and + // there is probably no other appropriate axiom + System.out + .println("Type a number (\"0\"-\"" + + (suggestions.size() - 1) + + "\") if any of the suggestions is appropriate (if several are possible choose the lowest number). Type \"n\" if there is no appropriate suggestion for this class in your opinion. Type \"m\" if there is an appropriate suggestion in your opinion, but the algorithm did not suggest it."); + + String[] inputs = new String[suggestions.size() + 2]; + inputs[0] = "m"; + inputs[1] = "n"; + for (int j = 0; j < suggestions.size(); j++) { + inputs[j + 2] = "" + j; + } + + List<String> allowedInputs = Arrays.asList(inputs); + String input; + do { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + input = br.readLine(); + } while (!allowedInputs.contains(input)); + + if (input.equals("m")) { + if (i == 0) { + missesCount++; + } else { + missesCountSC++; + } + System.out + .println("You said the algorithm missed a possible solution."); + } else if (input.equals("n")) { + if (i == 0) { + noSensibleDescriptionCount++; + } else { + noSensibleDescriptionCountSC++; + } + System.out + .println("You said that there is no reasonable class expression."); + } else { + int selectedNr = Integer.parseInt(input); + EvaluatedDescriptionClass selectedExpression = suggestionsList + .get(selectedNr); + System.out.println("You selected \"" + + selectedExpression.getDescription().toManchesterSyntaxString( + baseURI, prefixes) + "\"."); + boolean isConsistent = selectedExpression.isConsistent(); + if (!isConsistent) { + System.out + .println("Adding the expression leads to an inconsistency of the knowledge base (which is positive since it is a meaningful expression)."); + } + // selectedExpression.getAdditionalInstances(). + Set<Individual> addInst = selectedExpression.getAdditionalInstances(); + int additionalInstances = addInst.size(); + if (additionalInstances > 0) { + System.out.println("Adding the expression leads to " + + additionalInstances + + " new instances, e.g. \"" + + addInst.iterator().next().toManchesterSyntaxString( + baseURI, prefixes) + "\"."); + } + + if (i == 0) { + accSelectedStat.addNumber(bestAcc); + positionStat.addNumber(selectedNr); + foundDescriptionCount++; + if (!isConsistent) { + inconsistencyDetected++; + } + if (additionalInstances > 0) { + moreInstancesCount++; + moreInstancesCountStat.addNumber(additionalInstances); + } + } else { + accSelectedStatSC.addNumber(bestAcc); + positionStatSC.addNumber(selectedNr); + foundDescriptionCountSC++; + if (!isConsistent) { + inconsistencyDetectedSC++; + } + if (additionalInstances > 0) { + moreInstancesCountSC++; + moreInstancesCountStatSC.addNumber(additionalInstances); + } + } + } + } + } + } + } + + // print summary + System.out.println(); + System.out + .println("knowledge engineering process finished successfully - summary shown below"); + System.out.println(); + System.out.println("ontology: " + args[0]); + System.out.println("user input protocol: " + userInputProtocol); + System.out.println("classes in ontology: " + classes.size()); + System.out.println("classes with at least " + minInstanceCount + " instances: " + + classCandidatesCount); + System.out.println(); + + System.out.println("statistics for equivalence axioms:"); + System.out.println("classes above " + (minAccuracy * 100) + "% threshold: " + + candidatesAboveThresholdCount); + System.out.println("axioms learned succesfully: " + foundDescriptionCount); + System.out.println("axioms missed: " + missesCount); + System.out.println("axiom with no sensible axioms: " + noSensibleDescriptionCount); + System.out.println("average accuracy overall: " + accStat.prettyPrint("")); + System.out.println("average accuracy of selected expressions: " + + accSelectedStat.prettyPrint("")); + System.out.println("average accuracy of expressions above threshold " + + accAboveThresholdStat.prettyPrint("")); + System.out.println("average number typed by user " + positionStat.prettyPrint("")); + System.out.println(); + + System.out.println("statistics for super class axioms:"); + System.out.println("classes above " + (minAccuracy * 100) + "% threshold: " + + candidatesAboveThresholdCountSC); + System.out.println("axioms learned succesfully: " + foundDescriptionCountSC); + System.out.println("axioms missed: " + missesCountSC); + System.out.println("axiom with no sensible axioms: " + noSensibleDescriptionCountSC); + System.out.println("average accuracy overall: " + accStatSC.prettyPrint("")); + System.out.println("average accuracy of selected expressions: " + + accSelectedStatSC.prettyPrint("")); + System.out.println("average accuracy of expressions above threshold " + + accAboveThresholdStatSC.prettyPrint("")); + System.out.println("average number typed by user " + positionStatSC.prettyPrint("")); + } + + @SuppressWarnings("unused") + private static void shrinkSet(Set set, int nrOfElements) { + while (set.size() > nrOfElements) { + Iterator it = set.iterator(); + it.next(); + it.remove(); + } + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2009-06-15 06:15:31
|
Revision: 1797 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1797&view=rev Author: jenslehmann Date: 2009-06-15 06:14:21 +0000 (Mon, 15 Jun 2009) Log Message: ----------- collect more statistical values Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/algorithms/celoe/CELOE.java trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java Modified: trunk/src/dl-learner/org/dllearner/algorithms/celoe/CELOE.java =================================================================== --- trunk/src/dl-learner/org/dllearner/algorithms/celoe/CELOE.java 2009-06-15 05:47:44 UTC (rev 1796) +++ trunk/src/dl-learner/org/dllearner/algorithms/celoe/CELOE.java 2009-06-15 06:14:21 UTC (rev 1797) @@ -118,7 +118,7 @@ private ConceptComparator descriptionComparator = new ConceptComparator(); // statistical variables - private int descriptionTests = 0; + private int expressionTests = 0; private int minHorizExp = 0; private int maxHorizExp = 0; @@ -283,9 +283,9 @@ } if (stop) { - logger.info("Algorithm stopped ("+descriptionTests+" descriptions tested).\n"); + logger.info("Algorithm stopped ("+expressionTests+" descriptions tested).\n"); } else { - logger.info("Algorithm terminated successfully ("+descriptionTests+" descriptions tested).\n"); + logger.info("Algorithm terminated successfully ("+expressionTests+" descriptions tested).\n"); } // print solution(s) @@ -345,7 +345,7 @@ // quality of description (return if too weak) double accuracy = learningProblem.getAccuracyOrTooWeak(description, noise); - descriptionTests++; + expressionTests++; // System.out.println(description + " " + accuracy); if(accuracy == -1) { return false; @@ -503,7 +503,7 @@ nodes = new TreeSet<OENode>(heuristic); descriptions = new TreeSet<Description>(new ConceptComparator()); bestEvaluatedDescriptions.getSet().clear(); - descriptionTests = 0; + expressionTests = 0; } @Override @@ -582,4 +582,10 @@ return minHorizExp; } + /** + * @return the expressionTests + */ + public int getClassExpressionTests() { + return expressionTests; + } } Modified: trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java 2009-06-15 05:47:44 UTC (rev 1796) +++ trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java 2009-06-15 06:14:21 UTC (rev 1797) @@ -101,6 +101,7 @@ String userInputProtocol = ""; int classCandidatesCount = 0; Stat instanceCountStat = new Stat(); + Stat classExpressionTestsStat = new Stat(); // equivalence classes int candidatesAboveThresholdCount = 0; @@ -109,6 +110,7 @@ int noSensibleDescriptionCount = 0; int inconsistencyDetected = 0; int moreInstancesCount = 0; + int nonPerfectCount = 0; Stat moreInstancesCountStat = new Stat(); Stat accStat = new Stat(); Stat accSelectedStat = new Stat(); @@ -122,6 +124,7 @@ int noSensibleDescriptionCountSC = 0; int inconsistencyDetectedSC = 0; int moreInstancesCountSC = 0; + int nonPerfectCountSC = 0; Stat moreInstancesCountStatSC = new Stat(); Stat accStatSC = new Stat(); Stat accSelectedStatSC = new Stat(); @@ -176,7 +179,8 @@ celoe.init(); celoe.start(); - + classExpressionTestsStat.addNumber(celoe.getClassExpressionTests()); + // test whether a solution above the threshold was found EvaluatedDescription best = celoe.getCurrentlyBestEvaluatedDescription(); double bestAcc = best.getAccuracy(); @@ -295,6 +299,9 @@ moreInstancesCount++; moreInstancesCountStat.addNumber(additionalInstances); } + if(bestAcc < 0.9999) { + nonPerfectCount++; + } } else { accSelectedStatSC.addNumber(bestAcc); positionStatSC.addNumber(selectedNr); @@ -306,6 +313,9 @@ moreInstancesCountSC++; moreInstancesCountStatSC.addNumber(additionalInstances); } + if(bestAcc < 0.9999) { + nonPerfectCountSC++; + } } } } @@ -323,10 +333,12 @@ .println("knowledge engineering process finished successfully - summary shown below"); System.out.println(); System.out.println("ontology: " + args[0]); + System.out.println("settings: " + minAccuracy + " min accuracy, " + minInstanceCount + " min instances, " + algorithmRuntimeInSeconds + "s algorithm runtime"); System.out.println("user input protocol: " + userInputProtocol); System.out.println("classes in ontology: " + classes.size()); System.out.println("classes with at least " + minInstanceCount + " instances: " + classCandidatesCount); + System.out.println("class expressions tested: " + classExpressionTestsStat.prettyPrint("")); System.out.println(); System.out.println("statistics for equivalence axioms:"); @@ -334,13 +346,14 @@ + candidatesAboveThresholdCount); System.out.println("axioms learned succesfully: " + foundDescriptionCount); System.out.println("axioms missed: " + missesCount); - System.out.println("axiom with no sensible axioms: " + noSensibleDescriptionCount); + System.out.println("class with no sensible axioms: " + noSensibleDescriptionCount); System.out.println("average accuracy overall: " + accStat.prettyPrint("")); System.out.println("average accuracy of selected expressions: " + accSelectedStat.prettyPrint("")); - System.out.println("average accuracy of expressions above threshold " + System.out.println("average accuracy of expressions above threshold: " + accAboveThresholdStat.prettyPrint("")); - System.out.println("average number typed by user " + positionStat.prettyPrint("")); + System.out.println("non-perfect (not 100% accuracy) axioms selected: " + nonPerfectCount); + System.out.println("average number typed by user: " + positionStat.prettyPrint("")); System.out.println(); System.out.println("statistics for super class axioms:"); @@ -348,13 +361,14 @@ + candidatesAboveThresholdCountSC); System.out.println("axioms learned succesfully: " + foundDescriptionCountSC); System.out.println("axioms missed: " + missesCountSC); - System.out.println("axiom with no sensible axioms: " + noSensibleDescriptionCountSC); + System.out.println("class with no sensible axioms: " + noSensibleDescriptionCountSC); System.out.println("average accuracy overall: " + accStatSC.prettyPrint("")); System.out.println("average accuracy of selected expressions: " + accSelectedStatSC.prettyPrint("")); - System.out.println("average accuracy of expressions above threshold " + System.out.println("average accuracy of expressions above threshold: " + accAboveThresholdStatSC.prettyPrint("")); - System.out.println("average number typed by user " + positionStatSC.prettyPrint("")); + System.out.println("non-perfect (not 100% accuracy) axioms selected: " + nonPerfectCountSC); + System.out.println("average number typed by user: " + positionStatSC.prettyPrint("")); } @SuppressWarnings("unused") Modified: trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java =================================================================== --- trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java 2009-06-15 05:47:44 UTC (rev 1796) +++ trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java 2009-06-15 06:14:21 UTC (rev 1797) @@ -128,12 +128,16 @@ } public String prettyPrint(String unit) { - DecimalFormat df = new DecimalFormat(); - String str = "av. " + df.format(getMean()) + unit; - str += " (deviation " + df.format(getStandardDeviation()) + unit + "; "; - str += "min " + df.format(getMin()) + unit + "; "; - str += "max " + df.format(getMax()) + unit + ")"; - return str; + if(sum > 0) { + DecimalFormat df = new DecimalFormat(); + String str = "av. " + df.format(getMean()) + unit; + str += " (deviation " + df.format(getStandardDeviation()) + unit + "; "; + str += "min " + df.format(getMin()) + unit + "; "; + str += "max " + df.format(getMax()) + unit + ")"; + return str; + } else { + return "no data collected"; + } } public String prettyPrint(String unit, DecimalFormat df) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2009-06-16 06:24:01
|
Revision: 1800 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1800&view=rev Author: jenslehmann Date: 2009-06-16 06:23:58 +0000 (Tue, 16 Jun 2009) Log Message: ----------- extended eval script Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java trunk/src/dl-learner/org/dllearner/utilities/owl/EvaluatedDescriptionSet.java trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java Modified: trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java 2009-06-15 13:22:29 UTC (rev 1799) +++ trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java 2009-06-16 06:23:58 UTC (rev 1800) @@ -43,6 +43,7 @@ import org.dllearner.core.configurators.CELOEConfigurator; import org.dllearner.core.owl.Individual; import org.dllearner.core.owl.NamedClass; +import org.dllearner.core.owl.Thing; import org.dllearner.kb.OWLFile; import org.dllearner.learningproblems.ClassLearningProblem; import org.dllearner.learningproblems.EvaluatedDescriptionClass; @@ -189,11 +190,11 @@ } else { accStatSC.addNumber(bestAcc); } - if (bestAcc < minAccuracy) { + if (bestAcc < minAccuracy || (best.getDescription() instanceof Thing)) { System.out .println("The algorithm did not find a suggestion with an accuracy above the threshold of " + (100 * minAccuracy) - + "%. (The best one was \"" + + "% or the best description is not appropriate. (The best one was \"" + best.getDescription().toManchesterSyntaxString(baseURI, prefixes) + "\" with an accuracy of " @@ -347,6 +348,8 @@ System.out.println("axioms learned succesfully: " + foundDescriptionCount); System.out.println("axioms missed: " + missesCount); System.out.println("class with no sensible axioms: " + noSensibleDescriptionCount); + System.out.println("inconsistencies detected: " + inconsistencyDetected); + System.out.println("additional instances found: " + moreInstancesCountStat.prettyPrint("")); System.out.println("average accuracy overall: " + accStat.prettyPrint("")); System.out.println("average accuracy of selected expressions: " + accSelectedStat.prettyPrint("")); @@ -362,6 +365,8 @@ System.out.println("axioms learned succesfully: " + foundDescriptionCountSC); System.out.println("axioms missed: " + missesCountSC); System.out.println("class with no sensible axioms: " + noSensibleDescriptionCountSC); + System.out.println("inconsistencies detected: " + inconsistencyDetectedSC); + System.out.println("additional instances found: " + moreInstancesCountStatSC.prettyPrint("")); System.out.println("average accuracy overall: " + accStatSC.prettyPrint("")); System.out.println("average accuracy of selected expressions: " + accSelectedStatSC.prettyPrint("")); Modified: trunk/src/dl-learner/org/dllearner/utilities/owl/EvaluatedDescriptionSet.java =================================================================== --- trunk/src/dl-learner/org/dllearner/utilities/owl/EvaluatedDescriptionSet.java 2009-06-15 13:22:29 UTC (rev 1799) +++ trunk/src/dl-learner/org/dllearner/utilities/owl/EvaluatedDescriptionSet.java 2009-06-16 06:23:58 UTC (rev 1800) @@ -86,11 +86,11 @@ } public EvaluatedDescription getBest() { - return set.last(); + return set.size()==0 ? null : set.last(); } public EvaluatedDescription getWorst() { - return set.first(); + return set.size()==0 ? null : set.first(); } /** Modified: trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java =================================================================== --- trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java 2009-06-15 13:22:29 UTC (rev 1799) +++ trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java 2009-06-16 06:23:58 UTC (rev 1800) @@ -133,7 +133,8 @@ String str = "av. " + df.format(getMean()) + unit; str += " (deviation " + df.format(getStandardDeviation()) + unit + "; "; str += "min " + df.format(getMin()) + unit + "; "; - str += "max " + df.format(getMax()) + unit + ")"; + str += "max " + df.format(getMax()) + unit + "; "; + str += "count " + count + ")"; return str; } else { return "no data collected"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2009-06-16 16:35:15
|
Revision: 1802 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1802&view=rev Author: jenslehmann Date: 2009-06-16 16:35:07 +0000 (Tue, 16 Jun 2009) Log Message: ----------- wrote performance evaluation Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/core/configurators/ClassLearningProblemConfigurator.java trunk/src/dl-learner/org/dllearner/core/configurators/ComponentFactory.java trunk/src/dl-learner/org/dllearner/learningproblems/ClassLearningProblem.java trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/core/configurators/PelletReasonerConfigurator.java Modified: trunk/src/dl-learner/org/dllearner/core/configurators/ClassLearningProblemConfigurator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/configurators/ClassLearningProblemConfigurator.java 2009-06-16 09:03:15 UTC (rev 1801) +++ trunk/src/dl-learner/org/dllearner/core/configurators/ClassLearningProblemConfigurator.java 2009-06-16 16:35:07 UTC (rev 1802) @@ -72,6 +72,15 @@ public String getType() { return (String) ComponentManager.getInstance().getConfigOptionValue(classLearningProblem, "type") ; } +/** +* useApproximations whether to use stochastic approximations for computing accuracy. +* mandatory: false| reinit necessary: true +* default value: true +* @return boolean +**/ +public boolean getUseApproximations() { +return (Boolean) ComponentManager.getInstance().getConfigOptionValue(classLearningProblem, "useApproximations") ; +} /** * @param classToDescribe class of which a description should be learned. @@ -90,6 +99,15 @@ ComponentManager.getInstance().applyConfigEntry(classLearningProblem, "type", type); reinitNecessary = true; } +/** +* @param useApproximations whether to use stochastic approximations for computing accuracy. +* mandatory: false| reinit necessary: true +* default value: true +**/ +public void setUseApproximations(boolean useApproximations) { +ComponentManager.getInstance().applyConfigEntry(classLearningProblem, "useApproximations", useApproximations); +reinitNecessary = true; +} /** * true, if this component needs reinitializsation. Modified: trunk/src/dl-learner/org/dllearner/core/configurators/ComponentFactory.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/configurators/ComponentFactory.java 2009-06-16 09:03:15 UTC (rev 1801) +++ trunk/src/dl-learner/org/dllearner/core/configurators/ComponentFactory.java 2009-06-16 16:35:07 UTC (rev 1802) @@ -45,6 +45,7 @@ import org.dllearner.reasoning.FastInstanceChecker; import org.dllearner.reasoning.FastRetrievalReasoner; import org.dllearner.reasoning.OWLAPIReasoner; +import org.dllearner.reasoning.PelletReasoner; /** * automatically generated, do not edit manually. @@ -118,6 +119,14 @@ } /** +* @param knowledgeSource see KnowledgeSource +* @return a component ready for initialization PelletReasoner +**/ +public static PelletReasoner getPelletReasoner(Set<KnowledgeSource> knowledgeSource) { +return PelletReasonerConfigurator.getPelletReasoner(knowledgeSource); +} + +/** * @param classToDescribe class of which a description should be learned * @param reasoningService see ReasoningService * @return a component ready for initialization ClassLearningProblem Added: trunk/src/dl-learner/org/dllearner/core/configurators/PelletReasonerConfigurator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/configurators/PelletReasonerConfigurator.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/core/configurators/PelletReasonerConfigurator.java 2009-06-16 16:35:07 UTC (rev 1802) @@ -0,0 +1,66 @@ +/** + * Copyright (C) 2007-2008, 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.configurators; + +import java.util.Set; +import org.dllearner.core.ComponentManager; +import org.dllearner.core.KnowledgeSource; +import org.dllearner.reasoning.PelletReasoner; + +/** +* automatically generated, do not edit manually. +* run org.dllearner.scripts.ConfigJavaGenerator to update +**/ +public class PelletReasonerConfigurator implements Configurator { + +private boolean reinitNecessary = false; +@SuppressWarnings("unused") + +private PelletReasoner pelletReasoner; + +/** +* @param pelletReasoner see PelletReasoner +**/ +public PelletReasonerConfigurator(PelletReasoner pelletReasoner){ +this.pelletReasoner = pelletReasoner; +} + +/** +* @param knowledgeSource see knowledgeSource +* @return PelletReasoner +**/ +public static PelletReasoner getPelletReasoner(Set<KnowledgeSource> knowledgeSource) { +PelletReasoner component = ComponentManager.getInstance().reasoner(PelletReasoner.class, knowledgeSource); +return component; +} + + + +/** +* true, if this component needs reinitializsation. +* @return boolean +**/ +public boolean isReinitNecessary(){ +return reinitNecessary; +} + + +} Modified: trunk/src/dl-learner/org/dllearner/learningproblems/ClassLearningProblem.java =================================================================== --- trunk/src/dl-learner/org/dllearner/learningproblems/ClassLearningProblem.java 2009-06-16 09:03:15 UTC (rev 1801) +++ trunk/src/dl-learner/org/dllearner/learningproblems/ClassLearningProblem.java 2009-06-16 16:35:07 UTC (rev 1802) @@ -31,6 +31,7 @@ import org.dllearner.core.LearningProblem; import org.dllearner.core.ReasonerComponent; import org.dllearner.core.configurators.ClassLearningProblemConfigurator; +import org.dllearner.core.options.BooleanConfigOption; import org.dllearner.core.options.ConfigOption; import org.dllearner.core.options.StringConfigOption; import org.dllearner.core.options.URLConfigOption; @@ -57,6 +58,8 @@ // approximation of accuracy +- 0.05 % private static final double approx = 0.05; + private boolean useApproximations; + // factor for higher weight on coverage (needed for subclass learning) private double coverageFactor; @@ -80,7 +83,9 @@ options.add(classToDescribeOption); StringConfigOption type = new StringConfigOption("type", "whether to learn an equivalence class or super class axiom","equivalence"); // or domain/range of a property. type.setAllowedValues(new String[] {"equivalence", "superClass"}); // , "domain", "range"}); - options.add(type); + options.add(type); + BooleanConfigOption approx = new BooleanConfigOption("useApproximations", "whether to use stochastic approximations for computing accuracy", true); + options.add(approx); return options; } @@ -91,6 +96,7 @@ @Override public void init() throws ComponentInitException { classToDescribe = new NamedClass(configurator.getClassToDescribe().toString()); + useApproximations = configurator.getUseApproximations(); if(!reasoner.getNamedClasses().contains(classToDescribe)) { throw new ComponentInitException("The class \"" + configurator.getClassToDescribe() + "\" does not exist. Make sure you spelled it correctly."); @@ -201,9 +207,16 @@ @Override public double getAccuracyOrTooWeak(Description description, double noise) { - // instead of using the standard operation, we use optimisation - // and approximation here - + if(useApproximations) { + return getAccuracyOrTooWeakApprox(description, noise); + } else { + return getAccuracyOrTooWeakExact(description, noise); + } + } + + // instead of using the standard operation, we use optimisation + // and approximation here + public double getAccuracyOrTooWeakApprox(Description description, double noise) { // we abort when there are too many uncovered positives int maxNotCovered = (int) Math.ceil(noise*classInstances.size()); int instancesCovered = 0; @@ -245,7 +258,7 @@ // if the mean is greater than the required minimum, we can accept; // we also accept if the interval is small and close to the minimum // (worst case is to accept a few inaccurate descriptions) - if(mean > noise || (upperBorderA > mean && size < 0.03)) { + if(mean > 1-noise || (upperBorderA > mean && size < 0.03)) { instancesCovered = (int) (instancesCovered/(double)total * classInstances.size()); upperEstimateA = (int) (upperBorderA * classInstances.size()); lowerEstimateA = (int) (lowerBorderA * classInstances.size()); @@ -255,7 +268,7 @@ // reject only if the upper border is far away (we are very // certain not to lose a potential solution) - if(upperBorderA + 0.1 < noise) { + if(upperBorderA + 0.1 < 1-noise) { return -1; } } @@ -328,21 +341,49 @@ // MonitorFactory.add("estimatedB","count", estimatedB ? 1 : 0); // MonitorFactory.add("bInstances","count", testsPerformed); - return getAccuracy(coverage, protusion); - } + return getAccuracy(coverage, protusion); + } - @Deprecated - public double getAccuracyOrTooWeakStandard(Description description, double minAccuracy) { - // since we have to perform a retrieval operation anyway, we cannot easily - // get a benefit from the accuracy limit - double accuracy = getAccuracy(description); - if(accuracy >= minAccuracy) { - return accuracy; - } else { + public double getAccuracyOrTooWeakExact(Description description, double noise) { + // overhang + int additionalInstances = 0; + for(Individual ind : superClassInstances) { + if(reasoner.hasType(description, ind)) { + additionalInstances++; + } + } + + // coverage + int coveredInstances = 0; + for(Individual ind : classInstances) { + if(reasoner.hasType(description, ind)) { + coveredInstances++; + } + } + + double coverage = coveredInstances/(double)classInstances.size(); + + if(coverage < 1 - noise) { return -1; } + + double protusion = additionalInstances == 0 ? 0 : coveredInstances/(double)(coveredInstances+additionalInstances); + + return getAccuracy(coverage, protusion); } +// @Deprecated +// public double getAccuracyOrTooWeakStandard(Description description, double minAccuracy) { +// // since we have to perform a retrieval operation anyway, we cannot easily +// // get a benefit from the accuracy limit +// double accuracy = getAccuracy(description); +// if(accuracy >= minAccuracy) { +// return accuracy; +// } else { +// return -1; +// } +// } + // computes accuracy from coverage and protusion (changing this function may // make it necessary to change the appoximation too) private double getAccuracy(double coverage, double protusion) { Modified: trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java 2009-06-16 09:03:15 UTC (rev 1801) +++ trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java 2009-06-16 16:35:07 UTC (rev 1802) @@ -23,6 +23,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStreamReader; +import java.net.URL; import java.text.DecimalFormat; import java.util.Arrays; import java.util.Iterator; @@ -41,6 +42,7 @@ import org.dllearner.core.LearningProblemUnsupportedException; import org.dllearner.core.ReasonerComponent; import org.dllearner.core.configurators.CELOEConfigurator; +import org.dllearner.core.owl.Description; import org.dllearner.core.owl.Individual; import org.dllearner.core.owl.NamedClass; import org.dllearner.core.owl.Thing; @@ -48,6 +50,7 @@ import org.dllearner.learningproblems.ClassLearningProblem; import org.dllearner.learningproblems.EvaluatedDescriptionClass; import org.dllearner.reasoning.FastInstanceChecker; +import org.dllearner.reasoning.OWLAPIReasoner; import org.dllearner.utilities.statistics.Stat; /** @@ -65,6 +68,8 @@ public class OntologyEngineering { private static double minAccuracy = 0.85; + + private static double noisePercent = 5.0; private static int minInstanceCount = 3; @@ -72,6 +77,12 @@ private static DecimalFormat df = new DecimalFormat(); + // for performance measurements and development + private static boolean autoMode = false; + private static boolean useFastInstanceChecker = true; + private static boolean useApproximations = true; + private static boolean computeApproxDiff = false; + @SuppressWarnings("unchecked") public static void main(String[] args) throws ComponentInitException, LearningProblemUnsupportedException, IOException { @@ -83,15 +94,25 @@ System.out.println("You need to give an OWL file as argument."); System.exit(0); } - File owlFile = new File(args[0]); + ComponentManager cm = ComponentManager.getInstance(); // load OWL in reasoner OWLFile ks = cm.knowledgeSource(OWLFile.class); - ks.getConfigurator().setUrl(owlFile.toURI().toURL()); + if(args[0].startsWith("http")) { + ks.getConfigurator().setUrl(new URL(args[0])); + } else { + File owlFile = new File(args[0]); + ks.getConfigurator().setUrl(owlFile.toURI().toURL()); + } ks.init(); - ReasonerComponent reasoner = cm.reasoner(FastInstanceChecker.class, ks); + ReasonerComponent reasoner = null; + if(useFastInstanceChecker) { + reasoner = cm.reasoner(FastInstanceChecker.class, ks); + } else { + reasoner = cm.reasoner(OWLAPIReasoner.class, ks); + } reasoner.init(); System.out.println("Loaded ontology " + args[0] + "."); @@ -103,6 +124,7 @@ int classCandidatesCount = 0; Stat instanceCountStat = new Stat(); Stat classExpressionTestsStat = new Stat(); + Stat approxDiffStat = new Stat(); // equivalence classes int candidatesAboveThresholdCount = 0; @@ -168,6 +190,7 @@ + algorithmRuntimeInSeconds + " seconds)"); lp.getConfigurator().setType("superClass"); } + lp.getConfigurator().setUseApproximations(useApproximations); lp.init(); CELOE celoe = cm.learningAlgorithm(CELOE.class, lp, reasoner); @@ -175,7 +198,7 @@ cf.setUseNegation(false); cf.setValueFrequencyThreshold(3); cf.setMaxExecutionTimeInSeconds(algorithmRuntimeInSeconds); - cf.setNoisePercentage(0.05); + cf.setNoisePercentage(noisePercent); cf.setMaxNrOfResults(10); celoe.init(); @@ -214,6 +237,15 @@ List<EvaluatedDescriptionClass> suggestionsList = new LinkedList<EvaluatedDescriptionClass>( suggestions.descendingSet()); + if(computeApproxDiff) { + for(EvaluatedDescription ed : suggestionsList) { + Description d = ed.getDescription(); + double approx = lp.getAccuracyOrTooWeakApprox(d, noisePercent/(double)100); + double exact = lp.getAccuracyOrTooWeakExact(d, noisePercent/(double)100); + approxDiffStat.addNumber(approx-exact); + } + } + int nr = 0; for (EvaluatedDescription suggestion : suggestionsList) { System.out.println(nr @@ -243,11 +275,15 @@ List<String> allowedInputs = Arrays.asList(inputs); String input; - do { - BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - input = br.readLine(); - } while (!allowedInputs.contains(input)); - + if(autoMode) { + input = "n"; + } else { + do { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + input = br.readLine(); + } while (!allowedInputs.contains(input)); + } + userInputProtocol += input; if (input.equals("m")) { @@ -340,6 +376,9 @@ System.out.println("classes with at least " + minInstanceCount + " instances: " + classCandidatesCount); System.out.println("class expressions tested: " + classExpressionTestsStat.prettyPrint("")); + if(computeApproxDiff) { + System.out.println("approximation difference: " + approxDiffStat.prettyPrint()); + } System.out.println(); System.out.println("statistics for equivalence axioms:"); Modified: trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java =================================================================== --- trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java 2009-06-16 09:03:15 UTC (rev 1801) +++ trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java 2009-06-16 16:35:07 UTC (rev 1802) @@ -127,6 +127,10 @@ return max; } + public String prettyPrint() { + return prettyPrint(""); + } + public String prettyPrint(String unit) { if(sum > 0) { DecimalFormat df = new DecimalFormat(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2009-06-18 14:22:32
|
Revision: 1807 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1807&view=rev Author: jenslehmann Date: 2009-06-18 13:37:47 +0000 (Thu, 18 Jun 2009) Log Message: ----------- small bug fixes in evaluation Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java Modified: trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java 2009-06-18 12:02:16 UTC (rev 1806) +++ trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java 2009-06-18 13:37:47 UTC (rev 1807) @@ -243,7 +243,10 @@ double approx = lp.getAccuracyOrTooWeakApprox(d, noisePercent/(double)100); double exact = lp.getAccuracyOrTooWeakExact(d, noisePercent/(double)100); double diff = Math.abs(approx-exact); - approxDiffStat.addNumber(diff); + // do not count "too weak" + if(approx > -0.01 && exact > -0.01) { + approxDiffStat.addNumber(diff); + } // if(diff>0.1) { // System.out.println("description: " + d); // System.out.println("approx: " + approx); Modified: trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java =================================================================== --- trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java 2009-06-18 12:02:16 UTC (rev 1806) +++ trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java 2009-06-18 13:37:47 UTC (rev 1807) @@ -132,7 +132,7 @@ } public String prettyPrint(String unit) { - if(sum > 0) { + if(count > 0) { DecimalFormat df = new DecimalFormat(); String str = "av. " + df.format(getMean()) + unit; str += " (deviation " + df.format(getStandardDeviation()) + unit + "; "; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2009-06-25 16:56:22
|
Revision: 1809 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1809&view=rev Author: jenslehmann Date: 2009-06-25 16:56:18 +0000 (Thu, 25 Jun 2009) Log Message: ----------- disjunctive EL algorithm ctd. Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/algorithms/el/DisjunctiveHeuristic.java trunk/src/dl-learner/org/dllearner/algorithms/el/ELLearningAlgorithmDisjunctive.java trunk/src/dl-learner/org/dllearner/core/configurators/ComponentFactory.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/core/configurators/ELLearningAlgorithmDisjunctiveConfigurator.java Modified: trunk/src/dl-learner/org/dllearner/algorithms/el/DisjunctiveHeuristic.java =================================================================== --- trunk/src/dl-learner/org/dllearner/algorithms/el/DisjunctiveHeuristic.java 2009-06-25 10:17:14 UTC (rev 1808) +++ trunk/src/dl-learner/org/dllearner/algorithms/el/DisjunctiveHeuristic.java 2009-06-25 16:56:18 UTC (rev 1809) @@ -8,8 +8,11 @@ double diff = tree1.getScore()-tree2.getScore(); if(diff < 0.00001 && diff > -0.00001) { return edt.compare(tree1.getDescriptionTree(), tree2.getDescriptionTree()); + } else if(diff > 0){ + return 1; +// return (int)Math.signum(diff); } else { - return (int)Math.signum(diff); + return -1; } } Modified: trunk/src/dl-learner/org/dllearner/algorithms/el/ELLearningAlgorithmDisjunctive.java =================================================================== --- trunk/src/dl-learner/org/dllearner/algorithms/el/ELLearningAlgorithmDisjunctive.java 2009-06-25 10:17:14 UTC (rev 1808) +++ trunk/src/dl-learner/org/dllearner/algorithms/el/ELLearningAlgorithmDisjunctive.java 2009-06-25 16:56:18 UTC (rev 1809) @@ -23,6 +23,7 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.SortedSet; import java.util.TreeSet; @@ -33,12 +34,13 @@ import org.dllearner.core.LearningProblem; import org.dllearner.core.ReasonerComponent; import org.dllearner.core.configurators.Configurator; -import org.dllearner.core.configurators.ELLearningAlgorithmConfigurator; +import org.dllearner.core.configurators.ELLearningAlgorithmDisjunctiveConfigurator; import org.dllearner.core.options.CommonConfigOptions; import org.dllearner.core.options.ConfigOption; import org.dllearner.core.options.StringConfigOption; import org.dllearner.core.owl.Description; import org.dllearner.core.owl.Individual; +import org.dllearner.core.owl.NamedClass; import org.dllearner.core.owl.Thing; import org.dllearner.core.owl.Union; import org.dllearner.learningproblems.PosNegLP; @@ -71,32 +73,38 @@ public class ELLearningAlgorithmDisjunctive extends LearningAlgorithm { private static Logger logger = Logger.getLogger(ELLearningAlgorithmDisjunctive.class); - private ELLearningAlgorithmConfigurator configurator; + private ELLearningAlgorithmDisjunctiveConfigurator configurator; + String baseURI; + Map<String,String> prefixes; + private ELDown2 operator; private boolean isRunning = false; private boolean stop = false; + private Description startClass; private SearchTreeNode startNode; private ELHeuristic heuristic; private TreeSet<SearchTreeNode> candidates; // tree search + private double noise = 0; private List<ELDescriptionTree> currentSolution = new LinkedList<ELDescriptionTree>(); private EvaluatedDescription bestEvaluatedDescription; - // how important not cover - private double posWeight = 5; + // how important not to cover negatives + private double posWeight = 2; private int startPosExamplesSize; private int startNegExamplesSize; private SortedSet<Individual> currentPosExamples; private SortedSet<Individual> currentNegExamples; - private ELDescriptionTree bestCurrentTree; + private SearchTreeNode bestCurrentNode; private double bestCurrentScore = 0; private long treeStartTime; public ELLearningAlgorithmDisjunctive(PosNegLP problem, ReasonerComponent reasoner) { super(problem, reasoner); + configurator = new ELLearningAlgorithmDisjunctiveConfigurator(this); } public static String getName() { @@ -132,7 +140,17 @@ heuristic = new DisjunctiveHeuristic(); candidates = new TreeSet<SearchTreeNode>(heuristic); + if(configurator.getStartClass() != null) { + startClass = new NamedClass(configurator.getStartClass()); + } else { + startClass = Thing.instance; + } operator = new ELDown2(reasoner); + + noise = configurator.getNoisePercentage()/(double)100; + + baseURI = reasoner.getBaseURI(); + prefixes = reasoner.getPrefixes(); } @Override @@ -146,9 +164,9 @@ treeStartTime = System.nanoTime(); // create start node - ELDescriptionTree top = new ELDescriptionTree(reasoner, Thing.instance); - addDescriptionTree(top, null); - bestCurrentTree = top; + ELDescriptionTree startTree = new ELDescriptionTree(reasoner, startClass); + addDescriptionTree(startTree, null); +// bestCurrentTree = top; bestCurrentScore = Double.NEGATIVE_INFINITY; // main loop @@ -156,6 +174,8 @@ while(!stop && !treeCriteriaSatisfied()) { // pick the best candidate according to the heuristic SearchTreeNode best = candidates.pollLast(); +// System.out.println("best: " + best); + // apply operator List<ELDescriptionTree> refinements = operator.refine(best.getDescriptionTree()); // add all refinements to search tree, candidates, best descriptions @@ -169,11 +189,18 @@ logger.trace(startNode.getTreeString()); logger.trace("Loop " + loop + " completed."); } + +// for(SearchTreeNode node : candidates) { +// System.out.println(node); +// } +// System.out.println(candidates.last()); +// System.out.println(candidates.first()); +// System.out.println("=="); } // we found a tree (partial solution) - currentSolution.add(bestCurrentTree); - Description bestDescription = bestCurrentTree.transformToDescription(); + currentSolution.add(bestCurrentNode.getDescriptionTree()); + Description bestDescription = bestCurrentNode.getDescriptionTree().transformToDescription(); // form union of trees found so far with if(treeCount==0) { bestEvaluatedDescription = learningProblem.evaluate(bestDescription); @@ -201,13 +228,16 @@ negCov++; } } - logger.info("tree found: " + bestDescription + " (" + posCov + " pos covered, " + currentPosExamples.size() + " remaining, " + negCov + " neg covered, " + currentNegExamples.size() + " remaining"); + logger.info("tree found: " + bestDescription.toManchesterSyntaxString(baseURI, prefixes) + " (" + posCov + " pos covered, " + currentPosExamples.size() + " remaining, " + negCov + " neg covered, " + currentNegExamples.size() + " remaining, score: " + bestCurrentNode.getScore() + ")"); + // reset temporary variables + candidates.clear(); + treeCount++; } // print solution - logger.info("solution : " + bestEvaluatedDescription); + logger.info("solution : " + bestEvaluatedDescription.getDescription().toManchesterSyntaxString(baseURI, prefixes) + "(acc: " + bestEvaluatedDescription.getAccuracy() + ")"); isRunning = false; } @@ -231,12 +261,13 @@ // TODO: define "too weak" as a coverage on negative examples, which is // too high for the tree to be considered + if(score != Double.NEGATIVE_INFINITY) { + candidates.add(node); + } - candidates.add(node); - // check whether this is the best tree if(score > bestCurrentScore) { - bestCurrentTree = descriptionTree; + bestCurrentNode = node; bestCurrentScore = score; } } @@ -259,8 +290,11 @@ // penalty if a minimum coverage is not achieved (avoids too many trees where // each tree has only little impact) - if(startPosExamplesSize > 10 && posCovered<3 || posCovered < 1) { - score -= 10; + if((startPosExamplesSize > 10 && posCovered<3) || posCovered < 1) { +// score -= 100; + // further refining such a tree will not cover more positives + // => reject + return Double.NEGATIVE_INFINITY; } // test coverage on current negative examples @@ -273,16 +307,25 @@ } // double negPercentage = negCovered/(double)currentNegExamples.size(); + // remove - does not make sense + // check whether tree is too weak, i.e. covers more than noise % negatives +// int maxNegCov = (int) Math.round(noise * currentNegExamples.size()); +// if(negCovered > maxNegCov) { +// return Double.NEGATIVE_INFINITY; +// } + // length penalty score -= 0.1*tree.getSize(); +// System.out.println("score: " + score); + return score; } private boolean treeCriteriaSatisfied() { long runTime = System.nanoTime() - treeStartTime; // more than one second has passed - if(runTime / 1000000000 > 1) { + if(runTime / (double) 1000000000 >= 10) { return true; } else { return false; Modified: trunk/src/dl-learner/org/dllearner/core/configurators/ComponentFactory.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/configurators/ComponentFactory.java 2009-06-25 10:17:14 UTC (rev 1808) +++ trunk/src/dl-learner/org/dllearner/core/configurators/ComponentFactory.java 2009-06-25 16:56:18 UTC (rev 1809) @@ -26,6 +26,7 @@ import org.dllearner.algorithms.RandomGuesser; import org.dllearner.algorithms.celoe.CELOE; import org.dllearner.algorithms.el.ELLearningAlgorithm; +import org.dllearner.algorithms.el.ELLearningAlgorithmDisjunctive; import org.dllearner.algorithms.gp.GP; import org.dllearner.algorithms.refinement.ROLearner; import org.dllearner.algorithms.refinement2.ROLComponent2; @@ -208,6 +209,16 @@ * @param learningProblem see LearningProblem * @param reasoningService see ReasoningService * @throws LearningProblemUnsupportedException see +* @return a component ready for initialization ELLearningAlgorithmDisjunctive +**/ +public static ELLearningAlgorithmDisjunctive getELLearningAlgorithmDisjunctive(LearningProblem learningProblem, ReasonerComponent reasoningService) throws LearningProblemUnsupportedException { +return ELLearningAlgorithmDisjunctiveConfigurator.getELLearningAlgorithmDisjunctive(learningProblem, reasoningService); +} + +/** +* @param learningProblem see LearningProblem +* @param reasoningService see ReasoningService +* @throws LearningProblemUnsupportedException see * @return a component ready for initialization GP **/ public static GP getGP(LearningProblem learningProblem, ReasonerComponent reasoningService) throws LearningProblemUnsupportedException { Added: trunk/src/dl-learner/org/dllearner/core/configurators/ELLearningAlgorithmDisjunctiveConfigurator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/core/configurators/ELLearningAlgorithmDisjunctiveConfigurator.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/core/configurators/ELLearningAlgorithmDisjunctiveConfigurator.java 2009-06-25 16:56:18 UTC (rev 1809) @@ -0,0 +1,105 @@ +/** + * Copyright (C) 2007-2008, 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.configurators; + +import org.dllearner.algorithms.el.ELLearningAlgorithmDisjunctive; +import org.dllearner.core.ComponentManager; +import org.dllearner.core.LearningProblem; +import org.dllearner.core.LearningProblemUnsupportedException; +import org.dllearner.core.ReasonerComponent; + +/** +* automatically generated, do not edit manually. +* run org.dllearner.scripts.ConfigJavaGenerator to update +**/ +public class ELLearningAlgorithmDisjunctiveConfigurator implements Configurator { + +private boolean reinitNecessary = false; +@SuppressWarnings("unused") + +private ELLearningAlgorithmDisjunctive eLLearningAlgorithmDisjunctive; + +/** +* @param eLLearningAlgorithmDisjunctive see ELLearningAlgorithmDisjunctive +**/ +public ELLearningAlgorithmDisjunctiveConfigurator(ELLearningAlgorithmDisjunctive eLLearningAlgorithmDisjunctive){ +this.eLLearningAlgorithmDisjunctive = eLLearningAlgorithmDisjunctive; +} + +/** +* @param reasoningService see reasoningService +* @param learningProblem see learningProblem +* @throws LearningProblemUnsupportedException see +* @return ELLearningAlgorithmDisjunctive +**/ +public static ELLearningAlgorithmDisjunctive getELLearningAlgorithmDisjunctive(LearningProblem learningProblem, ReasonerComponent reasoningService) throws LearningProblemUnsupportedException{ +ELLearningAlgorithmDisjunctive component = ComponentManager.getInstance().learningAlgorithm(ELLearningAlgorithmDisjunctive.class, learningProblem, reasoningService); +return component; +} + +/** +* noisePercentage the (approximated) percentage of noise within the examples. +* mandatory: false| reinit necessary: true +* default value: 0.0 +* @return double +**/ +public double getNoisePercentage() { +return (Double) ComponentManager.getInstance().getConfigOptionValue(eLLearningAlgorithmDisjunctive, "noisePercentage") ; +} +/** +* startClass the named class which should be used to start the algorithm (GUI: needs a widget for selecting a class). +* mandatory: false| reinit necessary: true +* default value: null +* @return String +**/ +public String getStartClass() { +return (String) ComponentManager.getInstance().getConfigOptionValue(eLLearningAlgorithmDisjunctive, "startClass") ; +} + +/** +* @param noisePercentage the (approximated) percentage of noise within the examples. +* mandatory: false| reinit necessary: true +* default value: 0.0 +**/ +public void setNoisePercentage(double noisePercentage) { +ComponentManager.getInstance().applyConfigEntry(eLLearningAlgorithmDisjunctive, "noisePercentage", noisePercentage); +reinitNecessary = true; +} +/** +* @param startClass the named class which should be used to start the algorithm (GUI: needs a widget for selecting a class). +* mandatory: false| reinit necessary: true +* default value: null +**/ +public void setStartClass(String startClass) { +ComponentManager.getInstance().applyConfigEntry(eLLearningAlgorithmDisjunctive, "startClass", startClass); +reinitNecessary = true; +} + +/** +* true, if this component needs reinitializsation. +* @return boolean +**/ +public boolean isReinitNecessary(){ +return reinitNecessary; +} + + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2009-07-06 13:02:01
|
Revision: 1813 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1813&view=rev Author: jenslehmann Date: 2009-07-06 13:01:57 +0000 (Mon, 06 Jul 2009) Log Message: ----------- - EL learning algorithm changes - SPARQL test modified Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/algorithms/el/ELLearningAlgorithmDisjunctive.java trunk/src/dl-learner/org/dllearner/refinementoperators/Utility.java trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java Modified: trunk/src/dl-learner/org/dllearner/algorithms/el/ELLearningAlgorithmDisjunctive.java =================================================================== --- trunk/src/dl-learner/org/dllearner/algorithms/el/ELLearningAlgorithmDisjunctive.java 2009-07-06 11:39:13 UTC (rev 1812) +++ trunk/src/dl-learner/org/dllearner/algorithms/el/ELLearningAlgorithmDisjunctive.java 2009-07-06 13:01:57 UTC (rev 1813) @@ -105,12 +105,12 @@ private TreeSet<ELDescriptionTree> trees; // tree search - private int treeSearchTimeSeconds = 10; + private double treeSearchTimeSeconds = 1.0; // private double noise = 0; private List<ELDescriptionTree> currentSolution = new LinkedList<ELDescriptionTree>(); private EvaluatedDescription bestEvaluatedDescription; // how important not to cover negatives - private double posWeight = 1.5; // 2; + private double posWeight = 1.2; // 2; private int startPosExamplesSize; // private int startNegExamplesSize; private SortedSet<Individual> currentPosExamples; Modified: trunk/src/dl-learner/org/dllearner/refinementoperators/Utility.java =================================================================== --- trunk/src/dl-learner/org/dllearner/refinementoperators/Utility.java 2009-07-06 11:39:13 UTC (rev 1812) +++ trunk/src/dl-learner/org/dllearner/refinementoperators/Utility.java 2009-07-06 13:01:57 UTC (rev 1813) @@ -58,7 +58,8 @@ // specifies whether to do real disjoint tests or check that // two named classes do not have common instances - private boolean instanceBasedDisjoints = false; + // TODO: turn this into a parameter + private boolean instanceBasedDisjoints = true; // cache for reasoner queries private Map<Description,Map<Description,Boolean>> cachedDisjoints = new TreeMap<Description,Map<Description,Boolean>>(conceptComparator); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java 2009-07-06 11:39:13 UTC (rev 1812) +++ trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java 2009-07-06 13:01:57 UTC (rev 1813) @@ -19,6 +19,8 @@ */ package org.dllearner.tools.ore; +import java.net.MalformedURLException; +import java.net.URL; import java.util.SortedSet; import java.util.TreeSet; @@ -31,55 +33,57 @@ import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlKnowledgeSource; -import org.dllearner.learningproblems.PosOnlyLP; +import org.dllearner.learningproblems.ClassLearningProblem; import org.dllearner.reasoning.OWLAPIReasoner; import org.dllearner.utilities.examples.AutomaticNegativeExampleFinderSPARQL; import org.dllearner.utilities.examples.AutomaticPositiveExampleFinderSPARQL; /** * Test class for SPARQL mode. + * * @author Lorenz Buehmann - * + * */ -public class SPARQLTest{ - +public class SPARQLTest { + @SuppressWarnings("unused") - public static void main(String[] args){ - String example = "Angela_Merkel"; + public static void main(String[] args) throws MalformedURLException { + String exampleClass = "\"http://dbpedia.org/class/yago/LeadersOfPoliticalParties\""; ComponentManager cm = ComponentManager.getInstance(); - + SparqlEndpoint endPoint = SparqlEndpoint.getEndpointDBpedia(); - + SPARQLTasks task = new SPARQLTasks(endPoint); - + AutomaticPositiveExampleFinderSPARQL pos = new AutomaticPositiveExampleFinderSPARQL(task); - pos.makePositiveExamplesFromConcept(example); + pos.makePositiveExamplesFromConcept(exampleClass); SortedSet<String> posExamples = pos.getPosExamples(); - - AutomaticNegativeExampleFinderSPARQL neg = new AutomaticNegativeExampleFinderSPARQL(posExamples, task, new TreeSet<String>()); + System.out.println(posExamples); + + AutomaticNegativeExampleFinderSPARQL neg = new AutomaticNegativeExampleFinderSPARQL( + posExamples, task, new TreeSet<String>()); SortedSet<String> negExamples = neg.getNegativeExamples(20); System.out.println(negExamples); - - - - + + SortedSet<String> instances = new TreeSet<String>(posExamples); + instances.addAll(negExamples); + try { - - - - + SparqlKnowledgeSource ks = cm.knowledgeSource(SparqlKnowledgeSource.class); cm.applyConfigEntry(ks, "predefinedEndpoint", "DBPEDIA"); - ks.getConfigurator().setInstances(posExamples); + ks.getConfigurator().setInstances(instances); + ks.getConfigurator().setPredefinedFilter("YAGO"); ks.init(); ReasonerComponent reasoner = cm.reasoner(OWLAPIReasoner.class, ks); reasoner.init(); - PosOnlyLP lp = cm.learningProblem(PosOnlyLP.class, reasoner); - lp.getConfigurator().setPositiveExamples(posExamples); + ClassLearningProblem lp = cm.learningProblem(ClassLearningProblem.class, reasoner); +// lp.getConfigurator().setPositiveExamples(posExamples); + lp.getConfigurator().setClassToDescribe(new URL(exampleClass)); lp.init(); LearningAlgorithm la = cm.learningAlgorithm(CELOE.class, lp, reasoner); la.init(); - + la.start(); } catch (ComponentInitException e) { // TODO Auto-generated catch block This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2009-08-04 20:07:58
|
Revision: 1818 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1818&view=rev Author: lorenz_b Date: 2009-08-04 20:07:44 +0000 (Tue, 04 Aug 2009) Log Message: ----------- refactored package structure, since developing and maintaining became to ineffective Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java trunk/src/dl-learner/org/dllearner/tools/ore/Main.java trunk/src/dl-learner/org/dllearner/tools/ore/ORE.java trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomSelector.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LaconicTest.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/DescriptionParseTest.java trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java trunk/src/dl-learner/org/dllearner/tools/ore/RepairManagerListener.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/BaseDescriptionGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/Beta.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/BottomTester.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/OPlus.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/Tau.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/TopTester.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/relevance/ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/relevance/HittingSet.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/relevance/SyntacticRelevanceBasedExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/MouseOverHintDemo.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/MouseOverHintManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBarSimulator.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusManagerListener.java Removed Paths: ------------- trunk/src/dl-learner/org/dllearner/tools/ore/ChangePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ChangesPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ClassPanelOWL.java trunk/src/dl-learner/org/dllearner/tools/ore/ClassPanelOWLDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ClassPanelSparql.java trunk/src/dl-learner/org/dllearner/tools/ore/ClassPanelSparqlDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ClassificationProgressMonitor.java trunk/src/dl-learner/org/dllearner/tools/ore/ColorListCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ColumnListCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/DescriptionLabel.java trunk/src/dl-learner/org/dllearner/tools/ore/DescriptionMenuItem.java trunk/src/dl-learner/org/dllearner/tools/ore/DescriptionPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationTablePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ImpactTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ImpactTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/InconsistencyExplanationPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/InconsistencyExplanationPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/IntroductionPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/IntroductionPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/KnowledgeSourcePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/KnowledgeSourcePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/LearningPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/LearningPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/LeftPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/OWLSyntaxTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/RepairDialog.java trunk/src/dl-learner/org/dllearner/tools/ore/RepairPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/RepairPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/RepairPlanPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/RepairTable.java trunk/src/dl-learner/org/dllearner/tools/ore/RepairTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/SavePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/SavePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/StatsPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/UndoLabel.java trunk/src/dl-learner/org/dllearner/tools/ore/UnsatClassesListCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/UnsatisfiableExplanationPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/UnsatisfiableExplanationPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/Wizard.java trunk/src/dl-learner/org/dllearner/tools/ore/WizardController.java trunk/src/dl-learner/org/dllearner/tools/ore/WizardModel.java trunk/src/dl-learner/org/dllearner/tools/ore/WizardPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/WizardPanelNotFoundException.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/BaseDescriptionGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/Beta.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/BottomTester.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/HittingSet.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LaconicExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/OPlus.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/SyntacticRelevanceBasedExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/Tau.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/TopTester.java Modified: trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java =================================================================== --- trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java 2009-08-04 20:02:34 UTC (rev 1817) +++ trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java 2009-08-04 20:07:44 UTC (rev 1818) @@ -290,7 +290,7 @@ manager = OWLManager.createOWLOntologyManager(); factory = manager.getOWLDataFactory(); //set classification output to "none", while default is "console" - PelletOptions.USE_CLASSIFICATION_MONITOR = PelletOptions.MonitorType.NONE; + PelletOptions.USE_CLASSIFICATION_MONITOR = PelletOptions.MonitorType.CONSOLE; // change log level to WARN for Pellet, because otherwise log // output will be very large Logger pelletLogger = Logger.getLogger("org.mindswap.pellet"); Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ChangePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ChangePanel.java 2009-08-04 20:02:34 UTC (rev 1817) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ChangePanel.java 2009-08-04 20:07:44 UTC (rev 1818) @@ -1,58 +0,0 @@ -/** - * Copyright (C) 2007-2008, 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.tools.ore; - - -import java.awt.Color; -import java.awt.event.MouseListener; -import java.util.List; - -import javax.swing.JLabel; -import javax.swing.JPanel; - -import org.semanticweb.owl.model.OWLOntologyChange; -/** - * JPanel where an ontology change and his undo function is listed. - * @author Lorenz Buehmann - * - */ -public class ChangePanel extends JPanel{ - - /** - * - */ - private static final long serialVersionUID = -934113184795465461L; - - /** - * Constructor. - * @param label labelname - * @param changes ontology changes - * @param mL mouse listener - */ - public ChangePanel(String label, List<OWLOntologyChange> changes, MouseListener mL){ - super(); - add(new JLabel(label)); - add(new UndoLabel(changes, mL)); - setBackground(Color.WHITE); - - } - -} Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ChangesPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ChangesPanel.java 2009-08-04 20:02:34 UTC (rev 1817) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ChangesPanel.java 2009-08-04 20:07:44 UTC (rev 1818) @@ -1,62 +0,0 @@ -/** - * Copyright (C) 2007-2008, 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.tools.ore; - -import java.awt.Color; -import java.awt.Container; -import java.awt.GridLayout; - -import javax.swing.BorderFactory; -import javax.swing.JPanel; -import javax.swing.SwingUtilities; -import javax.swing.border.BevelBorder; -/** - * JPanel where all ontology changes are shown. - * @author Lorenz Buehmann - * - */ -public class ChangesPanel extends JPanel{ - - private static final long serialVersionUID = -7538532926820669891L; - - /** - * Constructor. - */ - public ChangesPanel(){ - super(); - setLayout(new GridLayout(0, 1)); - setBackground(Color.WHITE); - setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); - - } - - - /** - * Refresh the actual panel. - * @param cont gui container for changes - */ - public void updatePanel(Container cont){ - remove(cont); - SwingUtilities.updateComponentTreeUI(this); - } - - -} Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ClassPanelOWL.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ClassPanelOWL.java 2009-08-04 20:02:34 UTC (rev 1817) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ClassPanelOWL.java 2009-08-04 20:07:44 UTC (rev 1818) @@ -1,170 +0,0 @@ -/** - * Copyright (C) 2007-2008, 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.tools.ore; - -import java.awt.BorderLayout; -import java.awt.Dimension; -import java.awt.geom.Ellipse2D; -import java.awt.geom.RoundRectangle2D; - -import javax.swing.DefaultListModel; -import javax.swing.JLabel; -import javax.swing.JList; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.event.ListSelectionListener; - -import org.jdesktop.swingx.JXBusyLabel; -import org.jdesktop.swingx.JXList; -import org.jdesktop.swingx.decorator.ColorHighlighter; -import org.jdesktop.swingx.decorator.FilterPipeline; -import org.jdesktop.swingx.decorator.HighlightPredicate; -import org.jdesktop.swingx.decorator.HighlighterFactory; -import org.jdesktop.swingx.decorator.ShuttleSorter; -import org.jdesktop.swingx.icon.EmptyIcon; -import org.jdesktop.swingx.painter.BusyPainter; - -/** - * Wizard panel where atomic classes are shown in list. - * @author Lorenz Buehmann - * - */ -public class ClassPanelOWL extends JPanel{ - - private static final long serialVersionUID = 3026319637264844550L; - - private JXList conceptList; - - private JPanel contentPanel; - - private DefaultListModel model; - private JXBusyLabel loadingLabel; - private JLabel statusLabel; - - /** - * Constructor. - */ - @SuppressWarnings("unchecked") - public ClassPanelOWL() { - - super(); - - model = new DefaultListModel(); - loadingLabel = new JXBusyLabel(new Dimension(15, 15)); - statusLabel = new JLabel(); - - - BusyPainter painter = new BusyPainter( - new RoundRectangle2D.Float(0, 0, 6.0f, 2.6f, 10.0f, 10.0f), - new Ellipse2D.Float(2.0f, 2.0f, 11.0f, 11.0f)); - painter.setTrailLength(2); - painter.setPoints(7); - painter.setFrame(-1); - loadingLabel.setPreferredSize(new Dimension(15, 15)); - loadingLabel.setIcon(new EmptyIcon(15, 15)); - loadingLabel.setBusyPainter(painter); - - - - JPanel labelPanel = new JPanel(); - labelPanel.add(loadingLabel); - labelPanel.add(statusLabel); - - - contentPanel = getContentPanel(); - setLayout(new java.awt.BorderLayout()); - add(contentPanel, BorderLayout.CENTER); - add(labelPanel, BorderLayout.SOUTH); - } - - private JPanel getContentPanel() { - - JPanel contentPanel1 = new JPanel(); - JScrollPane scroll = new JScrollPane(); - - - - conceptList = new JXList(model); - conceptList.setFilterEnabled(true); - conceptList.setFilters(new FilterPipeline(new ShuttleSorter(0, true))); - conceptList.setHighlighters(HighlighterFactory.createSimpleStriping(HighlighterFactory.CLASSIC_LINE_PRINTER)); - conceptList.addHighlighter(new ColorHighlighter( HighlightPredicate.ROLLOVER_ROW)); - conceptList.setRolloverEnabled(true); -// conceptList.setSearchable(new ListsSearchPredicate.MATCH_ALL); -// conceptList.setHighlighters(HighlighterFactory.createAlternateStriping()); - - scroll.setPreferredSize(new Dimension(400, 400)); - scroll.setViewportView(conceptList); - contentPanel1.add(scroll); - - - - return contentPanel1; - } - - /** - * Returns list model for owl-classes. - * @return the list model - */ - public DefaultListModel getModel(){ - return model; - } - - - /** - * Adds list selection listener to atomic classes list. - * @param l the default list selection listener - */ - public void addSelectionListener(ListSelectionListener l){ - conceptList.addListSelectionListener(l); - } - - /** - * Returns the list where atomic owl classes are the list elements. - * @return instance of JList - */ - public JList getList(){ - return conceptList; - } - - /** - * Returns the label which reports the loading status. - * @return instance of JLabel - */ - public JLabel getStatusLabel() { - return statusLabel; - } - - /** - * Returns the animated label for loading action. - * @return instance of JXBusyLabel - */ - public JXBusyLabel getLoadingLabel() { - return loadingLabel; - } - - - - - - - -} \ No newline at end of file Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ClassPanelOWLDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ClassPanelOWLDescriptor.java 2009-08-04 20:02:34 UTC (rev 1817) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ClassPanelOWLDescriptor.java 2009-08-04 20:07:44 UTC (rev 1818) @@ -1,114 +0,0 @@ -/** - * Copyright (C) 2007-2008, 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.tools.ore; - -import javax.swing.event.ListSelectionEvent; - -import org.dllearner.core.owl.NamedClass; - - - -/** - * Wizard panel descriptor for selecting one of the atomic classes in OWL-ontology that - * has to be (re)learned. - * @author Lorenz Buehmann - * - */ -public class ClassPanelOWLDescriptor extends WizardPanelDescriptor implements javax.swing.event.ListSelectionListener{ - - /** - * Identification string for class choose panel. - */ - public static final String IDENTIFIER = "CLASS_CHOOSE_OWL_PANEL"; - /** - * Information string for class choose panel. - */ - public static final String INFORMATION = "In this panel all atomic classes in the ontology are shown in the list above. " - + "Select one of them which should be (re)learned from, then press \"Next-Button\""; - - private ClassPanelOWL owlClassPanel; - - /** - * Constructor creates new panel and adds listener to list. - */ - public ClassPanelOWLDescriptor() { - owlClassPanel = new ClassPanelOWL(); - owlClassPanel.addSelectionListener(this); - - setPanelDescriptorIdentifier(IDENTIFIER); - setPanelComponent(owlClassPanel); - - } - - @Override - public Object getNextPanelDescriptor() { - return LearningPanelDescriptor.IDENTIFIER; - } - - @Override - public Object getBackPanelDescriptor() { - return KnowledgeSourcePanelDescriptor.IDENTIFIER; - } - - @Override - public void aboutToDisplayPanel() { - getWizard().getInformationField().setText(INFORMATION); - setNextButtonAccordingToConceptSelected(); - } - - /** - * Method is called when other element in list is selected, and sets next button enabled. - * @param e ListSelectionEvent - */ - public void valueChanged(ListSelectionEvent e) { - setNextButtonAccordingToConceptSelected(); - if (!e.getValueIsAdjusting()) { - getWizardModel().getOre().setClassToLearn((NamedClass) owlClassPanel.getList().getSelectedValue()); - } - } - - private void setNextButtonAccordingToConceptSelected() { - - if (owlClassPanel.getList().getSelectedValue()!= null){ - getWizard().setNextFinishButtonEnabled(true); - }else{ - getWizard().setNextFinishButtonEnabled(false); - } - - } - - /** - * Returns the JPanel with the GUI elements. - * @return extended JPanel - */ - public ClassPanelOWL getOwlClassPanel() { - return owlClassPanel; - } - - - - - - - - - -} Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ClassPanelSparql.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ClassPanelSparql.java 2009-08-04 20:02:34 UTC (rev 1817) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ClassPanelSparql.java 2009-08-04 20:07:44 UTC (rev 1818) @@ -1,112 +0,0 @@ -/** - * Copyright (C) 2007-2008, 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.tools.ore; - -import java.awt.BorderLayout; -import java.awt.Dimension; -import java.awt.geom.Ellipse2D; -import java.awt.geom.RoundRectangle2D; - -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JTextField; - -import org.jdesktop.swingx.JXBusyLabel; -import org.jdesktop.swingx.icon.EmptyIcon; -import org.jdesktop.swingx.painter.BusyPainter; - -/** - * Wizard Panel for SPARQL-Mode. - * @author Lorenz Buehmann - * - */ -public class ClassPanelSparql extends JPanel{ - - private static final long serialVersionUID = 3026319637264844550L; - - private JTextField classField; - - private JPanel contentPanel; - - private JXBusyLabel loadingLabel; - private JLabel statusLabel; - - @SuppressWarnings("unchecked") - public ClassPanelSparql() { - - super(); - - statusLabel = new JLabel(); - - loadingLabel = new JXBusyLabel(new Dimension(15, 15)); - BusyPainter painter = new BusyPainter( - new RoundRectangle2D.Float(0, 0, 6.0f, 2.6f, 10.0f, 10.0f), - new Ellipse2D.Float(2.0f, 2.0f, 11.0f, 11.0f)); - painter.setTrailLength(2); - painter.setPoints(7); - painter.setFrame(-1); - loadingLabel.setPreferredSize(new Dimension(15, 15)); - loadingLabel.setIcon(new EmptyIcon(15, 15)); - loadingLabel.setBusyPainter(painter); - - - JPanel labelPanel = new JPanel(); - labelPanel.add(loadingLabel); - labelPanel.add(statusLabel); - - contentPanel = getContentPanel(); - setLayout(new java.awt.BorderLayout()); - add(contentPanel, BorderLayout.CENTER); - add(labelPanel, BorderLayout.SOUTH); - } - - private JPanel getContentPanel() { - - JPanel contentPanel = new JPanel(); - - classField = new JTextField(); - - contentPanel.add(classField); - - return contentPanel; - } - - - public JTextField getClassField(){ - return classField; - } - - - public JLabel getStatusLabel() { - return statusLabel; - } - - public JXBusyLabel getLoadingLabel() { - return loadingLabel; - } - - - - - - - -} \ No newline at end of file Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ClassPanelSparqlDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ClassPanelSparqlDescriptor.java 2009-08-04 20:02:34 UTC (rev 1817) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ClassPanelSparqlDescriptor.java 2009-08-04 20:07:44 UTC (rev 1818) @@ -1,72 +0,0 @@ -/** - * Copyright (C) 2007-2008, 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.tools.ore; - -/** - * Class for SPARQL-Mode - * @author Lorenz Buehmann - * - */ -public class ClassPanelSparqlDescriptor extends WizardPanelDescriptor{ - - public static final String IDENTIFIER = "CLASS_CHOOSE_SPARQL_PANEL"; - public static final String INFORMATION = "In this panel all atomic classes in the ontology are shown in the list above. " + - "Select one of them which should be (re)learned from then press \"Next-Button\""; - - ClassPanelSparql panel3; - - public ClassPanelSparqlDescriptor() { - panel3 = new ClassPanelSparql(); - - - setPanelDescriptorIdentifier(IDENTIFIER); - setPanelComponent(panel3); - - } - - @Override - public Object getNextPanelDescriptor() { - return LearningPanelDescriptor.IDENTIFIER; - } - - @Override - public Object getBackPanelDescriptor() { - return KnowledgeSourcePanelDescriptor.IDENTIFIER; - } - - @Override - public void aboutToDisplayPanel() { - getWizard().getInformationField().setText(INFORMATION); - - } - - - - - - - - - - - - -} Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ClassificationProgressMonitor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ClassificationProgressMonitor.java 2009-08-04 20:02:34 UTC (rev 1817) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ClassificationProgressMonitor.java 2009-08-04 20:07:44 UTC (rev 1818) @@ -1,117 +0,0 @@ -package org.dllearner.tools.ore; - -import java.awt.Cursor; -import java.awt.Dimension; - -import javax.swing.JPanel; -import javax.swing.JProgressBar; -import javax.swing.SwingUtilities; - -import org.mindswap.pellet.utils.progress.ProgressMonitor; - -public class ClassificationProgressMonitor extends JPanel implements ProgressMonitor{ - - /** - * - */ - private static final long serialVersionUID = -4913267621100462227L; - private javax.swing.ProgressMonitor monitor; - private JProgressBar progressBar; - private String progressMessage = ""; - private String progressTitle = ""; - private int progress = 0; - private int progressLength = 0; - private int progressPercent = -1; - private long startTime = -1; - private boolean canceled = false; - - - public ClassificationProgressMonitor(){ - super(); - monitor = new javax.swing.ProgressMonitor(this, progressTitle, progressMessage, 0 ,progressLength); - progressBar = new JProgressBar(0, progressLength); - progressBar.setValue(progress); - progressBar.setStringPainted(true); - add(progressBar); - setSize(new Dimension(200, 200)); - - } - - @Override - public int getProgress() { - return progress; - } - - @Override - public int getProgressPercent() { - return progressPercent; - } - - @Override - public void incrementProgress() { - setProgress(progress + 1); - - } - - @Override - public boolean isCanceled() { - return monitor.isCanceled(); - } - - @Override - public void setProgress(int progress) { - this.progress = progress; - updateProgress(); - - } - - @Override - public void setProgressLength(int length) { - progressLength = length; - monitor.setMaximum(length); - progressBar.setMaximum(length); - - } - - @Override - public void setProgressMessage(String message) { - progressMessage = message; - monitor.setNote(message); - - } - - @Override - public void setProgressTitle(String title) { - progressTitle = title; - - } - - @Override - public void taskFinished() { - monitor.close(); - setCursor(null); - - } - - @Override - public void taskStarted() { - setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - - } - - private void updateProgress(){ - SwingUtilities.invokeLater(new Runnable(){ - - @Override - public void run() { - monitor.setProgress(progress); - progressBar.setValue(progress); - - } - - }); - } - - - -} Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ColorListCellRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ColorListCellRenderer.java 2009-08-04 20:02:34 UTC (rev 1817) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ColorListCellRenderer.java 2009-08-04 20:07:44 UTC (rev 1818) @@ -1,78 +0,0 @@ -/** - * Copyright (C) 2007-2008, 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.tools.ore; - -import java.awt.Color; -import java.awt.Component; - -import javax.swing.JLabel; -import javax.swing.JList; -import javax.swing.ListCellRenderer; - -import org.dllearner.core.owl.Individual; -import org.dllearner.core.owl.NamedClass; - -/** - * List cell renderer for colored lines to provide better view on list values. - * @author Lorenz Buehmann - * - */ -public class ColorListCellRenderer extends JLabel implements ListCellRenderer { - - private static final long serialVersionUID = -7592805113197759247L; - private ORE ore; - - public ColorListCellRenderer(ORE ore) { - setOpaque(true); - this.ore = ore; - } - - public Component getListCellRendererComponent(JList list, Object value, - int index, boolean isSelected, boolean cellHasFocus) { - - if(value instanceof NamedClass){ - setText(((NamedClass) value).toManchesterSyntaxString(ore.getBaseURI(), ore.getPrefixes())); - } else if(value instanceof Individual){ - setText(((Individual) value).toManchesterSyntaxString(ore.getBaseURI(), ore.getPrefixes())); - } - Color background; - Color foreground; - - if (index % 2 == 0 && !isSelected) { - background = new Color(242, 242, 242); - foreground = Color.BLACK; - - } else if(isSelected){ - - background = Color.LIGHT_GRAY; - foreground = Color.BLACK; - }else{ - background = Color.WHITE; - foreground = Color.BLACK; - } - - setForeground(foreground); - setBackground(background); - - return this; - } - -} Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ColumnListCellRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ColumnListCellRenderer.java 2009-08-04 20:02:34 UTC (rev 1817) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ColumnListCellRenderer.java 2009-08-04 20:07:44 UTC (rev 1818) @@ -1,93 +0,0 @@ -/** - * Copyright (C) 2007-2008, 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.tools.ore; - -import java.awt.Color; -import java.awt.Component; -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; -import java.awt.Insets; -import java.math.BigDecimal; - -import javax.swing.JLabel; -import javax.swing.JList; -import javax.swing.JPanel; -import javax.swing.ListCellRenderer; - -import org.dllearner.learningproblems.EvaluatedDescriptionClass; - -/** - * List cell renderer for 2 columns. - * @author Lorenz Buehmann - * - */ -public class ColumnListCellRenderer extends JPanel implements ListCellRenderer { - - private static final long serialVersionUID = 3024913291199515567L; - private ORE ore; - - - public ColumnListCellRenderer(ORE ore) { - this.ore = ore; - setOpaque(true); - } - - public Component getListCellRendererComponent(JList list, Object value, - int index, boolean isSelected, boolean cellHasFocus) { - - removeAll(); - - JLabel cor = new JLabel(); - JLabel desc = new JLabel(); - setLayout(new GridBagLayout()); - desc.setText(((EvaluatedDescriptionClass) value).getDescription().toManchesterSyntaxString(ore.getBaseURI(), ore.getPrefixes())); - //round accuracy to 2 digits - double accuracy = ((EvaluatedDescriptionClass) value).getAccuracy(); - - BigDecimal roundedAccuracy = new BigDecimal(accuracy * 100); - roundedAccuracy = roundedAccuracy.setScale(2, BigDecimal.ROUND_HALF_UP); - cor.setText(String.valueOf(roundedAccuracy)); - add(cor, new GridBagConstraints(0, 0, 1, 1, 0.1, 0.0, GridBagConstraints.LINE_END, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));//, BorderLayout.WEST); - add(desc, new GridBagConstraints(1, 0, 1, 1, 0.8, 0.0, GridBagConstraints.LINE_START, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));//, BorderLayout.EAST); - - Color background; - Color foreground; - - if (index % 2 == 0 && !isSelected) { - background = new Color(242, 242, 242); - foreground = Color.BLACK; - - } else if(isSelected){ - - background = Color.LIGHT_GRAY; - foreground = Color.WHITE; - }else{ - background = Color.WHITE; - foreground = Color.BLACK; - } - - setForeground(foreground); - setBackground(background); - - return this; - } - -} \ No newline at end of file Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/DescriptionLabel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/DescriptionLabel.java 2009-08-04 20:02:34 UTC (rev 1817) +++ trunk/src/dl-learner/org/dllearner/tools/ore/DescriptionLabel.java 2009-08-04 20:07:44 UTC (rev 1818) @@ -1,315 +0,0 @@ -/** - * Copyright (C) 2007-2008, 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.tools.ore; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Cursor; -import java.awt.event.ActionListener; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.util.Map; -import java.util.Set; - -import javax.swing.JLabel; -import javax.swing.JMenu; -import javax.swing.JPopupMenu; -import javax.swing.ToolTipManager; - -import org.dllearner.core.owl.Description; -import org.dllearner.core.owl.Individual; -import org.dllearner.core.owl.NamedClass; -import org.dllearner.core.owl.Negation; -import org.dllearner.core.owl.ObjectAllRestriction; -import org.dllearner.core.owl.ObjectCardinalityRestriction; -import org.dllearner.core.owl.ObjectSomeRestriction; -import org.dllearner.core.owl.Thing; - -/** - * Label that might have menu items when clicked on it. - * @author Lorenz Buehmann - * - */ -public class DescriptionLabel extends JLabel implements MouseListener{ - /** - * - */ - private static final long serialVersionUID = 1L; - - private static final int MOVE_TO_CLASS = 0; - private static final int MOVE_FROM_CLASS = 1; - private static final int ADD_CLASS = 2; - private static final int REMOVE_CLASS = 3; - private static final int ADD_PROPERTY = 4; - private static final int REMOVE_RANGE_PROPERTY = 5; - private static final int DELETE_PROPERTY = 6; - private static final int REMOVE_NOT_RANGE_PROPERTY = 7; - - private final Description desc; - private Individual ind; - private ORE ore; - private JPopupMenu menu; - private String mode; - private String descriptionLabel; - - private String baseURI; - private Map<String, String> prefixes; - - /** - * constructor. - * - * @param d - * @param mode - */ - public DescriptionLabel(Description d, String mode) { - super(); - this.desc = d; - this.mode = mode; - setForeground(Color.red); - addMouseListener(this); - - } - - /** - * initialize description label with solution. - */ - public void init(){ - baseURI = ore.getBaseURI(); - prefixes = ore.getPrefixes(); - - setText(((Description) desc).toManchesterSyntaxString(ore.getBaseURI(), ore.getPrefixes())); - menu = new JPopupMenu(); - ToolTipManager.sharedInstance().setDismissDelay(7000); - //negative example solutions - if(mode.equals("neg")){ - if(!(desc instanceof Negation)){ - if(desc instanceof NamedClass){ //1. description is a named class - descriptionLabel = desc.toManchesterSyntaxString(baseURI, prefixes); - menu.add(new DescriptionMenuItem(REMOVE_CLASS, descriptionLabel, desc)); //1.a remove class assertion - - JMenu dme = new JMenu("move class assertion " + descriptionLabel + " to ..."); //1.b move individual - for(NamedClass nc : ore.getpossibleClassesMoveTo(ind)){ - DescriptionMenuItem move = new DescriptionMenuItem(MOVE_TO_CLASS, nc.toManchesterSyntaxString(baseURI, prefixes), (NamedClass) desc); - move.setName(nc.toString()); - dme.add(move); - Set<NamedClass> complements = ore.getComplements(nc, ind); //check for complement error - if(!(complements.isEmpty() || (complements.size() == 1 && complements.toArray()[0].toString().equals(desc.toString())))){ - move.setEnabled(false); - StringBuffer strBuf = new StringBuffer(); - strBuf.append("<html>class assertion not possible because individual<br> " - + "is still asserted to its complements:<br><BLOCKQUOTE>"); - - for(NamedClass n: complements){ - strBuf.append("<br><b>" + n + "</b>"); - } - strBuf.append("</BLOCKQUOTE></html>"); - - - move.setToolTipText(strBuf.toString()); - } - } - menu.add(dme); - } else if(desc instanceof ObjectSomeRestriction){ //2. description is a object some restriction - String propertyName = ((ObjectSomeRestriction) desc).getRole().toString(baseURI, prefixes); - String propertyRange = ((ObjectSomeRestriction) desc).getChild(0).toManchesterSyntaxString(baseURI, prefixes); - menu.add(new DescriptionMenuItem(DELETE_PROPERTY, propertyName , desc)); //2.a remove all property assertions - if (!(desc.getChild(0) instanceof Thing)){ - menu.add(new DescriptionMenuItem(REMOVE_RANGE_PROPERTY, propertyRange, desc)); //2.b remove property assertions with objects in range - } - } else if(desc instanceof ObjectAllRestriction){ //3. description is a object all restriction - if (!(desc.getChild(0) instanceof Thing)) { - JMenu dme = new JMenu("add property assertion " + ((ObjectAllRestriction) desc).getRole().toKBSyntaxString(baseURI, prefixes) //3.a add property assertion with object not in range - + " with object ..."); - for (Individual i : ore.getIndividualsNotInPropertyRange((ObjectAllRestriction) desc, ind)){ - dme.add(new DescriptionMenuItem(ADD_PROPERTY, i.toManchesterSyntaxString(baseURI, prefixes), desc)); - } - menu.add(dme); - } - } - - } else if(desc instanceof Negation){ - if(desc.getChild(0) instanceof NamedClass){ //4. description is a negated named class - DescriptionMenuItem addItem = new DescriptionMenuItem(ADD_CLASS, desc.getChild(0).toManchesterSyntaxString(baseURI, prefixes), desc.getChild(0)); - menu.add(addItem); //4.a add class assertion - Set<NamedClass> complements = ore.getComplements(desc.getChild(0), ind); //check for complement errors - if(!complements.isEmpty()){ - addItem.setEnabled(false); - StringBuffer strBuf = new StringBuffer(); - strBuf.append("<html>class assertion not possible because individual<br> " - + "is still asserted to its complements:<br><BLOCKQUOTE>"); - - for(NamedClass n: complements){ - strBuf.append("<br><b>" + n + "</b>"); - } - strBuf.append("</BLOCKQUOTE></html>"); - - - addItem.setToolTipText(strBuf.toString()); - } - } - } - } else if(mode.equals("pos")){//positive example solutions - if(!(desc instanceof Negation)){ - if(desc instanceof NamedClass){ - DescriptionMenuItem add = new DescriptionMenuItem(ADD_CLASS, desc.toManchesterSyntaxString(baseURI, prefixes), desc); - Set<NamedClass> complements = ore.getComplements(desc, ind); - if(!(complements.isEmpty())){ - add.setEnabled(false); - StringBuffer strBuf = new StringBuffer(); - strBuf.append("<html>class assertion not possible because individual<br> " - + "is still asserted to its complements:<br><BLOCKQUOTE>"); - - for(NamedClass n: complements){ - strBuf.append("<br><b>" + n + "</b>"); - } - strBuf.append("</BLOCKQUOTE></html>"); - - - add.setToolTipText(strBuf.toString()); - } - menu.add(add); - - Set<NamedClass> moveClasses = ore.getpossibleClassesMoveFrom(ind); - if(moveClasses.size() > 0){ - JMenu move = new JMenu("move to " + desc.toManchesterSyntaxString(baseURI, prefixes) + " from ..."); - for (NamedClass m : moveClasses){System.out.println("hier" + m); - DescriptionMenuItem item = new DescriptionMenuItem(MOVE_FROM_CLASS, m.toManchesterSyntaxString(baseURI, prefixes), desc); - item.setName(m.toString()); - move.add(item); - - if(!(complements.isEmpty() || (complements.size() == 1 && complements.toArray()[0].toString().equals(m.toString())))){ - move.setEnabled(false); - StringBuffer strBuf = new StringBuffer(); - strBuf.append("<html>moving class is not possible because individual<br> " - + "is still asserted to its complements:<br><BLOCKQUOTE>"); - - for(NamedClass n: complements){ - strBuf.append("<br><b>" + n + "</b>"); - } - strBuf.append("</BLOCKQUOTE></html>"); - - - move.setToolTipText(strBuf.toString()); - } - } - menu.add(move); - - } - - - } else if(desc instanceof ObjectSomeRestriction){ - JMenu dme = new JMenu("add property assertion " + ((ObjectSomeRestriction) desc).getRole() - + " with object ..."); - for (Individual i : ore.getIndividualsInPropertyRange((ObjectSomeRestriction) desc, ind)){ - dme.add(new DescriptionMenuItem(ADD_PROPERTY, i.toManchesterSyntaxString(baseURI, prefixes), desc)); - } - menu.add(dme); - - } else if(desc instanceof ObjectAllRestriction){ - if (!(desc.getChild(0) instanceof Thing)) { - menu.add(new DescriptionMenuItem(REMOVE_NOT_RANGE_PROPERTY, ((ObjectAllRestriction) desc).getChild(0).toString(baseURI, prefixes), desc)); - menu.add(new DescriptionMenuItem(DELETE_PROPERTY, ((ObjectAllRestriction) desc).getRole().toString(baseURI, prefixes), desc)); - } - } - - - } - - } else if(desc instanceof Negation){ - if(desc.getChild(0) instanceof NamedClass){ - descriptionLabel = desc.toManchesterSyntaxString(baseURI, prefixes); - menu.add(new DescriptionMenuItem(REMOVE_CLASS, descriptionLabel, desc)); - } - } - } - - - /** - * returns actual description. - * @return desc Description - */ - public Description getDescription(){ - return desc; - } - - /** - * adds action listeners to menu items. - * @param aL ActionListener - */ - public void addActionListeners(ActionListener aL){ - for(Component c : menu.getComponents()){ - if(c instanceof DescriptionMenuItem){ - ((DescriptionMenuItem) c).addActionListener(aL); - } else if(c instanceof JMenu){ - for(int i = 0; i < ((JMenu) c).getItemCount(); i++){ - ((JMenu) c).getItem(i).addActionListener(aL); - } - } - - - } - - - } - - public void setIndOre(ORE ore, Individual ind) { - this.ore = ore; - this.ind = ind; - } - - public void mouseClicked(MouseEvent e) { - menu.show(this.getParent(), getLocation().x, getLocation().y + 50); - - } - - /** - * Underlining label when mouse over. - */ - public void mouseEntered(MouseEvent e) { - setText("<html><u>" - + ((Description) desc).toManchesterSyntaxString(ore - .getBaseURI(), ore.getPrefixes()) + "</u></html>"); - setCursor(new Cursor(Cursor.HAND_CURSOR)); - if(desc instanceof ObjectCardinalityRestriction){ - setToolTipText("ObjectCardinality repair not available at present"); - } - - } - - /** - * Removing underlining when mosue relased. - */ - public void mouseExited(MouseEvent e) { - setText(((Description) desc).toManchesterSyntaxString(ore.getBaseURI(), - ore.getPrefixes())); - setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); - } - - public void mousePressed(MouseEvent e) { - // TODO Auto-generated method stub - - } - - public void mouseReleased(MouseEvent e) { - // TODO Auto-generated method stub - - } -} Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/DescriptionMenuItem.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/DescriptionMenuItem.java 2009-08-04 20:02:34 UTC (rev 1817) +++ trunk/src/dl-learner/org/dllearner/tools/ore/DescriptionMenuItem.java 2009-08-04 20:07:44 UTC (rev 1818) @@ -1,84 +0,0 @@ -/** - * Copyright (C) 2007-2008, 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.tools.ore; - -import javax.swing.JMenuItem; - -import org.dllearner.core.owl.Description; - -/** - * Item for possible repair action. - * @author Lorenz Buehmann - * - */ -public class DescriptionMenuItem extends JMenuItem { - - /** - * - */ - private static final long serialVersionUID = 6784086889435854440L; - - private Description desc; - private int action; - - public DescriptionMenuItem(int action, String text, Description d){ - super(); - if(action == 3){ - setText("remove class assertion to " + text); - } else if(action == 0){ - setText(text); - } else if(action == 2){ - setText("add class assertion to " + text); - } else if(action == 4){ - setText(text); - } else if(action == 6){ - setText("delete complete property " + text); - }else if(action == 5){ - setText("remove all property assertions to " + text); - } else if(action == 7){ - setText("remove all property assertions with range not in " + text); - } else if(action == 1){ - setText(text); - } - - this.desc = d; - this.action = action; - } - - /** - * Returns the description part where item is asserted to. - * @return description - */ - public Description getDescription(){ - return desc; - } - - /** - * Returns action type represented as number.. - * @return number - */ - public int getActionID(){ - return action; - } - - - -} Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/DescriptionPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/DescriptionPanel.java 2009-08-04 20:02:34 UTC (rev 1817) +++ trunk/src/dl-learner/org/dllearner/tools/ore/DescriptionPanel.java 2009-08-04 20:07:44 UTC (rev 1818) @@ -1,136 +0,0 @@ -/** - * Copyright (C) 2007-2008, 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.tools.ore; - -import java.awt.Color; -import java.awt.Component; -import java.awt.event.ActionListener; - -import javax.swing.BorderFactory; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.SwingUtilities; -import javax.swing.border.BevelBorder; - -import org.dllearner.core.owl.Description; -import org.dllearner.core.owl.Individual; - -/** - * Panel where learned class description is shown, and parts that might occur errors are red colored. - * @author Lorenz Buehmann - * - */ -public class DescriptionPanel extends JPanel{ - - /** - * - */ - private static final long serialVersionUID = -3684937339236885595L; - - private ORE ore; - private Individual ind; - private ActionListener aL; - private String mode; - private boolean correct = false; - private Description newClassDescription; - - public DescriptionPanel(ORE ore, Individual ind, ActionListener aL, String mode){ - super(); - setBackground(Color.WHITE); - setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); - this.ore = ore; - this.newClassDescription = ore.getNewClassDescription().getDescription(); - this.ind = ind; - this.aL = aL; - this.mode = mode; - if(mode.equals("neg")){ - for(JLabel jL : ore.descriptionToJLabelNeg(ind, newClassDescription)){ - add(jL); - if(jL instanceof DescriptionLabel){ - - ((DescriptionLabel) jL).setIndOre(ore, ind); - ((DescriptionLabel) jL).init(); - ((DescriptionLabel) jL).addActionListeners(aL); - - } - - } - } else if(mode.equals("pos")){ - for(JLabel jL : ore.descriptionToJLabelPos(ind, newClassDescription)){ - add(jL); - if(jL instanceof DescriptionLabel){ - - ((DescriptionLabel) jL).setIndOre(ore, ind); - ((DescriptionLabel) jL).init(); - ((DescriptionLabel) jL).addActionListeners(aL); - - } - - } - } - } - - /** - * Updates the panel. - */ - public void updatePanel(){ - for(Component c : getComponents()){ - if(c instanceof JLabel){ - remove(c); - } - } -// ore.updateReasoner(); - correct = true; - if (mode.equals("neg")) { - for (JLabel jL : ore.descriptionToJLabelNeg(ind, newClassDescription)) { - add(jL); - if (jL instanceof DescriptionLabel) { - ((DescriptionLabel) jL).setIndOre(ore, ind); - ((DescriptionLabel) jL).init(); - ((DescriptionLabel) jL).addActionListeners(aL); - correct = false; - - } - } - } else if(mode.equals("pos")){ - for (JLabel jL : ore.descriptionToJLabelPos(ind, newClassDescription)) { - add(jL); - if (jL instanceof DescriptionLabel) { - ((DescriptionLabel) jL).setIndOre(ore, ind); - ((DescriptionLabel) jL).init(); - ((DescriptionLabel) jL).addActionListeners(aL); - correct = false; - - } - } - } - SwingUtilities.updateComponentTreeUI(this); - - - } - /** - * Checks whether description is covered by positive example, or not covered by negative example. - * @return true if description is covered by positive example, or not covered by negative example, otherwise false is returned - */ - public boolean isCorrect(){ - return correct; - } -} \ No newline at end of file Added: trunk/src/dl-learner/org/dllearner/tools/ore/DescriptionParseTest.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/DescriptionParseTest.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/DescriptionParseTest.java 2009-08-04 20:07:44 UTC (rev 1818) @@ -0,0 +1,59 @@ +package org.dllearner.tools.ore; + +import java.io.StringWriter; +import java.net.URI; +import java.util.Collections; +import java.util.Set; + +import org.coode.manchesterowlsyntax.ManchesterOWLSyntaxClassFrameParser; +import org.semanticweb.owl.apibinding.OWLManager; +import org.semanticweb.owl.expression.ParserException; +import org.semanticweb.owl.expression.ShortFormEntityChecker; +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLClass; +import org.semanticweb.owl.model.OWLDataFactory; +import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.OWLOntologyChangeException; +import org.semanticweb.owl.model.OWLOntologyCreationException; +import org.semanticweb.owl.model.OWLOntologyManager; +import org.semanticweb.owl.util.BidirectionalShortFormProviderAdapter; +import org.semanticweb.owl.util.SimpleShortFormProvider; + +import com.clarkparsia.explanation.io.manchester.BlockWriter; +import com.clarkparsia.explanation.io.manchester.ManchesterSyntaxObjectRenderer; +import com.clarkparsia.explanation.io.manchester.TextBlockWriter; + +public class DescriptionParseTest { + + public static void main(String[] args) throws OWLOntologyChangeException, OWLOntologyCreationException, ParserException { + + System.out.println(System.getProperty("os.name")); + System.out.println(System.getProperty("os.version")); + System.out.println(System.getProperty("os.arch")); + + OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); + OWLDataFactory factory = manager.getOWLDataFactory(); + + OWLClass class1 = factory.getOWLClass(URI.create("Class1")); + OWLClass class2 = factory.getOWLClass(URI.create("Class2")); + OWLAxiom axiom = factory.getOWLSubClassAxiom(class1, class2); + OWLOntology ontology = manager.createOntology(Collections.singleton(axiom)); + + //rendering + StringWriter buffer = new StringWriter(); + BlockWriter writer = new TextBlockWriter(buffer); + ManchesterSyntaxObjectRenderer renderer = new ManchesterSyntaxObjectRenderer(writer); + axiom.accept(renderer); + String manSyntaxString = buffer.toString(); + System.out.println(manSyntaxString); + + //parsing + ManchesterOWLSyntaxClassFrameParser parser = new ManchesterOWLSyntaxClassFrameParser( + manager.getOWLDataFactory(), new ShortFormEntityChecker( + new BidirectionalShortFormProviderAdapter(manager, Collections + .singleton(ontology), new SimpleShortFormProvider()))); + Set<OWLAxiom> axioms = parser.parse(manSyntaxString); + + System.out.println(axioms); + } +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-08-04 20:02:34 UTC (rev 1817) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-08-04 20:07:44 UTC (rev 1818) @@ -1,7 +1,6 @@ package org.dllearner.tools.ore; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -9,8 +8,8 @@ import java.util.Set; import org.dllearner.tools.ore.explanation.ExplanationException; -import org.dllearner.tools.ore.explanation.LaconicExplanationGenerator; import org.dllearner.tools.ore.explanation.RootFinder; +import org.dllearner.tools.ore.explanation.laconic.LaconicExplanationGenerator; import org.mindswap.pellet.owlapi.PelletReasonerFactory; import org.mindswap.pellet.owlapi.Reasoner; import org.semanticweb.owl.model.OWLAxiom; @@ -29,7 +28,7 @@ import com.clarkparsia.explanation.PelletExplanation; -public class ExplanationManager implements OWLOntologyChangeListener, ImpactManagerListener{ +public class ExplanationManager implements OWLOntologyChangeListener, RepairManagerListener{ private static ExplanationManager instance; @@ -61,7 +60,7 @@ manager.addOntologyChangeListener(this); // manager.addOntologyChangeListener(reasoner); dataFactory = manager.getOWLDataFactory(); - ImpactManager.getImpactManager(reasoner).addListener(this); + RepairManager.getRepairManager(reasoner).addListener(this); reasonerFactory = new PelletReasonerFactory(); rootFinder = new RootFinder(manager, reasoner, reasonerFactory); @@ -270,11 +269,6 @@ } - @Override - public void axiomForImpactChanged() { - // TODO Auto-generated method stub - - } @Override public void repairPlanExecuted() { @@ -286,6 +280,12 @@ regularExplanationCache.clear(); laconicExplanationCache.clear(); } + + @Override + public void repairPlanChanged() { + // TODO Auto-generated method stub + + } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java 2009-08-04 20:02:34 UTC (rev 1817) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java 2009-08-04 20:07:44 UTC (rev 1818) @@ -30,6 +30,12 @@ import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import org.dllearner.tools.ore.ui.ClassificationProgressMonitor; +import org.dllearner.tools.ore.ui.ExplanationTable; +import org.dllearner.tools.ore.ui.ImpactTable; +import org.dllearner.tools.ore.ui.UnsatClassesListCellRenderer; +import org.dllearner.tools.ore.ui.wizard.panels.ExplanationTablePanel; +import org.dllearner.tools.ore.ui.wizard.panels.RepairPlanPanel; import org.jdesktop.swingx.JXList; import org.mindswap.pellet.PelletOptions; import org.mindswap.pellet.owlapi.PelletReasonerFactory; @@ -61,7 +67,7 @@ private ExplanationManager expManager; private ImpactManager impManager; - + private RepairManager repManager; private OWLClass unsatClass; @@ -70,11 +76,12 @@ */ private static final long serialVersionUID = 2213073383532597460L; - public ExplanationPanel(ExplanationManager expMan, ImpactManager impMan) { + public ExplanationPanel(ExplanationManager expMan, ImpactManager impMan, RepairManager repMan) { this.expManager = expMan; this.impManager = impMan; + this.repManager = repMan; impManager.addListener(this); setLayout(new BorderLayout()); @@ -141,7 +148,7 @@ impactPanel.add(impScr); impRepSplit.setRightComponent(impactPanel); - RepairPlanPanel repairPanel = new RepairPlanPanel(impManager); + RepairPlanPanel repairPanel = new RepairPlanPanel(repManager); impRepSplit.setLeftComponent(repairPanel); @@ -185,7 +192,7 @@ // t.add(r.render(ax)); // model.addColumn("axiom", t); - ExplanationTable expTable = new ExplanationTable(explanation, impManager, expManager, unsatClass); + ExplanationTable expTable = new ExplanationTable(explanation, repManager, impManager, expManager, unsatClass); explanationsPanel.add(new ExplanationTablePanel(expTable, number)); } @@ -340,8 +347,9 @@ .getExplanationManager(reasoner); Impact... [truncated message content] |
From: <jen...@us...> - 2009-08-06 14:23:35
|
Revision: 1819 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1819&view=rev Author: jenslehmann Date: 2009-08-06 14:23:17 +0000 (Thu, 06 Aug 2009) Log Message: ----------- - new stat constructor for merging two stat objects - evaluation script extended Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java Modified: trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java 2009-08-04 20:07:44 UTC (rev 1818) +++ trunk/src/dl-learner/org/dllearner/scripts/evaluation/OntologyEngineering.java 2009-08-06 14:23:17 UTC (rev 1819) @@ -78,10 +78,10 @@ private static DecimalFormat df = new DecimalFormat(); // for performance measurements and development - private static boolean autoMode = true; + private static boolean autoMode = false; private static boolean useFastInstanceChecker = true; - private static boolean useApproximations = false; - private static boolean computeApproxDiff = true; + private static boolean useApproximations = true; + private static boolean computeApproxDiff = false; @SuppressWarnings("unchecked") public static void main(String[] args) throws ComponentInitException, @@ -424,6 +424,24 @@ + accAboveThresholdStatSC.prettyPrint("")); System.out.println("non-perfect (not 100% accuracy) axioms selected: " + nonPerfectCountSC); System.out.println("average number typed by user: " + positionStatSC.prettyPrint("")); + System.out.println(); + + System.out.println("merged statistics for equivalence/superclass:"); + System.out.println("classes above " + (minAccuracy * 100) + "% threshold: " + + (candidatesAboveThresholdCount+candidatesAboveThresholdCountSC)); + System.out.println("axioms learned succesfully: " + (foundDescriptionCount+foundDescriptionCountSC)); + System.out.println("axioms missed: " + (missesCount+missesCountSC)); + System.out.println("class with no sensible axioms: " + (noSensibleDescriptionCount+noSensibleDescriptionCountSC)); + System.out.println("inconsistencies detected: " + (inconsistencyDetected+inconsistencyDetectedSC)); + System.out.println("additional instances found: " + new Stat(moreInstancesCountStat,moreInstancesCountStatSC).prettyPrint("")); + System.out.println("average accuracy overall: " + new Stat(accStat,accStatSC).prettyPrint("")); + System.out.println("average accuracy of selected expressions: " + + new Stat(accSelectedStat,accSelectedStatSC).prettyPrint("")); + System.out.println("average accuracy of expressions above threshold: " + + new Stat(accAboveThresholdStat,accAboveThresholdStatSC).prettyPrint("")); + System.out.println("non-perfect (not 100% accuracy) axioms selected: " + (nonPerfectCount+nonPerfectCountSC)); + System.out.println("average number typed by user: " + new Stat(positionStat,positionStatSC).prettyPrint("")); + System.out.println(); } @SuppressWarnings("unused") Modified: trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java =================================================================== --- trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java 2009-08-04 20:07:44 UTC (rev 1818) +++ trunk/src/dl-learner/org/dllearner/utilities/statistics/Stat.java 2009-08-06 14:23:17 UTC (rev 1819) @@ -39,7 +39,26 @@ //used to give a good percentage output private DecimalFormat df = new DecimalFormat( ".00%" ); + public Stat() { + + } + /** + * Creates a new stat object by merging two stat objects. The result is the same as if + * the numbers, which have been added to stat1 and stat2 would have been added to this + * stat object. + * @param stat1 Statistical object 1. + * @param stat2 Statistical object 2. + */ + public Stat(Stat stat1, Stat stat2) { + count = stat1.count + stat2.count; + sum = stat1.sum + stat2.sum; + squareSum = stat1.squareSum + stat2.squareSum; + min = Math.min(stat1.min, stat2.min); + max = Math.max(stat1.max, stat2.max); + } + + /** * Add a number to this object. * * @param number This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jen...@us...> - 2009-08-17 15:18:09
|
Revision: 1825 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1825&view=rev Author: jenslehmann Date: 2009-08-17 15:17:59 +0000 (Mon, 17 Aug 2009) Log Message: ----------- return solutions in descending order Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/learningproblems/EvaluatedDescriptionClass.java trunk/src/dl-learner/org/dllearner/server/DLLearnerWS.java Modified: trunk/src/dl-learner/org/dllearner/learningproblems/EvaluatedDescriptionClass.java =================================================================== --- trunk/src/dl-learner/org/dllearner/learningproblems/EvaluatedDescriptionClass.java 2009-08-15 11:31:37 UTC (rev 1824) +++ trunk/src/dl-learner/org/dllearner/learningproblems/EvaluatedDescriptionClass.java 2009-08-17 15:17:59 UTC (rev 1825) @@ -105,6 +105,7 @@ * descriptions by transforming them to a JSON string. * @return A JSON representation of an evaluated description. */ + @Override public String asJSON() { JSONObject object = new JSONObject(); try { Modified: trunk/src/dl-learner/org/dllearner/server/DLLearnerWS.java =================================================================== --- trunk/src/dl-learner/org/dllearner/server/DLLearnerWS.java 2009-08-15 11:31:37 UTC (rev 1824) +++ trunk/src/dl-learner/org/dllearner/server/DLLearnerWS.java 2009-08-17 15:17:59 UTC (rev 1825) @@ -366,7 +366,7 @@ TreeSet<? extends EvaluatedDescription> descriptions = state.getLearningAlgorithm().getCurrentlyBestEvaluatedDescriptions(); String json = "{"; int count = 1; - for(EvaluatedDescription description : descriptions) { + for(EvaluatedDescription description : descriptions.descendingSet()) { if (count>1) json += ",\"solution" + count + "\" : " + description.asJSON(); else json += "\"solution" + count + "\" : " + description.asJSON(); count++; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2009-08-24 09:19:31
|
Revision: 1829 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1829&view=rev Author: lorenz_b Date: 2009-08-24 09:19:17 +0000 (Mon, 24 Aug 2009) Log Message: ----------- * started simple Sparql extraction panel * made some changes in GUI Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManagerListener.java trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java trunk/src/dl-learner/org/dllearner/tools/ore/RepairManagerListener.java trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/ExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LaconicTest.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/OWLSyntaxTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RecentManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairDialog.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBarSimulator.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/InconsistencyExplanationPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/KnowledgeSourcePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LearningPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/StatsPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/Explanation.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/PelletExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/recent.txt trunk/src/dl-learner/org/dllearner/tools/ore/toggled.gif trunk/src/dl-learner/org/dllearner/tools/ore/ui/ClassesTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ClassesTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/SparqlExtractOptionsPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatClassesTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/untoggled.gif Removed Paths: ------------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ColumnListCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ReasonerProgressUI.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatClassesListCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassPanelOWLDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassPanelSparqlDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassPanelOWL.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassPanelSparql.java Modified: trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java =================================================================== --- trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -59,6 +59,7 @@ import org.dllearner.kb.OWLAPIOntology; import org.dllearner.kb.OWLFile; import org.dllearner.kb.sparql.SparqlKnowledgeSource; +import org.dllearner.tools.ore.explanation.PelletExplanationGenerator; import org.dllearner.utilities.Helper; import org.dllearner.utilities.owl.ConceptComparator; import org.dllearner.utilities.owl.ConceptTransformation; @@ -394,6 +395,7 @@ factory = manager.getOWLDataFactory(); //set classification output to "none", while default is "console" PelletOptions.USE_CLASSIFICATION_MONITOR = PelletOptions.MonitorType.SWING; + // change log level to WARN for Pellet, because otherwise log // output will be very large Logger pelletLogger = Logger.getLogger("org.mindswap.pellet"); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -1,15 +1,13 @@ package org.dllearner.tools.ore; import java.util.ArrayList; -import java.util.HashMap; import java.util.HashSet; import java.util.List; -import java.util.Map; import java.util.Set; import org.dllearner.tools.ore.explanation.CachedExplanationGenerator; +import org.dllearner.tools.ore.explanation.Explanation; import org.dllearner.tools.ore.explanation.RootFinder; -import org.dllearner.tools.ore.explanation.laconic.LaconicExplanationGenerator; import org.mindswap.pellet.owlapi.PelletReasonerFactory; import org.mindswap.pellet.owlapi.Reasoner; import org.semanticweb.owl.model.OWLAxiom; @@ -26,8 +24,6 @@ import uk.ac.manchester.cs.owl.explanation.ordering.DefaultExplanationOrderer; import uk.ac.manchester.cs.owl.explanation.ordering.ExplanationTree; -import com.clarkparsia.explanation.PelletExplanation; - public class ExplanationManager implements OWLOntologyChangeListener, RepairManagerListener{ private static ExplanationManager instance; @@ -37,11 +33,9 @@ private PelletReasonerFactory reasonerFactory; private OWLOntology ontology; private Reasoner reasoner; - private PelletExplanation regularExpGen; - private LaconicExplanationGenerator laconicExpGen; + private RootFinder rootFinder; - private Map<OWLClass, Set<Set<OWLAxiom>>> regularExplanationCache; - private Map<OWLClass, Set<Set<OWLAxiom>>> laconicExplanationCache; + private Set<OWLClass> unsatClasses; private Set<OWLClass> rootClasses; boolean ontologyChanged = true; @@ -56,9 +50,7 @@ private ExplanationManager(Reasoner reasoner) { - regularExplanationCache = new HashMap<OWLClass, Set<Set<OWLAxiom>>>(); - laconicExplanationCache = new HashMap<OWLClass, Set<Set<OWLAxiom>>>(); - + this.reasoner = reasoner; this.manager = reasoner.getManager(); this.ontology = reasoner.getLoadedOntologies().iterator().next(); @@ -71,21 +63,20 @@ rootFinder = new RootFinder(manager, reasoner, reasonerFactory); - regularExpGen = new PelletExplanation(reasoner.getManager(), reasoner.getLoadedOntologies()); - - laconicExpGen = new LaconicExplanationGenerator(manager, - reasonerFactory, manager.getOntologies()); - rootClasses = new HashSet<OWLClass>(); unsatClasses = new HashSet<OWLClass>(); listeners = new ArrayList<ExplanationManagerListener>(); - gen = new CachedExplanationGenerator(ontology); + gen = new CachedExplanationGenerator(ontology, reasoner); } - public static synchronized ExplanationManager getExplanationManager( + public ExplanationManager() { + // TODO Auto-generated constructor stub + } + + public static synchronized ExplanationManager getInstance( Reasoner reasoner) { if (instance == null) { instance = new ExplanationManager(reasoner); @@ -93,8 +84,10 @@ return instance; } - public static synchronized ExplanationManager getExplanationManager(){ - + public static synchronized ExplanationManager getInstance(){ + if (instance == null) { + instance = new ExplanationManager(); + } return instance; } @@ -125,28 +118,28 @@ OWLSubClassAxiom entailment = dataFactory.getOWLSubClassAxiom(unsat, dataFactory.getOWLNothing()); - Set<Set<OWLAxiom>> explanations; + Set<Explanation> explanations; if (isComputeAllExplanations) { explanations = gen.getExplanations(entailment); } else { explanations = gen.getExplanations(entailment, maxExplantionCount); } - return getOrderedExplanations(entailment, explanations); + return getOrderedExplanations(explanations); } public Set<List<OWLAxiom>> getInconsistencyExplanations(){ OWLSubClassAxiom entailment = dataFactory.getOWLSubClassAxiom(dataFactory.getOWLThing(), dataFactory.getOWLNothing()); - Set<Set<OWLAxiom>> explanations; + Set<Explanation> explanations; if (isComputeAllExplanations) { explanations = gen.getExplanations(entailment); } else { explanations = gen.getExplanations(entailment, maxExplantionCount); } - return getOrderedExplanations(entailment, explanations); + return getOrderedExplanations(explanations); } @@ -160,13 +153,13 @@ return ordering; } - private Set<List<OWLAxiom>> getOrderedExplanations(OWLAxiom entailment, Set<Set<OWLAxiom>> explanations){ + private Set<List<OWLAxiom>> getOrderedExplanations(Set<Explanation> explanations){ DefaultExplanationOrderer orderer = new DefaultExplanationOrderer(); Set<List<OWLAxiom>> orderedExplanations = new HashSet<List<OWLAxiom>>(); ArrayList<OWLAxiom> ordering; - for(Set<OWLAxiom> explanation : explanations){ + for(Explanation explanation : explanations){ ordering = new ArrayList<OWLAxiom>(); - ExplanationTree tree = orderer.getOrderedExplanation(entailment, explanation); + ExplanationTree tree = orderer.getOrderedExplanation(explanation.getEntailment(), explanation.getAxioms()); // ordering.add(tree.getUserObject()); for(Tree<OWLAxiom> child : tree.getChildren()){ @@ -186,12 +179,12 @@ public int getArity(OWLClass cl, OWLAxiom ax) { int arity = 0; - Set<Set<OWLAxiom>> explanations = gen.getExplanations(dataFactory.getOWLSubClassAxiom(cl, dataFactory.getOWLNothing())); + Set<Explanation> explanations = gen.getExplanations(dataFactory.getOWLSubClassAxiom(cl, dataFactory.getOWLNothing())); if(explanations != null){ - for (Set<OWLAxiom> explanation : explanations) { - if (explanation.contains(ax)) { + for (Explanation explanation : explanations) { + if (explanation.getAxioms().contains(ax)) { arity++; } } @@ -201,7 +194,7 @@ public void setLaconicMode(boolean laconic){ gen.setComputeLaconicExplanations(laconic); - fireExplanationLimitChanged(); + fireExplanationTypeChanged(); } @@ -224,14 +217,9 @@ } @Override - public void repairPlanExecuted() { + public void repairPlanExecuted(List<OWLOntologyChange> changes) { reasoner.refresh(); ontologyChanged = true; - regularExpGen = new PelletExplanation(reasoner.getManager(), reasoner.getLoadedOntologies()); - laconicExpGen = new LaconicExplanationGenerator(manager, - reasonerFactory, reasoner.getLoadedOntologies()); - regularExplanationCache.clear(); - laconicExplanationCache.clear(); } @Override @@ -254,6 +242,12 @@ } } + public void fireExplanationTypeChanged(){ + for(ExplanationManagerListener listener : listeners){ + listener.explanationTypeChanged(); + } + } + public void setAllExplanationWarningChecked(){ allExplanationWarningChecked = true; } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -34,7 +34,7 @@ import org.dllearner.tools.ore.ui.ExplanationTable; import org.dllearner.tools.ore.ui.ImpactTable; import org.dllearner.tools.ore.ui.StatusBar; -import org.dllearner.tools.ore.ui.UnsatClassesListCellRenderer; +import org.dllearner.tools.ore.ui.UnsatClassesTableCellRenderer; import org.dllearner.tools.ore.ui.wizard.panels.ExplanationTablePanel; import org.dllearner.tools.ore.ui.wizard.panels.RepairPlanPanel; import org.jdesktop.swingx.JXList; @@ -46,11 +46,12 @@ import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.OWLOntologyChange; import org.semanticweb.owl.model.OWLOntologyCreationException; import org.semanticweb.owl.model.OWLOntologyManager; public class ExplanationPanel extends JPanel implements ListSelectionListener, - ActionListener,ImpactManagerListener, ExplanationManagerListener{ + ActionListener,ImpactManagerListener, ExplanationManagerListener, RepairManagerListener{ private JXList unsatList; private JSplitPane splitPane; @@ -64,7 +65,7 @@ private JRadioButton regularButton; private JRadioButton laconicButton; - private UnsatClassesListCellRenderer listRenderer; + private UnsatClassesTableCellRenderer listRenderer; private ExplanationManager expManager; private ImpactManager impManager; @@ -91,11 +92,11 @@ Dimension minimumSize = new Dimension(400, 400); - listRenderer = new UnsatClassesListCellRenderer(expManager); + listRenderer = new UnsatClassesTableCellRenderer(expManager); unsatList = new JXList(); fillUnsatClassesList(); unsatList.addListSelectionListener(this); - unsatList.setCellRenderer(listRenderer); +// unsatList.setCellRenderer(listRenderer); listScrollPane = new JScrollPane(unsatList); listScrollPane.setPreferredSize(minimumSize); @@ -298,13 +299,13 @@ } @Override - public void axiomForImpactChanged() { + public void impactListChanged() { // TODO Auto-generated method stub } @Override - public void repairPlanExecuted() { + public void repairPlanExecuted(List<OWLOntologyChange> changes) { explanationsPanel.removeAll(); fillUnsatClassesList(); @@ -369,8 +370,8 @@ ExplanationManager expManager = ExplanationManager - .getExplanationManager(reasoner); - ImpactManager impManager = ImpactManager.getImpactManager( + .getInstance(reasoner); + ImpactManager impManager = ImpactManager.getInstance( reasoner); RepairManager repManager= RepairManager.getRepairManager(reasoner); ExplanationPanel panel = new ExplanationPanel(expManager, @@ -412,6 +413,12 @@ } + @Override + public void repairPlanChanged() { + // TODO Auto-generated method stub + + } + Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -11,9 +11,10 @@ import org.mindswap.pellet.owlapi.Reasoner; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.OWLOntologyChange; import org.semanticweb.owl.model.OWLOntologyManager; -public class ImpactManager { +public class ImpactManager implements RepairManagerListener{ private static ImpactManager instance; private Map<OWLAxiom, Set<OWLAxiom>> impact; @@ -33,6 +34,7 @@ selectedAxioms = new ArrayList<OWLAxiom>(); listeners = new ArrayList<ImpactManagerListener>(); ranker = new AxiomRanker(ontology, reasoner, manager); + RepairManager.getRepairManager(reasoner).addListener(this); } @@ -48,7 +50,7 @@ listeners.remove(listener); } - public static synchronized ImpactManager getImpactManager(Reasoner reasoner) { + public static synchronized ImpactManager getInstance(Reasoner reasoner) { if (instance == null) { instance = new ImpactManager(reasoner); } @@ -85,18 +87,18 @@ public void setActualAxiom(OWLAxiom ax){ actual = ax; - fireAxiomForImpactChanged(); + fireImpactListChanged(); } public void addAxiom2ImpactList(OWLAxiom ax){ selectedAxioms.add(ax); - fireAxiomForImpactChanged(); + fireImpactListChanged(); } public void removeAxiomFromImpactList(OWLAxiom ax){ selectedAxioms.remove(ax); - fireAxiomForImpactChanged(); + fireImpactListChanged(); } public boolean isSelected(OWLAxiom ax){ @@ -104,11 +106,25 @@ } - private void fireAxiomForImpactChanged(){ + private void fireImpactListChanged(){ for(ImpactManagerListener listener : listeners){ - listener.axiomForImpactChanged(); + listener.impactListChanged(); } } + + @Override + public void repairPlanChanged() { + // TODO Auto-generated method stub + + } + + @Override + public void repairPlanExecuted(List<OWLOntologyChange> changes) { + selectedAxioms.clear(); + impact.clear(); + fireImpactListChanged(); + + } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManagerListener.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManagerListener.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManagerListener.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -1,6 +1,5 @@ package org.dllearner.tools.ore; public interface ImpactManagerListener { - public abstract void axiomForImpactChanged(); - public abstract void repairPlanExecuted(); + public abstract void impactListChanged(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -30,8 +30,7 @@ import org.dllearner.tools.ore.ui.wizard.Wizard; import org.dllearner.tools.ore.ui.wizard.WizardPanelDescriptor; -import org.dllearner.tools.ore.ui.wizard.descriptors.ClassPanelOWLDescriptor; -import org.dllearner.tools.ore.ui.wizard.descriptors.ClassPanelSparqlDescriptor; +import org.dllearner.tools.ore.ui.wizard.descriptors.ClassChoosePanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.IntroductionPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.KnowledgeSourcePanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.LearningPanelDescriptor; @@ -79,21 +78,18 @@ WizardPanelDescriptor descriptor2 = new KnowledgeSourcePanelDescriptor(); wizard.registerWizardPanel(KnowledgeSourcePanelDescriptor.IDENTIFIER, descriptor2); - WizardPanelDescriptor descriptor3 = new ClassPanelOWLDescriptor(); - wizard.registerWizardPanel(ClassPanelOWLDescriptor.IDENTIFIER, descriptor3); + WizardPanelDescriptor descriptor3 = new ClassChoosePanelDescriptor(); + wizard.registerWizardPanel(ClassChoosePanelDescriptor.IDENTIFIER, descriptor3); - WizardPanelDescriptor descriptor4 = new ClassPanelSparqlDescriptor(); - wizard.registerWizardPanel(ClassPanelSparqlDescriptor.IDENTIFIER, descriptor4); + WizardPanelDescriptor descriptor4 = new LearningPanelDescriptor(); + wizard.registerWizardPanel(LearningPanelDescriptor.IDENTIFIER, descriptor4); - WizardPanelDescriptor descriptor5 = new LearningPanelDescriptor(); - wizard.registerWizardPanel(LearningPanelDescriptor.IDENTIFIER, descriptor5); + WizardPanelDescriptor descriptor5 = new RepairPanelDescriptor(); + wizard.registerWizardPanel(RepairPanelDescriptor.IDENTIFIER, descriptor5); - WizardPanelDescriptor descriptor6 = new RepairPanelDescriptor(); - wizard.registerWizardPanel(RepairPanelDescriptor.IDENTIFIER, descriptor6); + WizardPanelDescriptor descriptor6 = new SavePanelDescriptor(); + wizard.registerWizardPanel(SavePanelDescriptor.IDENTIFIER, descriptor6); - WizardPanelDescriptor descriptor7 = new SavePanelDescriptor(); - wizard.registerWizardPanel(SavePanelDescriptor.IDENTIFIER, descriptor7); - if (!(args.length == 1)){ wizard.setCurrentPanel(IntroductionPanelDescriptor.IDENTIFIER); } else{ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -17,7 +17,7 @@ import org.dllearner.algorithms.celoe.CELOE; import org.dllearner.core.ComponentInitException; import org.dllearner.core.ComponentManager; -import org.dllearner.core.LearningAlgorithm; +import org.dllearner.core.KnowledgeSource; import org.dllearner.core.LearningProblemUnsupportedException; import org.dllearner.core.owl.Description; import org.dllearner.core.owl.Individual; @@ -26,6 +26,7 @@ import org.dllearner.core.owl.ObjectQuantorRestriction; import org.dllearner.core.owl.Union; import org.dllearner.kb.OWLFile; +import org.dllearner.kb.sparql.SparqlKnowledgeSource; import org.dllearner.learningproblems.ClassLearningProblem; import org.dllearner.learningproblems.EvaluatedDescriptionClass; import org.dllearner.reasoning.PelletReasoner; @@ -46,7 +47,7 @@ private PelletReasoner pelletReasoner; private ClassLearningProblem lp; private CELOE la; - private OWLFile ks; + private KnowledgeSource ks; private String baseURI; private Map<String, String> prefixes; @@ -81,7 +82,7 @@ public void setCurrentKnowledgeSource(URI uri){ ks = cm.knowledgeSource(OWLFile.class); try { - ks.getConfigurator().setUrl(uri.toURL()); + ((OWLFile)ks).getConfigurator().setUrl(uri.toURL()); ks.init(); } catch (MalformedURLException e) { // TODO Auto-generated catch block @@ -93,6 +94,11 @@ } + public void setCurrentKnowledgeSource(SparqlKnowledgeSource ks){ + this.ks = ks; + + } + public void setLearningProblem(){ lp = cm.learningProblem(ClassLearningProblem.class, pelletReasoner); @@ -245,8 +251,12 @@ this.maxNrOfResults = maxNrOfResults; } + public int getMaxNrOfResults(){ + return maxNrOfResults; + } + /** * Sets the class that has to be learned. * @param oldClass class that is chosen to be (re)learned @@ -288,7 +298,7 @@ } - public LearningAlgorithm getLa() { + public CELOE getLa() { return la; } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -1,13 +1,9 @@ package org.dllearner.tools.ore; import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.Stack; -import org.dllearner.tools.ore.explanation.AxiomRanker; import org.mindswap.pellet.owlapi.Reasoner; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLOntology; @@ -27,6 +23,9 @@ private OWLOntology ontology; private OWLOntologyManager manager; private Reasoner reasoner; + + private Stack<List<OWLOntologyChange>> undoStack; + private Stack<List<OWLOntologyChange>> redoStack; private RepairManager(Reasoner reasoner) { this.reasoner = reasoner; @@ -36,6 +35,8 @@ axioms2Remove = new ArrayList<OWLAxiom>(); listeners = new ArrayList<RepairManagerListener>(); + undoStack = new Stack<List<OWLOntologyChange>>(); + redoStack = new Stack<List<OWLOntologyChange>>(); } @@ -87,21 +88,36 @@ System.out.println("Error in Repairmanager: Couldn't apply ontology changes"); e.printStackTrace(); } - + undoStack.push(changes); axioms2Remove.clear(); - fireRepairPlanExecuted(); + fireRepairPlanExecuted(changes); } + public void undo(){ + List<OWLOntologyChange> changes = undoStack.pop(); + redoStack.push(changes); + try { + manager.applyChanges(changes); + } catch (OWLOntologyChangeException e) { + System.out.println("Error in Repairmanager: Couldn't apply ontology changes"); + e.printStackTrace(); + } + } + + public void redo(){ + + } + private void fireRepairPlanChanged(){ for(RepairManagerListener listener : listeners){ listener.repairPlanChanged(); } } - private void fireRepairPlanExecuted(){ + private void fireRepairPlanExecuted(List<OWLOntologyChange> changes){ for(RepairManagerListener listener : listeners){ - listener.repairPlanExecuted(); + listener.repairPlanExecuted(changes); } } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/RepairManagerListener.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/RepairManagerListener.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/RepairManagerListener.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -1,6 +1,10 @@ package org.dllearner.tools.ore; +import java.util.List; + +import org.semanticweb.owl.model.OWLOntologyChange; + public interface RepairManagerListener { - public abstract void repairPlanExecuted(); + public abstract void repairPlanExecuted(List<OWLOntologyChange> changes); public abstract void repairPlanChanged(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/SPARQLTest.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -21,7 +21,6 @@ import java.net.MalformedURLException; import java.net.URL; -import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; @@ -34,17 +33,11 @@ import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlKnowledgeSource; -import org.dllearner.kb.sparql.SparqlQuery; import org.dllearner.learningproblems.ClassLearningProblem; import org.dllearner.reasoning.FastInstanceChecker; -import org.dllearner.reasoning.OWLAPIReasoner; import org.dllearner.utilities.datastructures.SetManipulation; -import org.dllearner.utilities.examples.AutomaticNegativeExampleFinderSPARQL; import org.dllearner.utilities.examples.AutomaticPositiveExampleFinderSPARQL; -import com.hp.hpl.jena.query.ResultSet; -import com.hp.hpl.jena.query.ResultSetFactory; - /** * Test class for SPARQL mode. * @@ -55,7 +48,7 @@ @SuppressWarnings("unused") public static void main(String[] args) throws MalformedURLException { - String exampleClass = "http://dbpedia.org/class/yago/LeadersOfPoliticalParties"; + String exampleClass = "http://dbpedia.org/ontology/HistoricPlace"; String exampleClassKBString = "\"" + exampleClass + "\""; ComponentManager cm = ComponentManager.getInstance(); @@ -104,7 +97,7 @@ cm.applyConfigEntry(ks, "predefinedEndpoint", "DBPEDIA"); ks.getConfigurator().setInstances(instances); ks.getConfigurator().setPredefinedFilter("YAGO"); - ks.getConfigurator().setSaveExtractedFragment(true); +// ks.getConfigurator().setSaveExtractedFragment(true); ks.init(); ReasonerComponent reasoner = cm.reasoner(FastInstanceChecker.class, ks); reasoner.init(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -3,45 +3,52 @@ import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; +import java.util.Map.Entry; +import org.dllearner.tools.ore.RepairManager; +import org.dllearner.tools.ore.RepairManagerListener; import org.dllearner.tools.ore.explanation.laconic.LaconicExplanationGenerator; import org.mindswap.pellet.owlapi.PelletReasonerFactory; +import org.mindswap.pellet.owlapi.Reasoner; import org.semanticweb.owl.apibinding.OWLManager; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.OWLOntologyChange; import org.semanticweb.owl.model.OWLOntologyManager; +import org.semanticweb.owl.model.RemoveAxiom; import uk.ac.manchester.cs.owl.modularity.ModuleType; -import com.clarkparsia.explanation.PelletExplanation; import com.clarkparsia.modularity.ModularityUtils; import com.clarkparsia.owlapi.OntologyUtils; -public class CachedExplanationGenerator implements ExplanationGenerator{ +public class CachedExplanationGenerator implements ExplanationGenerator, RepairManagerListener{ private Map<OWLAxiom, OWLOntology> axiom2Module; - private Map<OWLAxiom, Set<Set<OWLAxiom>>> regularExplanationCache; - private Map<OWLAxiom, Set<Set<OWLAxiom>>> laconicExplanationCache; + private Map<OWLAxiom, Set<Explanation>> regularExplanationCache; + private Map<OWLAxiom, Set<Explanation>> laconicExplanationCache; private Map<OWLAxiom, Integer> lastRequestedRegularSize; private Map<OWLAxiom, Integer> lastRequestedLaconicSize; private boolean laconicMode = false; - private PelletExplanation regularExpGen; + private PelletExplanationGenerator regularExpGen; private LaconicExplanationGenerator laconicExpGen; private OWLOntology ontology; private OWLOntologyManager manager; - public CachedExplanationGenerator(OWLOntology ontology){ + public CachedExplanationGenerator(OWLOntology ontology, Reasoner reasoner){ this.ontology = ontology; this.manager = OWLManager.createOWLOntologyManager(); axiom2Module = new HashMap<OWLAxiom, OWLOntology>(); - regularExplanationCache = new HashMap<OWLAxiom, Set<Set<OWLAxiom>>>(); - laconicExplanationCache = new HashMap<OWLAxiom, Set<Set<OWLAxiom>>>(); + regularExplanationCache = new HashMap<OWLAxiom, Set<Explanation>>(); + laconicExplanationCache = new HashMap<OWLAxiom, Set<Explanation>>(); lastRequestedRegularSize = new HashMap<OWLAxiom, Integer>(); lastRequestedLaconicSize = new HashMap<OWLAxiom, Integer>(); + RepairManager.getRepairManager(reasoner).addListener(this); // regularExpGen = new PelletExplanation(manager, Collections.singleton(ontology)); // laconicExpGen = new LaconicExplanationGenerator(manager, new PelletReasonerFactory(), Collections.singleton(ontology)); @@ -52,20 +59,20 @@ } @Override - public Set<OWLAxiom> getExplanation(OWLAxiom entailment){ + public Explanation getExplanation(OWLAxiom entailment){ return getExplanations(entailment, 1).iterator().next(); } @Override - public Set<Set<OWLAxiom>> getExplanations(OWLAxiom entailment){ + public Set<Explanation> getExplanations(OWLAxiom entailment){ return getExplanations(entailment, -1); } @Override - public Set<Set<OWLAxiom>> getExplanations(OWLAxiom entailment, int limit){ - Set<Set<OWLAxiom>> explanations = new HashSet<Set<OWLAxiom>>(); + public Set<Explanation> getExplanations(OWLAxiom entailment, int limit){ + Set<Explanation> explanations = new HashSet<Explanation>(); try { if(!laconicMode){ @@ -80,9 +87,9 @@ return explanations; } - private Set<Set<OWLAxiom>> computeLaconicExplanations(OWLAxiom entailment, int limit) throws ExplanationException{ + private Set<Explanation> computeLaconicExplanations(OWLAxiom entailment, int limit) throws ExplanationException{ - Set<Set<OWLAxiom>> explanations = laconicExplanationCache.get(entailment); + Set<Explanation> explanations = laconicExplanationCache.get(entailment); Integer lastRequestedSize = lastRequestedLaconicSize.get(entailment); if(lastRequestedSize == null){ lastRequestedSize = Integer.valueOf(0); @@ -105,8 +112,8 @@ return explanations; } - private Set<Set<OWLAxiom>> computeRegularExplanations(OWLAxiom entailment, int limit) throws ExplanationException{ - Set<Set<OWLAxiom>> explanations = regularExplanationCache.get(entailment); + private Set<Explanation> computeRegularExplanations(OWLAxiom entailment, int limit) throws ExplanationException{ + Set<Explanation> explanations = regularExplanationCache.get(entailment); Integer lastRequestedSize = lastRequestedRegularSize.get(entailment); if(lastRequestedSize == null){ lastRequestedSize = Integer.valueOf(0); @@ -117,15 +124,38 @@ module = OntologyUtils.getOntologyFromAxioms(ModularityUtils.extractModule(Collections.singleton(ontology), entailment.getSignature(), ModuleType.TOP_OF_BOT)); } axiom2Module.put(entailment, module); - regularExpGen = new PelletExplanation(manager, Collections.singleton(module)); + regularExpGen = new PelletExplanationGenerator(manager, Collections.singleton(module)); if(limit == -1){ - explanations = regularExpGen.getEntailmentExplanations(entailment); + explanations = regularExpGen.getExplanations(entailment); } else { - explanations = regularExpGen.getEntailmentExplanations(entailment, limit); + explanations = regularExpGen.getExplanations(entailment, limit); } regularExplanationCache.put(entailment, explanations); lastRequestedRegularSize.put(entailment, Integer.valueOf(limit)); } return explanations; } + + @Override + public void repairPlanChanged() { + // TODO Auto-generated method stub + + } + + @Override + public void repairPlanExecuted(List<OWLOntologyChange> changes) { + for(OWLOntologyChange change : changes){ + if(change instanceof RemoveAxiom){System.out.println(changes); + for(Entry<OWLAxiom, Set<Explanation>> entry: regularExplanationCache.entrySet()){ + for(Explanation explanation : entry.getValue()){ + if(explanation.getAxioms().contains(change.getAxiom())){ + entry.getValue().remove(explanation);System.out.println("test"); + } + } + + } + } + } + + } } Added: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/Explanation.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/Explanation.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/Explanation.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -0,0 +1,56 @@ +package org.dllearner.tools.ore.explanation; + +import java.util.Set; +import java.util.TreeSet; + +import org.semanticweb.owl.model.OWLAxiom; + +public class Explanation { + + private Set<OWLAxiom> axioms; + private OWLAxiom entailment; + + + public Explanation(OWLAxiom entailment, Set<OWLAxiom> axioms){ + this.entailment = entailment; + this.axioms = axioms; + } + + public OWLAxiom getEntailment(){ + return entailment; + } + + public Set<OWLAxiom> getAxioms(){ + return axioms; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + if(axioms.isEmpty()) + return "Explanation: <Empty>\n"; + sb.append("Explanation ["); + sb.append(entailment); + sb.append("]\n"); + for(OWLAxiom ax : (new TreeSet<OWLAxiom>(axioms))){ + sb.append("\t"); + sb.append(ax); + sb.append("\n"); + } + + return sb.toString(); + } + + @Override + public boolean equals(Object obj) { + Explanation exp = (Explanation)obj; + return exp.getEntailment().equals(entailment) && exp.getAxioms().equals(axioms); + } + + @Override + public int hashCode() { + return entailment.hashCode() + axioms.hashCode(); + } + + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/ExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/ExplanationGenerator.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/ExplanationGenerator.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -5,8 +5,8 @@ import org.semanticweb.owl.model.OWLAxiom; public interface ExplanationGenerator { - public abstract Set<OWLAxiom> getExplanation(OWLAxiom enatilment); - public abstract Set<Set<OWLAxiom>> getExplanations(OWLAxiom entailment); - public abstract Set<Set<OWLAxiom>> getExplanations(OWLAxiom entailment, int limit); + public abstract Explanation getExplanation(OWLAxiom enatilment); + public abstract Set<Explanation> getExplanations(OWLAxiom entailment); + public abstract Set<Explanation> getExplanations(OWLAxiom entailment, int limit); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LaconicTest.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LaconicTest.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LaconicTest.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -1,6 +1,5 @@ package org.dllearner.tools.ore.explanation; -import java.io.IOException; import java.io.PrintWriter; import java.net.URI; import java.util.Collections; @@ -131,8 +130,8 @@ // .getExplanations(unsatAxiom); // renderer.render(unsatAxiom, preciseJusts); // } - Set<Set<OWLAxiom>> preciseJusts = expGen.getExplanations(unsatAxiom); - renderer.render(unsatAxiom, preciseJusts); + Set<Explanation> preciseJusts = expGen.getExplanations(unsatAxiom); +// renderer.render(unsatAxiom, preciseJusts); renderer.endRendering(); } catch (OWLOntologyCreationException e) { @@ -145,10 +144,7 @@ // TODO Auto-generated catch block e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + } } public static void miniTest(){ @@ -171,8 +167,8 @@ OWLSubClassAxiom unsatAxiom = factory.getOWLSubClassAxiom(c, factory.getOWLNothing()); LaconicExplanationGenerator expGen = new LaconicExplanationGenerator(manager, resonerFact, Collections.singleton(ontology)); - Set<Set<OWLAxiom>> preciseJusts = expGen.getExplanations(unsatAxiom); - renderer.render(unsatAxiom, preciseJusts); + Set<Explanation> preciseJusts = expGen.getExplanations(unsatAxiom); +// renderer.render(unsatAxiom, preciseJusts); renderer.endRendering(); expGen.returnSourceAxioms(preciseJusts); @@ -191,9 +187,6 @@ } catch (OWLException e) { // TODO Auto-generated catch block e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); } } @@ -230,13 +223,13 @@ - Set<Set<OWLAxiom>> regularJusts = expGen.getRegularExplanations(axiom); + Set<Explanation> regularJusts = expGen.getRegularExplanations(axiom); System.out.println("Regular explanations:"); - renderer.render(axiom, regularJusts); +// renderer.render(axiom, regularJusts); - Set<Set<OWLAxiom>> preciseJusts = expGen.getExplanations(axiom); + Set<Explanation> preciseJusts = expGen.getExplanations(axiom); System.out.println("Precise explanations:"); - renderer.render(axiom, preciseJusts); +// renderer.render(axiom, preciseJusts); renderer.endRendering(); @@ -251,9 +244,6 @@ // TODO Auto-generated catch block e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); } } } Added: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/PelletExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/PelletExplanationGenerator.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/PelletExplanationGenerator.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -0,0 +1,129 @@ +package org.dllearner.tools.ore.explanation; + +import java.net.URI; +import java.util.HashSet; +import java.util.Set; + +import org.mindswap.pellet.owlapi.Reasoner; +import org.semanticweb.owl.apibinding.OWLManager; +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLClass; +import org.semanticweb.owl.model.OWLDataFactory; +import org.semanticweb.owl.model.OWLDescription; +import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.OWLOntologyCreationException; +import org.semanticweb.owl.model.OWLOntologyManager; +import org.semanticweb.reasonerfactory.pellet.PelletReasonerFactory; + +import com.clarkparsia.explanation.BlackBoxExplanation; +import com.clarkparsia.explanation.GlassBoxExplanation; +import com.clarkparsia.explanation.HSTExplanationGenerator; +import com.clarkparsia.explanation.SatisfiabilityConverter; +import com.clarkparsia.explanation.TransactionAwareSingleExpGen; + +public class PelletExplanationGenerator implements ExplanationGenerator{ + static { + setup(); + } + + /** + * Very important initialization step that needs to be called once before a + * reasoner is created. This function will be called automatically when + * GlassBoxExplanation is loaded by the class loader. This function simply + * calls the {@link GlassBoxExplanationGenerator#setup()} function. + */ + public static void setup() { + GlassBoxExplanation.setup(); + } + + + private HSTExplanationGenerator expGen; + + private SatisfiabilityConverter converter; + + public PelletExplanationGenerator(OWLOntologyManager manager, Set<OWLOntology> ontologies) { + this( manager, ontologies, null, true ); + } + + public PelletExplanationGenerator(OWLOntologyManager manager, Set<OWLOntology> ontologies, boolean useGlassBox) { + this( manager, ontologies, null, useGlassBox ); + } + + private PelletExplanationGenerator(OWLOntologyManager manager, Set<OWLOntology> ontologies, Reasoner reasoner, boolean useGlassBox) { + + + // If there is no existing reasoner create a new one and load the ontologies + if( reasoner == null ) { + reasoner = new Reasoner( manager ); + reasoner.loadOntologies( ontologies ); + } + + // Create a single explanation generator + TransactionAwareSingleExpGen singleExp = useGlassBox + ? new GlassBoxExplanation( manager ) + : new BlackBoxExplanation( manager ); + + // Create multiple explanation generator + expGen = new HSTExplanationGenerator( singleExp ); + + // Set the necessary fields + expGen.setReasonerFactory( new PelletReasonerFactory() ); + expGen.setReasoner( reasoner ); + expGen.setOntologies( ontologies ); + + // Create the converter that will translate axioms into class expressions + converter = new SatisfiabilityConverter( manager.getOWLDataFactory() ); + setup(); + } + + public PelletExplanationGenerator(Reasoner reasoner) { + this( reasoner.getManager(), reasoner.getLoadedOntologies(), reasoner, true ); + } + + public PelletExplanationGenerator(Reasoner reasoner, boolean useGlassBox) { + this( reasoner.getManager(), reasoner.getLoadedOntologies(), reasoner, useGlassBox ); + } + + @Override + public Explanation getExplanation(OWLAxiom entailment) { + OWLDescription unsatClass = converter.convert( entailment ); + return new Explanation( entailment, expGen.getExplanation( unsatClass )); + } + + @Override + public Set<Explanation> getExplanations(OWLAxiom entailment) { + OWLDescription unsatClass = converter.convert( entailment ); + Set<Explanation> explanations = new HashSet<Explanation>(); + for(Set<OWLAxiom> axioms : expGen.getExplanations( unsatClass )){ + explanations.add(new Explanation(entailment, axioms)); + } + return explanations; + } + + @Override + public Set<Explanation> getExplanations(OWLAxiom entailment, int limit) { + OWLDescription unsatClass = converter.convert( entailment ); + Set<Explanation> explanations = new HashSet<Explanation>(); + for(Set<OWLAxiom> axioms : expGen.getExplanations( unsatClass, limit)){ + explanations.add(new Explanation(entailment, axioms)); + } + return explanations; + } + + public static void main(String[] args) throws OWLOntologyCreationException{ + OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); + OWLDataFactory factory = manager.getOWLDataFactory(); + OWLOntology ontology = manager.loadOntologyFromPhysicalURI(URI.create("file:examples/ore/tambis.owl")); + Reasoner reasoner = new org.mindswap.pellet.owlapi.PelletReasonerFactory().createReasoner(manager); + reasoner.loadOntology(ontology); + PelletExplanationGenerator expGen = new PelletExplanationGenerator(reasoner); + + + + OWLClass unsat = factory.getOWLClass(URI.create("http://krono.act.uji.es/Links/ontologies/tambis.owl#metal")); + OWLAxiom entailment = factory.getOWLSubClassAxiom(unsat, factory.getOWLNothing()); + System.out.println(expGen.getExplanation(entailment)); + } + + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java 2009-08-18 15:32:20 UTC (rev 1828) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -7,7 +7,9 @@ import java.util.Map; import java.util.Set; +import org.dllearner.tools.ore.explanation.Explanation; import org.dllearner.tools.ore.explanation.ExplanationException; +import org.dllearner.tools.ore.explanation.PelletExplanationGenerator; import org.semanticweb.owl.apibinding.OWLManager; import org.semanticweb.owl.inference.OWLReasonerFactory; import org.semanticweb.owl.model.OWLAxiom; @@ -21,16 +23,14 @@ import org.semanticweb.owl.model.OWLOntologyManager; import org.semanticweb.owl.model.OWLSubClassAxiom; -import com.clarkparsia.explanation.PelletExplanation; - public class LaconicExplanationGenerator { - private PelletExplanation pelletExplanation; + private PelletExplanationGenerator pelletExplanation; private OWLOntologyManager manager; private OWLOntology ontology; - private Set<Set<OWLAxiom>> lastRegularJusts; - private Set<Set<OWLAxiom>> allPreviouslyFoundJustifications; + private Set<Explanation> lastRegularExplanations; + private Set<Explanation> allPreviouslyFoundExplanations; private OPlus oPlus; public LaconicExplanationGenerator(OWLOntologyManager manager, @@ -48,8 +48,8 @@ e.printStackTrace(); } - pelletExplanation = new PelletExplanation(manager, ontologies); - lastRegularJusts = new HashSet<Set<OWLAxiom>>(); + pelletExplanation = new PelletExplanationGenerator(manager, ontologies); + lastRegularExplanations = new HashSet<Explanation>(); } /** @@ -70,8 +70,8 @@ } - public Set<Set<OWLAxiom>> getLastRegularJustifications() { - return lastRegularJusts; + public Set<Explanation> getLastRegularJustifications() { + return lastRegularExplanations; } /** @@ -81,39 +81,39 @@ * @return * @throws OWLException */ - public Set<Set<OWLAxiom>> computePreciseJusts(OWLAxiom entailment, int limit) + public Set<Explanation> computePreciseJusts(OWLAxiom entailment, int limit) throws OWLException { - Set<Set<OWLAxiom>> regularJusts = pelletExplanation - .getEntailmentExplanations((OWLAxiom) entailment); + Set<Explanation> regularExplanations = pelletExplanation + .getExplanations((OWLAxiom) entailment); System.out.println(new StringBuilder().append( - "Got regular justifications: ").append(regularJusts.size()) + "Got regular justifications: ").append(regularExplanations.size()) .toString()); - lastRegularJusts.clear(); - lastRegularJusts.addAll(regularJusts); - allPreviouslyFoundJustifications = new HashSet<Set<OWLAxiom>>(); - allPreviouslyFoundJustifications.addAll(regularJusts); - Set<Set<OWLAxiom>> nonLaconicJusts = new HashSet<Set<OWLAxiom>>(); - Set<Set<OWLAxiom>> laconicJusts = new HashSet<Set<OWLAxiom>>(); + lastRegularExplanations.clear(); + lastRegularExplanations.addAll(regularExplanations); + allPreviouslyFoundExplanations = new HashSet<Explanation>(); + allPreviouslyFoundExplanations.addAll(regularExplanations); + Set<Explanation> nonLaconicExplanations = new HashSet<Explanation>(); + Set<Explanation> laconicExplanations = new HashSet<Explanation>(); Set<OWLAxiom> axiomsInPreviousOntology = new HashSet<OWLAxiom>(); long counter = 0L; for (;;) { counter++; System.out.println(new StringBuilder().append("Count ").append( counter).toString()); - Set<OWLAxiom> unionOfAllJustifications = new HashSet<OWLAxiom>(); - for (Set<OWLAxiom> just : allPreviouslyFoundJustifications) { - unionOfAllJustifications.addAll(just); + Set<OWLAxiom> unionOfAllExplanations = new HashSet<OWLAxiom>(); + for (Explanation expl : allPreviouslyFoundExplanations) { + unionOfAllExplanations.addAll(expl.getAxioms()); } // Set<OWLAxiom> lastOPlus = new // HashSet<OWLAxiom>(computeOPlus(unionOfAllJustifications)); - Set<OWLAxiom> oPlus = computeOPlus(unionOfAllJustifications); + Set<OWLAxiom> oPlus = computeOPlus(unionOfAllExplanations); OWLOntologyManager man2 = OWLManager.createOWLOntologyManager(); OWLOntology extendedOntology = man2.createOntology(oPlus); for (OWLLogicalAxiom logAx : ontology.getLogicalAxioms()) { - if (!unionOfAllJustifications.contains(logAx) + if (!unionOfAllExplanations.contains(logAx) || oPlus.contains(logAx)) { man2.addAxiom(extendedOntology, logAx); } @@ -130,65 +130,67 @@ axiomsInPreviousOntology.clear(); axiomsInPreviousOntology .addAll(extendedOntology.getLogicalAxioms()); - Set<Set<OWLAxiom>> allPrevJustsCopy = new HashSet<Set<OWLAxiom>>( - allPreviouslyFoundJustifications); + Set<Explanation> allPrevJustsCopy = new HashSet<Explanation>( + allPreviouslyFoundExplanations); Set<OWLOntology> ont2 = new HashSet<OWLOntology>(); ont2.add(extendedOntology); - PelletExplanation expGen = new PelletExplanation(man2, ont2); - Set<Set<OWLAxiom>> currentJustifications = expGen - .getEntailmentExplanations((OWLAxiom) entailment); + PelletExplanationGenerator expGen = new PelletExplanationGenerator(man2, ont2); + Set<Explanation> currentExplanations = expGen + .getExplanations((OWLAxiom) entailment); - allPreviouslyFoundJustifications.addAll(currentJustifications); - if (allPreviouslyFoundJustifications.equals(allPrevJustsCopy)) { + allPreviouslyFoundExplanations.addAll(currentExplanations); + if (allPreviouslyFoundExplanations.equals(allPrevJustsCopy)) { break; } - for (Set<OWLAxiom> currentJust : currentJustifications) { - if (!laconicJusts.contains(currentJust) - && !nonLaconicJusts.contains(currentJust)) { - if (isLaconic(currentJust, entailment)) { - laconicJusts.add(currentJust); + for (Explanation currentExplanation : currentExplanations) { + if (!laconicExplanations.contains(currentExplanation) + && !nonLaconicExplanations.contains(currentExplanation)) { + if (isLaconic(currentExplanation)) { + laconicExplanations.add(currentExplanation); } else { - nonLaconicJusts.add(currentJust); + nonLaconicExplanations.add(currentExplanation); } - if (laconicJusts.size() == limit) { - return retrieveAxioms(laconicJusts); + if (laconicExplanations.size() == limit) { + return laconicExplanations;//retrieveAxioms(laconicJusts); } } } } - Set<Set<OWLAxiom>> laconicJustifications = new HashSet<Set<OWLAxiom>>(); - for (Set<OWLAxiom> just : allPreviouslyFoundJustifications) { - if (!nonLaconicJusts.contains(just)) { - if (laconicJusts.contains(just)) { - laconicJustifications.add(just); - } else if (isLaconic(just, entailment)) { - laconicJustifications.add(just); + Set<Explanation> explanations = new HashSet<Explanation>(); + for (Explanation explanation : allPreviouslyFoundExplanations) { + if (!nonLaconicExplanations.contains(explanation)) { + if (laconicExplanations.contains(explanation)) { + explanations.add(explanation); + } else if (isLaconic(explanation)) { + explanations.add(explanation); } } } - return retrieveAxioms(laconicJustifications); + return retrieveAxioms(explanations); } - public boolean isLaconic(Set<OWLAxiom> justification, OWLAxiom entailment) + public boolean isLaconic(Explanation explanation) throws ExplanationException { boolean laconic; try { OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); - Set<OWLAxiom> justificationSigmaClosure = computeOPlus(justification); + Set<OWLAxiom> justificationSigmaClosure = computeOPlus(explanation.getAxioms()); OWLOntology justificationSigmaClosureOnt = manager .createOntology(justificationSigmaClosure); - PelletExplanation expGen2 = new PelletExplanation(manager, + PelletExplanationGenerator expGen2 = new PelletExplanationGenerator(manager, Collections.singleton(justificationSigmaClosureOnt)); - Set<Set<OWLAxiom>> exps = expGen2.getEntailmentExplanations( - entailment, Integer.MAX_VALUE); +// Set<Set<OWLAxiom>> exps = expGen2.getEntailmentExplanations( +// entailment, 2); + Explanation expl = expGen2.getExplanation(explanation.getEntailment()); - laconic = Collections.singleton(justification).equals(exps); +// laconic = Collections.singleton(justification).equals(exps); + laconic = explanation.equals(expl); } catch (OWLOntologyCreationException e) { throw new ExplanationException(e); @@ -198,23 +200,23 @@ return laconic; } - private Set<Set<OWLAxiom>> retrieveAxioms(Set<Set<OWLAxiom>> explanations) { + private Set<Explanation> retrieveAxioms(Set<Explanation> explanations) { Map<OWLAxiom, Set<OWLAxiom>> sourceAxioms2OPlus = new HashMap<OWLAxiom, Set<OWLAxiom>>(); - for (Set<OWLAxiom> just : allPreviouslyFoundJustifications) { - for (OWLAxiom ax : just) { + for (Explanation explanation : allPreviouslyFoundExplanations) { + for (OWLAxiom ax : explanation.getAxioms()) { if (ontology.containsAxiom(ax)) { sourceAxioms2OPlus.put(ax, computeOPlus(Collections.singleton(ax))); } } } - Set<Set<OWLAxiom>> reconstituedExplanations = new HashSet<Set<OWLAxiom>>(); + Set<Explanation> reconstituedExplanations = new HashSet<Explanation>(); - for (Set<OWLAxiom> expl : explanations) { + for (Explanation explanation : explanations) { Map<OWLClass, Map<OWLAxiom, Set<OWLSubClassAxiom>>> lhs2SubClassAxiom = new HashMap<OWLClass, Map<OWLAxiom, Set<OWLSubClassAxiom>>>(); Set<OWLAxiom> reconstituedAxioms = new HashSet<OWLAxiom>(); - for (OWLAxiom laconicAx : expl) { + for (OWLAxiom laconicAx : explanation.getAxioms()) { if (laconicAx instanceof OWLSubClassAxiom) { OWLSubClassAxiom subAx = (OWLSubClassAxiom) laconicAx; if (subAx.getSubClass().isAnonymous()) { @@ -262,7 +264,7 @@ } } - reconstituedExplanations.add(reconstituedAxioms); + reconstituedExplanations.add(new Explanation(explanation.getEntailment(), reconstituedAxioms)); } @@ -271,39 +273,39 @@ - public Set<Set<OWLAxiom>> getExplanations(OWLAxiom entailment) throws ExplanationException { - Set<Set<OWLAxiom>> set; + public Set<Explanation> getExplanations(OWLAxiom entailment) throws ExplanationException { + Set<Explanation> explanations; try { - set = computePreciseJusts(entailment, 2147483647); + explanations = computePreciseJusts(entailment, 2147483647); } catch (OWLException e) { throw new ExplanationException(e); } - return set; + return explanations; } - public Set<Set<OWLAxiom>> getExplanations(OWLAxiom entailment, int limit) + public Set<Explanation> getExplanations(OWLAxiom entailment, int limit) throws ExplanationException { - Set<Set<OWLAxiom>> set; + Set<Explanation> explanations; try { - set = computePreciseJusts(entailment, limit); + explanations = computePreciseJusts(entailment, limit); } catch (OWLException e) { throw new ExplanationException(e); } - return set; + return explanations; } - public Set<Set<OWLAxiom>> getRegularExplanations(OWLAxiom entailment) throws ExplanationException { - Set<Set<OWLAxiom>> regularJusts; - regularJusts = pelletExplanation.getEntailmentExplanations((OWLAxiom)entailment); - lastRegularJusts.addAll(regularJusts); + public Set<Explanation> getRegularExplanations(OWLAxiom entailment) throws ExplanationException { + Set<Explanation> regularJusts; + regularJusts = pelletExplanation.getExplanations((OWLAxiom)entailment); + lastRegularExplanations.addAll(regularJusts); return regularJusts; } - public void returnSourceAxioms(Set<Set<OWLAxiom>> explanations){ + public void returnSourceAxioms(Set<Explanation> explanations){ Map<OWLAxiom, Set<OWLAxiom>> sourceMap = oPlus.getAxiomsMap(); System.out.println(sourceMap); - for(Set<OWLAxiom> explanation: explanations){ - for(OWLAxiom ax : explanation){ + for(Explanation explanation: explanations){ + for(OWLAxiom ax : explanation.getAxioms()){ System.out.println(ax + " gehört zu " + sourceMap.get(ax)); } Added: trunk/src/dl-learner/org/dllearner/tools/ore/recent.txt =================================================================== (Binary files differ) Property changes on: trunk/src/dl-learner/org/dllearner/tools/ore/recent.txt ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/src/dl-learner/org/dllearner/tools/ore/toggled.gif =================================================================== (Binary files differ) Property changes on: trunk/src/dl-learner/org/dllearner/tools/ore/toggled.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ClassesTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ClassesTable.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ClassesTable.java 2009-08-24 09:19:17 UTC (rev 1829) @@ -0,0 +1,42 @@ +package org.dllearner.tools.ore.ui; + +import java.awt.Color; +import java.util.Set; + +import javax.swing.ListSelectionModel; + +import org.dllearner.core.owl.NamedClass; +import org.jdesktop.swingx.JXTable; +import org.jdesktop.swingx.decorator.HighlighterFactory; + +public class ClassesTable ext... [truncated message content] |
From: <lor...@us...> - 2009-09-02 10:19:52
|
Revision: 1834 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1834&view=rev Author: lorenz_b Date: 2009-09-02 10:19:41 +0000 (Wed, 02 Sep 2009) Log Message: ----------- added explanation intended view added update method to pellet reasoner, updating the CWA data Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/relevance/SyntacticRelevanceBasedExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/IndividualsTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairDialog.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/InconsistencyExplanationPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/RepairPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/InconsistencyExplanationPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LearningPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/RepairPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/relevance/RelevanceBasedGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/relevance/SimpleSelectionFunction.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ChangesTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ChangesTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTablePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairPlanPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatsPanel.java Removed Paths: ------------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ChangePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ChangesPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/DescriptionPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ExplanationTablePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/RepairPlanPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/StatsPanel.java Modified: trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java =================================================================== --- trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java 2009-09-01 13:44:00 UTC (rev 1833) +++ trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java 2009-09-02 10:19:41 UTC (rev 1834) @@ -59,7 +59,6 @@ import org.dllearner.kb.OWLAPIOntology; import org.dllearner.kb.OWLFile; import org.dllearner.kb.sparql.SparqlKnowledgeSource; -import org.dllearner.tools.ore.explanation.PelletExplanationGenerator; import org.dllearner.utilities.Helper; import org.dllearner.utilities.owl.ConceptComparator; import org.dllearner.utilities.owl.ConceptTransformation; @@ -72,10 +71,12 @@ import org.mindswap.pellet.utils.SetUtils; import org.mindswap.pellet.utils.progress.ProgressMonitor; import org.semanticweb.owl.apibinding.OWLManager; +import org.semanticweb.owl.inference.OWLReasonerException; import org.semanticweb.owl.model.AddAxiom; import org.semanticweb.owl.model.OWLAnnotation; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; +import org.semanticweb.owl.model.OWLClassAssertionAxiom; import org.semanticweb.owl.model.OWLConstant; import org.semanticweb.owl.model.OWLDataFactory; import org.semanticweb.owl.model.OWLDataProperty; @@ -87,7 +88,9 @@ import org.semanticweb.owl.model.OWLLabelAnnotation; import org.semanticweb.owl.model.OWLNamedObject; import org.semanticweb.owl.model.OWLObjectProperty; +import org.semanticweb.owl.model.OWLObjectPropertyAssertionAxiom; import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.OWLOntologyChange; import org.semanticweb.owl.model.OWLOntologyChangeException; import org.semanticweb.owl.model.OWLOntologyCreationException; import org.semanticweb.owl.model.OWLOntologyFormat; @@ -286,6 +289,46 @@ dematerialise(); } + /* + * Updates the CWA ontology dematerialised before + */ + public void updateCWAOntology(List<OWLOntologyChange> changes){ + for(OWLOntologyChange change : changes){ + OWLAxiom axiom = change.getAxiom(); + if(axiom instanceof OWLClassAssertionAxiom){ + Individual ind = OWLAPIConverter.convertIndividual(((OWLClassAssertionAxiom)axiom).getIndividual()); + Description desc = OWLAPIConverter.convertClass(((OWLClassAssertionAxiom)axiom).getDescription().asOWLClass()); + if(change instanceof RemoveAxiom){ + classInstancesPos.get(desc).remove(ind); + } else if(change instanceof AddAxiom){ + classInstancesPos.get(desc).add(ind); + } + } else if(axiom instanceof OWLObjectPropertyAssertionAxiom){System.out.println(axiom); + Individual obj = OWLAPIConverter.convertIndividual(((OWLObjectPropertyAssertionAxiom)axiom).getObject()); + Individual sub = OWLAPIConverter.convertIndividual(((OWLObjectPropertyAssertionAxiom)axiom).getSubject()); + ObjectProperty prop = OWLAPIConverter.convertObjectProperty(((OWLObjectPropertyAssertionAxiom)axiom).getProperty().asOWLObjectProperty()); + if(change instanceof RemoveAxiom){ + SortedSet<Individual> fillers = opPos.get(prop).get(sub); + if(fillers != null){ + fillers.remove(obj); + } + } else if(change instanceof AddAxiom){ + SortedSet<Individual> fillers = opPos.get(prop).get(sub); + if(fillers == null){ + fillers = new TreeSet<Individual>(); + fillers.add(obj); + opPos.get(prop).put(sub, fillers); + } else { + fillers.add(obj); + } + } + + + } + } + + } + private void dematerialise(){ long dematStartTime = System.currentTimeMillis(); @@ -409,6 +452,15 @@ reasoner.classify(); } + public void realise(){ + try { + reasoner.realise(); + } catch (OWLReasonerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + public void refresh(){ reasoner.refresh(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-09-01 13:44:00 UTC (rev 1833) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-09-02 10:19:41 UTC (rev 1834) @@ -1,14 +1,14 @@ package org.dllearner.tools.ore; import java.util.ArrayList; -import java.util.HashSet; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import org.dllearner.tools.ore.explanation.CachedExplanationGenerator; import org.dllearner.tools.ore.explanation.Explanation; import org.dllearner.tools.ore.explanation.RootFinder; -import org.mindswap.pellet.owlapi.PelletReasonerFactory; import org.mindswap.pellet.owlapi.Reasoner; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; @@ -36,11 +36,14 @@ private RootFinder rootFinder; private boolean ontologyChanged = true; - private boolean isLaconicMode = false; + private boolean isComputeAllExplanations = false; private int maxExplantionCount = 1; private boolean allExplanationWarningChecked = false; + private Map<Explanation, List<Map<OWLAxiom, Integer>>> orderingMap; + private DefaultExplanationOrderer explanationOrderer; + private List<ExplanationManagerListener> listeners; @@ -55,10 +58,11 @@ this.ontology = reasoner.getLoadedOntologies().iterator().next(); manager.addOntologyChangeListener(this); -// manager.addOntologyChangeListener(reasoner); dataFactory = manager.getOWLDataFactory(); RepairManager.getRepairManager(oreMan).addListener(this); - + + explanationOrderer = new DefaultExplanationOrderer(); + orderingMap = new HashMap<Explanation, List<Map<OWLAxiom, Integer>>>(); rootFinder = new RootFinder(); @@ -95,7 +99,7 @@ return rootFinder.getRootClasses(); } - public Set<List<OWLAxiom>> getUnsatisfiableExplanations(OWLClass unsat) { + public Set<Explanation> getUnsatisfiableExplanations(OWLClass unsat) { OWLSubClassAxiom entailment = dataFactory.getOWLSubClassAxiom(unsat, dataFactory.getOWLNothing()); @@ -107,10 +111,10 @@ explanations = gen.getExplanations(entailment, maxExplantionCount); } - return getOrderedExplanations(explanations); + return explanations; } - public Set<List<OWLAxiom>> getInconsistencyExplanations(){ + public Set<Explanation> getInconsistencyExplanations(){ OWLSubClassAxiom entailment = dataFactory.getOWLSubClassAxiom(dataFactory.getOWLThing(), dataFactory.getOWLNothing()); @@ -121,43 +125,44 @@ explanations = gen.getExplanations(entailment, maxExplantionCount); } - return getOrderedExplanations(explanations); + return explanations; } + public List<Map<OWLAxiom, Integer>> getOrdering(Explanation exp){ + List<Map<OWLAxiom, Integer>> orderedAxioms = orderingMap.get(exp); + if(orderedAxioms == null){ + orderedAxioms = new ArrayList<Map<OWLAxiom, Integer>>(exp.getAxioms().size()); + orderedAxioms.addAll(orderExplanation(exp)); + orderingMap.put(exp, orderedAxioms); + } + return orderedAxioms; + } - - private ArrayList<OWLAxiom> getTree2List(Tree<OWLAxiom> tree){ - ArrayList<OWLAxiom> ordering = new ArrayList<OWLAxiom>(); - ordering.add((OWLAxiom)tree.getUserObject()); + private List<Map<OWLAxiom, Integer>> orderExplanation(Explanation exp){ + explanationOrderer = new DefaultExplanationOrderer(); + List<Map<OWLAxiom, Integer>> ordering = new ArrayList<Map<OWLAxiom, Integer>>(exp.getAxioms().size()); + ExplanationTree tree = explanationOrderer.getOrderedExplanation(exp.getEntailment(), exp.getAxioms()); for(Tree<OWLAxiom> child : tree.getChildren()){ ordering.addAll(getTree2List(child)); } return ordering; } - private Set<List<OWLAxiom>> getOrderedExplanations(Set<Explanation> explanations){ - DefaultExplanationOrderer orderer = new DefaultExplanationOrderer(); - Set<List<OWLAxiom>> orderedExplanations = new HashSet<List<OWLAxiom>>(); - ArrayList<OWLAxiom> ordering; - for(Explanation explanation : explanations){ - ordering = new ArrayList<OWLAxiom>(); - ExplanationTree tree = orderer.getOrderedExplanation(explanation.getEntailment(), explanation.getAxioms()); - -// ordering.add(tree.getUserObject()); - for(Tree<OWLAxiom> child : tree.getChildren()){ - ordering.addAll(getTree2List(child)); - } - orderedExplanations.add(ordering); + + + private ArrayList<Map<OWLAxiom, Integer>> getTree2List(Tree<OWLAxiom> tree){ + ArrayList<Map<OWLAxiom, Integer>> ordering = new ArrayList<Map<OWLAxiom, Integer>>(); + Map<OWLAxiom, Integer> axiom2Depth = new HashMap<OWLAxiom, Integer>(); + axiom2Depth.put((OWLAxiom)tree.getUserObject(), Integer.valueOf(tree.getUserObjectPathToRoot().size())); + ordering.add(axiom2Depth); + for(Tree<OWLAxiom> child : tree.getChildren()){ + ordering.addAll(getTree2List(child)); } - return orderedExplanations; + return ordering; } - @Override - public void ontologiesChanged(List<? extends OWLOntologyChange> changes) - throws OWLException { - ontologyChanged = true; - } + public int getArity(OWLClass cl, OWLAxiom ax) { int arity = 0; @@ -249,6 +254,12 @@ public Set<OWLAxiom> getRemainingAxioms(OWLAxiom source, OWLAxiom part){ return gen.getRemainingAxioms(source, part); } + + @Override + public void ontologiesChanged(List<? extends OWLOntologyChange> changes) + throws OWLException { + ontologyChanged = true; + } @Override public void activeOntologyChanged() { @@ -257,5 +268,4 @@ gen = new CachedExplanationGenerator(ontology, reasoner); } - } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2009-09-01 13:44:00 UTC (rev 1833) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2009-09-02 10:19:41 UTC (rev 1834) @@ -31,11 +31,13 @@ import org.dllearner.tools.ore.ui.wizard.Wizard; import org.dllearner.tools.ore.ui.wizard.WizardPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.ClassChoosePanelDescriptor; +import org.dllearner.tools.ore.ui.wizard.descriptors.InconsistencyExplanationPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.IntroductionPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.KnowledgeSourcePanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.LearningPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.RepairPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.SavePanelDescriptor; +import org.dllearner.tools.ore.ui.wizard.descriptors.UnsatisfiableExplanationPanelDescriptor; /** @@ -77,18 +79,24 @@ WizardPanelDescriptor descriptor2 = new KnowledgeSourcePanelDescriptor(); wizard.registerWizardPanel(KnowledgeSourcePanelDescriptor.IDENTIFIER, descriptor2); + +// WizardPanelDescriptor descriptor3 = new InconsistencyExplanationPanelDescriptor(); +// wizard.registerWizardPanel(InconsistencyExplanationPanelDescriptor.IDENTIFIER, descriptor3); +// +// WizardPanelDescriptor descriptor4 = new UnsatisfiableExplanationPanelDescriptor(); +// wizard.registerWizardPanel(UnsatisfiableExplanationPanelDescriptor.IDENTIFIER, descriptor4); - WizardPanelDescriptor descriptor3 = new ClassChoosePanelDescriptor(); - wizard.registerWizardPanel(ClassChoosePanelDescriptor.IDENTIFIER, descriptor3); + WizardPanelDescriptor descriptor5 = new ClassChoosePanelDescriptor(); + wizard.registerWizardPanel(ClassChoosePanelDescriptor.IDENTIFIER, descriptor5); - WizardPanelDescriptor descriptor4 = new LearningPanelDescriptor(); - wizard.registerWizardPanel(LearningPanelDescriptor.IDENTIFIER, descriptor4); + WizardPanelDescriptor descriptor6 = new LearningPanelDescriptor(); + wizard.registerWizardPanel(LearningPanelDescriptor.IDENTIFIER, descriptor6); - WizardPanelDescriptor descriptor5 = new RepairPanelDescriptor(); - wizard.registerWizardPanel(RepairPanelDescriptor.IDENTIFIER, descriptor5); + WizardPanelDescriptor descriptor7 = new RepairPanelDescriptor(); + wizard.registerWizardPanel(RepairPanelDescriptor.IDENTIFIER, descriptor7); - WizardPanelDescriptor descriptor6 = new SavePanelDescriptor(); - wizard.registerWizardPanel(SavePanelDescriptor.IDENTIFIER, descriptor6); + WizardPanelDescriptor descriptor8 = new SavePanelDescriptor(); + wizard.registerWizardPanel(SavePanelDescriptor.IDENTIFIER, descriptor8); if (!(args.length == 1)){ wizard.setCurrentPanel(IntroductionPanelDescriptor.IDENTIFIER); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java 2009-09-01 13:44:00 UTC (rev 1833) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java 2009-09-02 10:19:41 UTC (rev 1834) @@ -21,6 +21,7 @@ package org.dllearner.tools.ore; import java.net.URI; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashSet; @@ -35,15 +36,8 @@ import org.dllearner.core.owl.ObjectProperty; import org.dllearner.core.owl.ObjectPropertyAssertion; import org.dllearner.core.owl.ObjectQuantorRestriction; -import org.dllearner.reasoning.OWLAPIReasoner; import org.dllearner.reasoning.PelletReasoner; import org.dllearner.utilities.owl.OWLAPIDescriptionConvertVisitor; -import org.mindswap.pellet.owlapi.Reasoner; -import org.semanticweb.owl.apibinding.OWLManager; -import org.semanticweb.owl.debugging.BlackBoxOWLDebugger; -import org.semanticweb.owl.debugging.OWLDebugger; -import org.semanticweb.owl.inference.OWLReasonerException; -import org.semanticweb.owl.inference.OWLSatisfiabilityChecker; import org.semanticweb.owl.io.RDFXMLOntologyFormat; import org.semanticweb.owl.model.AddAxiom; import org.semanticweb.owl.model.OWLAxiom; @@ -52,7 +46,6 @@ import org.semanticweb.owl.model.OWLDataFactory; import org.semanticweb.owl.model.OWLDescription; import org.semanticweb.owl.model.OWLEquivalentClassesAxiom; -import org.semanticweb.owl.model.OWLException; import org.semanticweb.owl.model.OWLIndividual; import org.semanticweb.owl.model.OWLInverseObjectPropertiesAxiom; import org.semanticweb.owl.model.OWLObjectProperty; @@ -226,6 +219,7 @@ RemoveAxiom rm = new RemoveAxiom(ontology, owlCl); changes.add(rm); try { + reasoner.updateCWAOntology(changes); manager.applyChange(rm); return changes; } catch (OWLOntologyChangeException e) { @@ -254,10 +248,9 @@ OWLClassAssertionAxiom owlCl = factory.getOWLClassAssertionAxiom(individualOWLAPI, owlDesc); AddAxiom am = new AddAxiom(ontology, owlCl); - - changes.add(am); try { + reasoner.updateCWAOntology(changes); manager.applyChange(am); return changes; } catch (OWLOntologyChangeException e) { @@ -299,9 +292,8 @@ try { + reasoner.updateCWAOntology(changes); manager.applyChanges(changes); - saveOntology(); - return changes; } catch (OWLOntologyChangeException e) { // TODO Auto-generated catch block @@ -358,7 +350,8 @@ changes.addAll(removeList); try { - manager.applyChanges(removeList); + reasoner.updateCWAOntology(changes); + manager.applyChanges(changes); return changes; } catch (OWLOntologyChangeException e) { // TODO Auto-generated catch block @@ -400,6 +393,7 @@ try { if(remove != null){ + reasoner.updateCWAOntology(changes); manager.applyChange(remove); } @@ -432,6 +426,7 @@ AddAxiom axiom = new AddAxiom(ontology, objAssertion); changes.add(axiom); try { + reasoner.updateCWAOntology(changes); manager.applyChange(axiom); return changes; } catch (OWLOntologyChangeException e) { @@ -450,25 +445,25 @@ */ public void undoChanges(Collection<OWLOntologyChange> changes){ - + List<OWLOntologyChange> undoChanges = new ArrayList<OWLOntologyChange>(changes.size()); for(OWLOntologyChange change : changes){ if(change instanceof RemoveAxiom){ AddAxiom add = new AddAxiom(ontology, change.getAxiom()); - try { - manager.applyChange(add); - } catch (OWLOntologyChangeException e) { - e.printStackTrace(); - } + undoChanges.add(add); } else if(change instanceof AddAxiom){ RemoveAxiom remove = new RemoveAxiom(ontology, change.getAxiom()); - try { - manager.applyChange(remove); - } catch (OWLOntologyChangeException e) { - e.printStackTrace(); - } + undoChanges.add(remove); } } + try { + reasoner.updateCWAOntology(undoChanges); + manager.applyChanges(undoChanges); + } catch (OWLOntologyChangeException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } @@ -575,50 +570,5 @@ public OWLOntology getOntology() { return ontology; } - -/** - * Prints reasons for inconsistent classes. - */ - public void reason(){ -// reasoner.getInconsistencyReasons(ontology); - - - - /* Create a satisfiability checker */ - OWLSatisfiabilityChecker checker = new Reasoner(manager); - try { - checker.loadOntologies(Collections.singleton(ontology)); - } catch (OWLReasonerException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - OWLDebugger debugger = new BlackBoxOWLDebugger(manager, ontology, checker); - - for(OWLClass owlClass : reasoner.getInconsistentOWLClasses()){ - /* Find the sets of support and print them */ - Set<Set<OWLAxiom>> allsos = null; - try { - allsos = debugger.getAllSOSForIncosistentClass(owlClass); - } catch (OWLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - for (Set<OWLAxiom> sos : allsos){ - System.out.println(sos); - } - } - - - - } - - - - - - - - } Added: trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java 2009-09-02 10:19:41 UTC (rev 1834) @@ -0,0 +1,53 @@ +package org.dllearner.tools.ore; + +import javax.swing.JDialog; +import javax.swing.SwingWorker; + +import org.dllearner.tools.ore.ui.StatusBar; + +public class TaskManager { + + private static TaskManager instance; + + private SwingWorker<?, ?> currentTask; + + private Thread currentThread; + + private StatusBar statusBar; + + private JDialog dialog; + + public static synchronized TaskManager getInstance(){ + if(instance == null){ + instance = new TaskManager(); + } + return instance; + } + + public void setStatusBar(StatusBar statusBar){ + this.statusBar = statusBar; + } + + public void setDialog(JDialog dialog){ + this.dialog = dialog; + } + + public void setCurrentTask(SwingWorker<?, ?> task){ + this.currentTask = task; + } + + public void setCurrentThread(Thread t){ + this.currentThread = t; + } + + public void cancelCurrentTask(){ + if(currentTask != null && !currentTask.isCancelled() && !currentTask.isDone()){ + currentTask.cancel(true); + } +// statusBar.setProgressTitle("Canceled"); +// dialog.setCursor(null); + } + + public synchronized void cancelCurrentThread(){currentThread.stop(); + } +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java 2009-09-01 13:44:00 UTC (rev 1833) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java 2009-09-02 10:19:41 UTC (rev 1834) @@ -51,6 +51,7 @@ this.factory = manager.getOWLDataFactory(); ModuleExtractor extractor = ModuleExtractorFactory.createModuleExtractor(); classifier = new IncrementalClassifier(manager, reasoner, extractor); + } public Set<OWLAxiom> computeImpactOnRemoval(OWLAxiom ax){ @@ -58,8 +59,8 @@ try { // IncrementalClassifier classifier = new IncrementalClassifier(manager); -// classifier.loadOntology(ontology); -// classifier.classify(); + classifier.loadOntology(ontology); + classifier.classify(); Set<OWLClass> inc = classifier.getInconsistentClasses(); for(OWLDescription cl : ontology.getClassesInSignature()){ if(!inc.contains(cl)){ @@ -79,8 +80,9 @@ manager.applyChange(new RemoveAxiom(ontology, ax)); + classifier.classify(); - inc = classifier.getInconsistentClasses(); + inc = classifier.getInconsistentClasses();System.out.println(inc); for(OWLDescription cl : ontology.getClassesInSignature()){ if(!inc.contains(cl)){ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2009-09-01 13:44:00 UTC (rev 1833) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2009-09-02 10:19:41 UTC (rev 1834) @@ -149,29 +149,35 @@ @Override public void repairPlanExecuted(List<OWLOntologyChange> changes) { - Map<OWLAxiom, Set<Explanation>> copy = new HashMap<OWLAxiom, Set<Explanation>>(); - for(OWLOntologyChange change : changes){ - if(change instanceof RemoveAxiom){ - for(Entry<OWLAxiom, Set<Explanation>> entry: regularExplanationCache.entrySet()){ - Set<Explanation> explanationsCopy = new HashSet<Explanation>(); - for(Explanation explanation : entry.getValue()){ - if(explanation.getAxioms().contains(change.getAxiom())){ - explanationsCopy.add(explanation); - } - } - if(!explanationsCopy.isEmpty()){ - copy.put(entry.getKey(), explanationsCopy); - } - - - } - } - } - for(Entry<OWLAxiom, Set<Explanation>> copyEntry : copy.entrySet()){ - regularExplanationCache.get(copyEntry.getKey()).removeAll(copyEntry.getValue()); - - } +// Map<OWLAxiom, Set<Explanation>> copy = new HashMap<OWLAxiom, Set<Explanation>>(); +// for(OWLOntologyChange change : changes){ +// if(change instanceof RemoveAxiom){ +// for(Entry<OWLAxiom, Set<Explanation>> entry: regularExplanationCache.entrySet()){ +// Set<Explanation> explanationsCopy = new HashSet<Explanation>(); +// for(Explanation explanation : entry.getValue()){ +// if(explanation.getAxioms().contains(change.getAxiom())){ +// explanationsCopy.add(explanation); +// } +// } +// if(!explanationsCopy.isEmpty()){ +// copy.put(entry.getKey(), explanationsCopy); +// } +// +// +// } +// } +// } +// for(Entry<OWLAxiom, Set<Explanation>> copyEntry : copy.entrySet()){ +// regularExplanationCache.get(copyEntry.getKey()).removeAll(copyEntry.getValue()); +// +// } + regularExplanationCache.clear(); + laconicExplanationCache.clear(); + axiom2Module.clear(); + lastRequestedRegularSize.clear(); + lastRequestedLaconicSize.clear(); + } public Set<OWLAxiom> getSourceAxioms(OWLAxiom ax){ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java 2009-09-01 13:44:00 UTC (rev 1833) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java 2009-09-02 10:19:41 UTC (rev 1834) @@ -16,6 +16,7 @@ import org.semanticweb.owl.inference.OWLReasoner; import org.semanticweb.owl.inference.OWLReasonerException; import org.semanticweb.owl.inference.OWLReasonerFactory; +import org.semanticweb.owl.model.AddAxiom; import org.semanticweb.owl.model.AxiomType; import org.semanticweb.owl.model.OWLClass; import org.semanticweb.owl.model.OWLDataAllRestriction; @@ -122,6 +123,11 @@ public void computeRootDerivedClasses(){ rootClasses.clear(); derivedClasses.clear(); + depend2Classes.clear(); + depth2ExistsRestrictionPropertyMap.clear(); + depth2UniversalRestrictionPropertyMap.clear(); + child2Parents.clear(); + parent2Children.clear(); computePossibleRoots(); pruneRoots(); derivedClasses.removeAll(rootClasses); @@ -181,8 +187,10 @@ } } for (OWLClass cls : roots) { - manager.addAxiom(ontology, manager.getOWLDataFactory() + OWLOntologyChange add = new AddAxiom(ontology, manager.getOWLDataFactory() .getOWLDeclarationAxiom(cls)); + manager.applyChange(add); + appliedChanges.add(add); } OWLReasoner checker = reasonerFactory.createReasoner(manager); checker.loadOntologies(Collections.singleton(ontology)); @@ -191,6 +199,13 @@ rootClasses.remove(root); } } + for(OWLOntologyChange change: appliedChanges){ + if(change instanceof RemoveAxiom){ + manager.applyChange(new AddAxiom(ontology, change.getAxiom())); + } else if(change instanceof AddAxiom){ + manager.applyChange(new RemoveAxiom(ontology, change.getAxiom())); + } + } } catch (OWLOntologyChangeException e) { e.printStackTrace(); } catch (OWLReasonerException e) { Added: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/relevance/RelevanceBasedGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/relevance/RelevanceBasedGenerator.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/relevance/RelevanceBasedGenerator.java 2009-09-02 10:19:41 UTC (rev 1834) @@ -0,0 +1,400 @@ +package org.dllearner.tools.ore.explanation.relevance; + +import java.net.URI; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.mindswap.pellet.owlapi.PelletReasonerFactory; +import org.mindswap.pellet.owlapi.Reasoner; +import org.mindswap.pellet.utils.SetUtils; +import org.mindswap.pellet.utils.Timer; +import org.semanticweb.owl.apibinding.OWLManager; +import org.semanticweb.owl.inference.OWLReasonerException; +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLClass; +import org.semanticweb.owl.model.OWLDataFactory; +import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.OWLOntologyChangeException; +import org.semanticweb.owl.model.OWLOntologyCreationException; +import org.semanticweb.owl.model.OWLOntologyManager; + +import com.clarkparsia.explanation.GlassBoxExplanation; +import com.clarkparsia.explanation.PelletExplanation; +import com.clarkparsia.explanation.TransactionAwareSingleExpGen; +import com.clarkparsia.explanation.util.OntologyUtils; + +public class RelevanceBasedGenerator { + static{ + setup(); + } + + public static void setup() { + GlassBoxExplanation.setup(); + } + + public static final Logger log = Logger.getLogger(RelevanceBasedGenerator.class); + + + private Reasoner globalReasoner; + private OWLOntology ontology; + private OWLOntologyManager manager; + private Reasoner localReasoner; + + private TransactionAwareSingleExpGen singleExpGen; + private PelletReasonerFactory reasonerFactory; + + private Set<Set<OWLAxiom>> allJusts; + private Set<HittingSet> hittingSets; + + private SimpleSelectionFunction selector; + + private PelletExplanation pellet; + + + Map<OWLAxiom, Integer> axiomMap; + + public RelevanceBasedGenerator(OWLOntologyManager manager, + OWLOntology ontology, Reasoner reasoner) { + log.setLevel(Level.DEBUG); + + this.globalReasoner = reasoner; + this.manager = manager; + this.ontology = ontology;//getExampleOntology(); + + reasonerFactory = new PelletReasonerFactory(); + + allJusts = new HashSet<Set<OWLAxiom>>(); + hittingSets = new HashSet<HittingSet>(); + + selector = new SimpleSelectionFunction(); + selector.init(ontology); + } + + private OWLOntology getExampleOntology(){ + try { + OWLDataFactory factory = manager.getOWLDataFactory(); + OWLClass u = factory.getOWLClass(URI.create("U")); + OWLClass a = factory.getOWLClass(URI.create("A")); + OWLClass b = factory.getOWLClass(URI.create("B")); + OWLClass c = factory.getOWLClass(URI.create("C")); + OWLClass d = factory.getOWLClass(URI.create("D")); + OWLClass e = factory.getOWLClass(URI.create("E")); + OWLClass f = factory.getOWLClass(URI.create("F")); + OWLClass g = factory.getOWLClass(URI.create("G")); + OWLClass h = factory.getOWLClass(URI.create("H")); + OWLClass k = factory.getOWLClass(URI.create("K")); + List<OWLAxiom> examples = new ArrayList<OWLAxiom>(); + examples.add( factory.getOWLSubClassAxiom(u, a)); + examples.add( factory.getOWLSubClassAxiom(u, factory.getOWLObjectComplementOf(a))); + examples.add( factory.getOWLSubClassAxiom(u, c)); + examples.add( factory.getOWLSubClassAxiom(c, factory.getOWLObjectComplementOf(b))); + examples.add( factory.getOWLSubClassAxiom(a, b)); + examples.add( factory.getOWLSubClassAxiom(u, g)); + examples.add( factory.getOWLSubClassAxiom(g, e)); + examples.add( factory.getOWLSubClassAxiom(u, f)); + examples.add( factory.getOWLSubClassAxiom(f, factory.getOWLObjectComplementOf(e))); + examples.add( factory.getOWLSubClassAxiom(u, d)); + examples.add( factory.getOWLSubClassAxiom(d, e)); + examples.add( factory.getOWLSubClassAxiom(c, k)); + examples.add( factory.getOWLSubClassAxiom(k, factory.getOWLObjectComplementOf(h))); + examples.add( factory.getOWLSubClassAxiom(b, h)); + OWLOntology example = manager.createOntology(new HashSet<OWLAxiom>(examples)); + axiomMap = new HashMap<OWLAxiom, Integer >(); + for(int i = 1; i<=examples.size(); i++){ + axiomMap.put(examples.get(i - 1), Integer.valueOf(i)); + } + return example; + } catch (OWLOntologyCreationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (OWLOntologyChangeException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + private Set<Integer> axioms2Integer(Set<OWLAxiom> axioms){ + Set<Integer> path = new HashSet<Integer>(); + for(OWLAxiom ax: axioms){ + path.add(axiomMap.get(ax)); + } + return path; + } + + public Set<Set<OWLAxiom>> getExplanations(OWLClass unsat){ + computeAllJusts(unsat); + return allJusts; + } + + private void computeAllJusts(OWLClass unsat){ + try { + allJusts.clear(); + hittingSets.clear(); + + Set<HittingSet> hittingSetsLocal = new HashSet<HittingSet>(); + + int step = 1; + + OWLOntologyManager man = OWLManager.createOWLOntologyManager(); + OWLOntology temp = man.createOntology(Collections.<OWLAxiom>emptySet()); + + localReasoner = new PelletReasonerFactory().createReasoner(man); + localReasoner.loadOntology(temp); + + singleExpGen = new GlassBoxExplanation(man); + singleExpGen.setOntology(temp); + singleExpGen.setReasoner(localReasoner); + singleExpGen.setReasonerFactory(reasonerFactory); + setup(); + + Set<OWLAxiom> selectedAxioms = selector.getRelatedAxioms(unsat); + Set<OWLAxiom> allAxioms = new HashSet<OWLAxiom>(); + allAxioms.addAll(selectedAxioms); + + while(!selectedAxioms.isEmpty()){log.debug("Step: " + step); + addAxioms(selectedAxioms); + localReasoner.refresh(); + + if(!hittingSetsLocal.isEmpty()){ + for(HittingSet hit : hittingSetsLocal){ + removeAxioms(hit, ontology, manager);globalReasoner.refresh(); + if(globalReasoner.isSatisfiable(unsat)){ + hittingSets.add(hit); + } + addAxioms(hit, ontology, manager);globalReasoner.refresh(); + } + + hittingSetsLocal.removeAll(hittingSets); + + if(hittingSetsLocal.isEmpty()){ + return; + } + + Set<HittingSet> hittingSetsTemp = new HashSet<HittingSet>(hittingSetsLocal); + for(HittingSet hit : hittingSetsTemp){ + removeAxioms(hit, temp, man); + Set<HittingSet> hittingSetsLocalTemp = expandHittingSetTree(unsat, temp, man, hit); + for(HittingSet hit2 : hittingSetsLocalTemp){ + hit2.addAll(hit); + hittingSetsLocal.add(hit2); + } + addAxioms(hit, temp, man); + } + + + } else if(!singleExpGen.getReasoner().isSatisfiable(unsat)){ + + hittingSetsLocal.addAll(expandHittingSetTree(unsat, temp, man, new HittingSet())); + + } + step++; + selectedAxioms = selector.getRelatedAxioms(selectedAxioms); + selectedAxioms.removeAll(allAxioms); + allAxioms.addAll(selectedAxioms); + + + } + + } catch (OWLOntologyCreationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (OWLOntologyChangeException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (OWLReasonerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + private Set<HittingSet> expandHittingSetTree(OWLClass unsat, OWLOntology ont, OWLOntologyManager man, HittingSet currentPath){ + Set<HittingSet> hittingSets = new HashSet<HittingSet>(); + Set<HittingSet> hittingSets1 = new HashSet<HittingSet>(); + Set<Set<OWLAxiom>> currentJusts = new HashSet<Set<OWLAxiom>>(); +// log.debug("CurrentPath: " + axioms2Integer(currentPath)); + log.debug("CurrentPath: " + currentPath); + Set<OWLAxiom> justification = null; + if(!allJusts.isEmpty()){ + for(Set<OWLAxiom> just : allJusts){ + if(!SetUtils.intersects(just, currentPath)){ + log.debug("using global ontology justification reuse:" + just); +// log.debug("using global ontology justification reuse:" + axioms2Integer(just)); + justification = just; + currentJusts.add(justification); + break; + } + } + } + if(justification == null){ +// pellet = new PelletExplanation(man, Collections.singleton(ont)); + justification = singleExpGen.getExplanation(unsat);//pellet.getUnsatisfiableExplanation(unsat); + if(!justification.isEmpty()){ +// log.debug("Found new justification: " + axioms2Integer(justification)); + log.debug("Found new justification: " + justification); + if(allJusts.isEmpty()){ + singleExpGen.beginTransaction(); + } + allJusts.add(justification); + currentJusts.add(justification); + } + } + + + for(OWLAxiom ax : justification){ + hittingSets1.add(new HittingSet(ax)); + } + + while(true){ + Set<HittingSet> hittingSets2 = new HashSet<HittingSet>(); + for(HittingSet hit : hittingSets1){ + boolean earlyPathTermination = false; + for(HittingSet h : SetUtils.union(hittingSets,this.hittingSets)){ + if(hit.containsAll(h)){ + earlyPathTermination = true; +// log.debug("early path termination:" + axioms2Integer(hit) + " contains all " + axioms2Integer(h)); + log.debug("early path termination:" + hit + " contains all " + h); + break; + } + } + if(!earlyPathTermination){ + removeAxioms(hit);localReasoner.refresh(); + if(localReasoner.isSatisfiable(unsat)){ + hittingSets.add(hit); + } else { + hittingSets2.add(hit); + } + addAxioms(hit);localReasoner.refresh(); + } + } + + if(hittingSets1.isEmpty() || hittingSets2.isEmpty()){ + return hittingSets; + } + + hittingSets1.clear(); + for(HittingSet hit : hittingSets2){ +// log.debug("CurrentPath: " + axioms2Integer(hit)); + log.debug("CurrentPath: " + hit); + + justification = null; + if(!currentJusts.isEmpty()){ + for(Set<OWLAxiom> just : allJusts){ + if(!SetUtils.intersects(just, hit)){ + log.debug("using sub ontology justification reuse: " + just); +// log.debug("using sub ontology justification reuse: " + axioms2Integer(just)); + justification = just; + break; + } + } + } + if(justification == null){ + removeAxioms(hit);System.out.println(singleExpGen.getExplanation(unsat)); +// pellet = new PelletExplanation(man, Collections.singleton(ont)); + justification = singleExpGen.getExplanation(unsat);//pellet.getUnsatisfiableExplanation(unsat); + if(!justification.isEmpty()){ +// log.debug("found new justification: " + axioms2Integer(justification)); + log.debug("found new justification: " + justification); + allJusts.add(justification); + currentJusts.add(justification); + } + } + + for(OWLAxiom ax : justification){ + HittingSet h = new HittingSet(hit); + h.add(ax); + hittingSets1.add(h); + } + + addAxioms(hit); + } + + } + } + + private void removeAxioms(Set<OWLAxiom> axioms, OWLOntology ontology, OWLOntologyManager man){ + try { + for(OWLAxiom ax : axioms){ + OntologyUtils.removeAxiom(ax, Collections.singleton(ontology), man); + } + } catch (OWLOntologyChangeException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + private void removeAxioms(Set<OWLAxiom> axioms){ + try { + for(OWLAxiom ax : axioms){ + OntologyUtils.removeAxiom(ax, singleExpGen.getReasoner().getLoadedOntologies(), singleExpGen.getOntologyManager()); + } + } catch (OWLOntologyChangeException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + private void addAxioms(Set<OWLAxiom> axioms, OWLOntology ontology, OWLOntologyManager man){ + try { + for(OWLAxiom ax : axioms){ + OntologyUtils.addAxiom(ax, Collections.singleton(ontology), man); + } + } catch (OWLOntologyChangeException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + private void addAxioms(Set<OWLAxiom> axioms){ + try { + for(OWLAxiom ax : axioms){ + OntologyUtils.addAxiom(ax, singleExpGen.getReasoner().getLoadedOntologies(), singleExpGen.getOntologyManager()); + } + } catch (OWLOntologyChangeException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public static void main(String[] args) throws OWLOntologyCreationException { +// URI file = URI.create("file:examples/ore/koala.owl"); +// String base = "http://protege.stanford.edu/plugins/owl/owl-library/koala.owl#"; +// URI classURI = URI.create(base + "KoalaWithPhD"); + + URI file = URI.create("file:examples/ore/tambis.owl"); + String base = "http://krono.act.uji.es/Links/ontologies/tambis.owl#"; + URI classURI = URI.create(base + "metal"); + + OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); + OWLDataFactory factory = manager.getOWLDataFactory(); + OWLClass cl = factory.getOWLClass(classURI); + OWLOntology ontology = manager.loadOntology(file); + Reasoner reasoner = new PelletReasonerFactory().createReasoner(manager); + reasoner.loadOntology(ontology); + + PelletExplanation pellet = new PelletExplanation(manager, Collections.singleton(ontology)); + Timer t1 = new Timer("pellet"); + t1.start(); + System.out.println(pellet.getUnsatisfiableExplanations(cl).size()); + t1.stop(); + System.out.println(t1.getTotal()); + + RelevanceBasedGenerator expGen = new RelevanceBasedGenerator(manager, ontology, reasoner); + Timer t2 = new Timer("relevance"); + t2.start(); + System.out.println(expGen.getExplanations(cl).size()); + t2.stop(); + System.out.println(t2.getTotal()); + + } +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/relevance/SimpleSelectionFunction.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/relevance/SimpleSelectionFunction.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/relevance/SimpleSelectionFunction.java 2009-09-02 10:19:41 UTC (rev 1834) @@ -0,0 +1,135 @@ +/* SimpleSelectionFunction - Decompiled by JODE + * Visit http://jode.sourceforge.net/ + */ +package org.dllearner.tools.ore.explanation.relevance; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.Vector; + +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLEntity; +import org.semanticweb.owl.model.OWLOntology; + +public class SimpleSelectionFunction { + private Set<OWLAxiom> allAxioms = new HashSet<OWLAxiom>(); + public Map<OWLAxiom, Set<OWLEntity>> axiomEntities = new HashMap<OWLAxiom, Set<OWLEntity>>(); + + + public void init(OWLOntology onto) { + allAxioms.clear(); + allAxioms = onto.getAxioms(); + + initAxiomEntities(allAxioms); + } + + public void init(HashSet<OWLAxiom> axioms) { + allAxioms.clear(); + allAxioms.addAll(axioms); + initAxiomEntities(allAxioms); + } + + public void initAxiomEntities(Set<OWLAxiom> axioms) { + axiomEntities.clear(); + for (OWLAxiom ax : axioms) { + axiomEntities.put(ax, ax.getSignature()); + } + + } + + public Set<OWLAxiom> getRelatedAxioms(OWLEntity concept) { + Set<OWLAxiom> relatedAxioms = new HashSet<OWLAxiom>(); + for (OWLAxiom ax : allAxioms) { + if (connected(concept, ax)) { + relatedAxioms.add(ax); + } + } + + return relatedAxioms; + } + + public Vector<OWLAxiom> getAllRelatedAxioms(OWLEntity concept) { + Vector<OWLAxiom> allRelated = new Vector<OWLAxiom>(); + Set<OWLAxiom> relatedAxioms = new HashSet<OWLAxiom>(); + Set<OWLAxiom> relatedAxioms_all = new HashSet<OWLAxiom>(); + for (relatedAxioms = getRelatedAxioms(concept); relatedAxioms.size() > 0; relatedAxioms = getRelatedAxioms(relatedAxioms_all)) { + allRelated + .addAll((HashSet<OWLAxiom>) ((HashSet<OWLAxiom>) relatedAxioms) + .clone()); + relatedAxioms_all + .addAll((HashSet<OWLAxiom>) ((HashSet<OWLAxiom>) relatedAxioms) + .clone()); + } + return allRelated; + } + + public Set<OWLAxiom> getRelatedAxioms(Set<OWLAxiom> originalAxioms_in) { + Set<OWLAxiom> relatedAxioms = new HashSet<OWLAxiom>(); + Set<OWLEntity> originalEntities = new HashSet<OWLEntity>(); + Set<OWLAxiom> originalAxioms = new HashSet<OWLAxiom>(originalAxioms_in); + for (OWLAxiom ax : originalAxioms) { + if (axiomEntities.containsKey(ax)) { + originalEntities.addAll(axiomEntities.get(ax)); + } + } + for (OWLEntity ent : originalEntities) { + for (OWLAxiom ax : allAxioms) { + if (!originalAxioms.contains(ax) && connected(ent, ax)) { + relatedAxioms.add(ax); + } + } + } + relatedAxioms.removeAll(originalAxioms_in); + return relatedAxioms; + } + + public Vector<OWLAxiom> getAllRelatedAxioms(Set<OWLAxiom> originalAxioms_in) { + Vector<OWLAxiom> allRelated = new Vector<OWLAxiom>(); + Set<OWLAxiom> relatedAxioms = new HashSet<OWLAxiom>(); + Set<OWLAxiom> relatedAxioms_all = new HashSet<OWLAxiom>(); + for (relatedAxioms = getRelatedAxioms(originalAxioms_in); relatedAxioms + .size() > 0; relatedAxioms = getRelatedAxioms(relatedAxioms_all)) { + allRelated + .addAll((HashSet<OWLAxiom>) ((HashSet<OWLAxiom>) relatedAxioms) + .clone()); + relatedAxioms_all + .addAll((HashSet<OWLAxiom>) ((HashSet<OWLAxiom>) relatedAxioms) + .clone()); + } + return allRelated; + } + + public boolean connected(HashSet<OWLAxiom> axioms, OWLAxiom a) { + boolean flag = false; + for (OWLAxiom ax : axioms) { + if (connected(ax, a) > 0) { + flag = true; + break; + } + } + + return flag; + } + + public int connected(OWLAxiom a1, OWLAxiom a2) { + int num = 0; + Set<OWLEntity> ents1 = axiomEntities.get(a1); + Set<OWLEntity> ents2 = axiomEntities.get(a2); + for(OWLEntity ent : ents1){ + if(ents2.contains(ent)){ + num++; + } + } + + return num; + } + + public boolean connected(OWLEntity c, OWLAxiom a) { + Set<OWLEntity> entities = axiomEntities.get(a); + if (entities.contains(c)) + return true; + return false; + } +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/relevance/SyntacticRelevanceBasedExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/relevance/SyntacticRelevanceBasedExplanationGenerator.java 2009-09-01 13:44:00 UTC (rev 1833) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/relevance/SyntacticRelevanceBasedExplanationGenerator.java 2009-09-02 10:19:41 UTC (rev 1834) @@ -76,7 +76,7 @@ e.printStackTrace(); } logger.addAppender( fileAppender ); - logger.setLevel(Level.DEBUG); + logger.setLevel(Level.OFF); } @@ -509,7 +509,7 @@ public static void main(String[] args){ URI file = URI.create("http://krono.act.uji.es/Links/ontologies/tambis.owl/at_download/file"); String base = "http://krono.act.uji.es/Links/ontologies/tambis.owl#"; - URI classURI = URI.create(base + "protein"); + URI classURI = URI.create(base + "metal"); try { OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); @@ -590,22 +590,23 @@ Timer t1 = new Timer("pellet"); t1.start(); PelletExplanation exp1 = new PelletExplanation(manager, Collections.singleton(ontology)); - exp1.getUnsatisfiableExplanations(cl, 1); + exp1.getUnsatisfiableExplanations(cl); t1.stop(); Timer t3 = new Timer("module-based"); t3.start(); OWLOntology module = OntologyUtils.getOntologyFromAxioms(ModularityUtils.extractModule(ontology, cl.getSignature(), ModuleType.TOP_OF_BOT)); System.out.println(module); PelletExplanation exp2 = new PelletExplanation(manager, Collections.singleton(module)); - exp2.getUnsatisfiableExplanations(cl, 1); + System.out.println(exp2.getUnsatisfiableExplanations(cl).size()); t3.stop(); Timer t2 = new Timer("syntactic relevance"); t2.start(); Reasoner reasoner = new PelletReasonerFactory().createReasoner(manager); reasoner.loadOntologies(Collections.singleton(ontology)); - SyntacticRelevanceBasedExplanationGenerator expGen = + SyntacticRelevanceBasedExplanationGenerator exp3 = new SyntacticRelevanceBasedExplanationGenerator(reasoner, manager); + System.out.println(exp3.getUnsatisfiableExplanations(cl, Strategie.All_Just_Relevance).size()); System.out.print("J = {"); // for(Set<OWLAxiom> explanation : expGen.getUnsatisfiableExplanations(cl, Strategie.All_Just_Relevance)){ Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ChangesTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ChangesTable.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ChangesTable.java 2009-09-02 10:19:41 UTC (rev 1834) @@ -0,0 +1,138 @@ +package org.dllearner.tools.ore.ui; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Cursor; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.List; + +import javax.swing.JTable; +import javax.swing.ListSelectionModel; +import javax.swing.table.DefaultTableCellRenderer; + +import org.jdesktop.swingx.JXTable; +import org.semanticweb.owl.model.OWLOntologyChange; + +public class ChangesTable extends JXTable { + + /** + * + */ + private static final long serialVersionUID = 1137642531002327026L; + + public ChangesTable(){ + setBackground(Color.WHITE); + setModel(new ChangesTableModel()); + setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + setEditable(false); + setTableHeader(null); + setGridColor(Color.LIGHT_GRAY); + setRowHeight(getRowHeight() + 5); + getColumn(0).setMaxWidth(20); + getColumn(2).setMaxWidth(40); + setShowGrid(false); + getColumn(1).setCellRenderer(new ManchesterSyntaxTableCellRenderer()); + getColumn(2).setCellRenderer(new UndoCellRenderer()); + + addKeyListener(new KeyAdapter() { + + public void keyPressed(KeyEvent e) + { + handleKeyPressed(e); + } + + + }); + + addMouseMotionListener(new MouseAdapter() { + + final ChangesTable table; + { + table = ChangesTable.this; + } + + public void mouseMoved(MouseEvent e) { + int row = rowAtPoint(e.getPoint()); + int column = columnAtPoint(e.getPoint()); + + if(column == 2 && row <= table.getRowCount() && row >= 0){ + setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + + } else { + setCursor(null); + } + } + + }); + + addMouseListener(new MouseAdapter() { + final ChangesTable table; + { + table = ChangesTable.this; + } + + public void mouseClicked(MouseEvent e) { + int row = rowAtPoint(e.getPoint()); + int column = columnAtPoint(e.getPoint()); + + if(row >= 0 && row <= table.getRowCount() && column == 2){ + ((ChangesTableModel)table.getModel()).removeChange(rowAtPoint(e.getPoint())); + setCursor(null); + } + } + }); + } + + private void handleKeyPressed(KeyEvent e) + { + int selRow = getSelectedRow(); + if(e.getKeyCode() == KeyEvent.VK_DELETE){ + ((ChangesTableModel)getModel()).removeChange(selRow); + } + + getSelectionModel().clearSelection(); + } + + public void addChanges(List<OWLOntologyChange> changes){ + ((ChangesTableModel)getModel()).addChanges(changes); + } + + public void removeChanges(List<OWLOntologyChange> changes){ + ((ChangesTableModel)getModel()).removeChanges(changes); + } + + public void clear(){ + ((ChangesTableModel)getModel()).clear(); + } + + public List<OWLOntologyChange> getChanges(){ + return ((ChangesTableModel)getModel()).getChanges(); + } + + + class UndoCellRenderer extends DefaultTableCellRenderer{ + + + /** + * + */ + private static final long serialVersionUID = 6941030561135280273L; + + @Override + public Component getTableCellRendererComponent(JTable table, + Object value, boolean isSelected, boolean hasFocus, int row, + int column) { + if(value instanceof LinkLabel){ + return (LinkLabel)value; + } + + return this; + } + + } +} + + Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ChangesTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ChangesTableModel.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ChangesTableModel.java 2009-09-02 10:19:41 UTC (rev 1834) @@ -0,0 +1,87 @@ +package org.dllearner.tools.ore.ui; + +import java.util.ArrayList; +import java.util.List; + +import javax.swing.table.AbstractTableModel; + +import org.dllearner.tools.ore.OREManager; +import org.semanticweb.owl.model.OWLOntologyChange; +import org.semanticweb.owl.model.RemoveAxiom; + +public class ChangesTableModel extends AbstractTableModel { + + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) { + if(columnIndex == 2){ + return true; + } + return super.isCellEditable(rowIndex, columnIndex); + } + + /** + * + */ + private static final long serialVersionUID = 7573340273483900311L; + + private List<OWLOntologyChange> changes; + + public ChangesTableModel(){ + changes = new ArrayList<OWLOntologyChange>(); + } + + @Override + public int getColumnCount() { + return 3; + } + + @Override + public int getRowCount() { + return changes.size(); + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + if(columnIndex == 0){ + if(changes.get(rowIndex) instanceof RemoveAxiom){ + return "–"; + } else { + return "+"; + } + } else if(columnIndex == 1){ + return changes.get(rowIndex).getAxiom(); + } + else { + return new LinkLabel("Undo"); + } + + } + + public void addChanges(List<OWLOntologyChange> changes){ + this.changes.addAll(changes); + fireTableDataChanged(); + } + + public void removeChanges(List<OWLOntologyChange> changes){ + this.changes.removeAll(changes); + fireTableDataChanged(); + } + + public void removeChange(int rowIndex){ + List<OWLOntologyChange> undoChanges = new ArrayList<OWLOntologyChange>(1); + undoChanges.add(changes.get(rowIndex)); + this.changes.remove(rowIndex); + OREManager.getInstance().getModifier().undoChanges(undoChanges); + fireTableDataChanged(); + } + + public void clear(){ + this.changes.clear(); + fireTableDataChanged(); + } + + public List<OWLOntologyChange> getChanges(){ + return changes; + } + +} Copied: trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionPanel.java (from rev 1830, trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/DescriptionPanel.java) =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionPanel.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionPanel.java 2009-09-02 10:19:41 UTC (rev 1834) @@ -0,0 +1,136 @@ +/** + * Copyright (C) 2007-2008, 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.tools.ore.ui; + +import java.awt.Color; +import java.awt.Component; +import java.awt.event.ActionListener; + +import javax.swing.BorderFactory; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.border.BevelBorder; + +import org.dllearner.core.owl.Description; +import org.dllearner.core.owl.Individual; +import org.dllearner.tools.ore.OREManager; + +/** + * Panel where learned class description is shown, and parts that might occur errors are red colored. + * @author Lorenz Buehmann + * + */ +public class DescriptionPanel extends JPanel{ + + /** + * + */ + private static final long serialVersionUID = -3684937339236885595L; + + + private Individual ind; + private ActionListener aL; + private String mode; + private boolean correct = false; + private Description newClassDescription; + + public DescriptionPanel(Individual ind, ActionListener aL, String mode){ + super(); + setBackground(Color.WHITE); + setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); + this.newClassDescription = OREManager.getInstance().getNewClassDescription().getDescription(); + this.ind = ind; + this.aL = aL; + this.mode = mode; + if(mode.equals("neg")){ + for(JLabel jL : OREManager.getInstance().descriptionToJLabelNeg(ind, newClassDescription)){ + add(jL); + if(jL instanceof DescriptionLabel){ + + ((DescriptionLabel) jL).setIndOre(ind); + ((DescriptionLabel) jL).init(); + ((DescriptionLabel) jL).addActionListeners(aL); + + } + + } + } else if(mode.equals("pos")){ + for(JLabel jL : OREManager.getInstance().descriptionToJLabelPos(ind, newClassDescription)){ + add(jL); + if(jL instanceof DescriptionLabel){ + + ((DescriptionLabel) jL).setIndOre(ind); + ((DescriptionLabel) jL).init(); + ((DescriptionLabel) jL).addActionListeners(aL); + + } + + } + } + } + + /** + * Updates the panel. + */ + public void updatePanel(){ + for(Component c : getComponents()){ + if(c instanceof JLabel){ + remove(c); + } + } +// ore.updateReasoner(); + correct = true; + if (mode.equals("neg")) { + for (JLabel jL : OREManager.getInstance().descriptionToJLabelNeg(ind, newClassDescription)) { + add(jL); + if (jL instanceof DescriptionLabel) { + ((DescriptionLabel) jL).setIndOre(ind); + ((DescriptionLabel) jL).init(); + ((DescriptionLabel) jL).addActionListeners(aL); + correct = false; + + } + } + } else if(mode.equals("pos")){ + for (JLabel jL : OREManager.getInstance().descriptionToJLabelPos(ind, newClassDescription)) { + add(jL); + if (jL instanceof DescriptionLabel) { + ((DescriptionLabe... [truncated message content] |
From: <lor...@us...> - 2009-09-05 08:02:49
|
Revision: 1835 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1835&view=rev Author: lorenz_b Date: 2009-09-05 08:02:35 +0000 (Sat, 05 Sep 2009) Log Message: ----------- added undo option for applied changes in repair panel removed some warnings Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/recent.txt trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/OWLSyntaxTableCellRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairPlanPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ResultTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/UnsatisfiableClassesTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/InconsistencyExplanationPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/UnsatisfiableExplanationPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/InconsistencyExplanationPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LeftPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/RepairPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/Delete16.gif trunk/src/dl-learner/org/dllearner/tools/ore/Edit16.gif trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomUsageChecker.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java Removed Paths: ------------- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairTableCellRenderer.java Modified: trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java =================================================================== --- trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -103,13 +103,14 @@ import org.semanticweb.owl.util.SimpleURIMapper; import org.semanticweb.owl.vocab.NamespaceOWLOntologyFormat; -import com.clarkparsia.explanation.PelletExplanation; +import com.clarkparsia.modularity.IncrementalClassifier; public class PelletReasoner extends ReasonerComponent { private Reasoner reasoner; private OWLOntologyManager manager; private OWLOntology ontology; + private IncrementalClassifier classifier; // the data factory is used to generate OWL API objects private OWLDataFactory factory; @@ -285,8 +286,14 @@ // TODO: add method to find datatypes } } - reasoner.loadOntologies(allImports); - dematerialise(); + try { + classifier.loadOntologies(allImports); + } catch (OWLReasonerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } +// reasoner.loadOntologies(allImports); +// dematerialise(); } /* @@ -329,7 +336,7 @@ } - private void dematerialise(){ + public void dematerialise(){ long dematStartTime = System.currentTimeMillis(); logger.debug("dematerialising concepts"); @@ -379,14 +386,9 @@ } public boolean isConsistent(){ - return reasoner.isConsistent(); + return classifier.getReasoner().isConsistent(); +// return reasoner.isConsistent(); } - - public Set<Set<OWLAxiom>> getInconsistencyReasons(){ - PelletExplanation expGen = new PelletExplanation(manager, reasoner.getLoadedOntologies()); - - return expGen.getInconsistencyExplanations(); - } @Override public ReasonerType getReasonerType() { @@ -396,8 +398,15 @@ @Override public void releaseKB() { - reasoner.clearOntologies(); - reasoner.dispose(); + try { + classifier.clearOntologies(); + classifier.dispose(); + } catch (OWLReasonerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } +// reasoner.clearOntologies(); +// reasoner.dispose(); } @@ -437,23 +446,30 @@ manager = OWLManager.createOWLOntologyManager(); factory = manager.getOWLDataFactory(); //set classification output to "none", while default is "console" - PelletOptions.USE_CLASSIFICATION_MONITOR = PelletOptions.MonitorType.SWING; + PelletOptions.USE_CLASSIFICATION_MONITOR = PelletOptions.MonitorType.NONE; // change log level to WARN for Pellet, because otherwise log // output will be very large Logger pelletLogger = Logger.getLogger("org.mindswap.pellet"); pelletLogger.setLevel(Level.WARN); - reasoner = new Reasoner(manager); - manager.addOntologyChangeListener(reasoner); + classifier = new IncrementalClassifier(manager); + reasoner = classifier.getReasoner(); + } public void classify(){ - reasoner.classify(); + try { + classifier.classify(); + } catch (OWLReasonerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } public void realise(){ try { + reasoner.realise(); } catch (OWLReasonerException e) { // TODO Auto-generated catch block @@ -462,7 +478,7 @@ } public void refresh(){ - reasoner.refresh(); + classifier.getReasoner().refresh(); } public void addProgressMonitor(ProgressMonitor monitor){ @@ -1521,5 +1537,9 @@ return reasoner; } + public IncrementalClassifier getClassifier(){ + return classifier; + } + } Added: trunk/src/dl-learner/org/dllearner/tools/ore/Delete16.gif =================================================================== (Binary files differ) Property changes on: trunk/src/dl-learner/org/dllearner/tools/ore/Delete16.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/src/dl-learner/org/dllearner/tools/ore/Edit16.gif =================================================================== (Binary files differ) Property changes on: trunk/src/dl-learner/org/dllearner/tools/ore/Edit16.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -1,11 +1,13 @@ package org.dllearner.tools.ore; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; +import org.dllearner.tools.ore.explanation.AxiomUsageChecker; import org.dllearner.tools.ore.explanation.CachedExplanationGenerator; import org.dllearner.tools.ore.explanation.Explanation; import org.dllearner.tools.ore.explanation.RootFinder; @@ -13,10 +15,8 @@ import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; import org.semanticweb.owl.model.OWLDataFactory; -import org.semanticweb.owl.model.OWLException; +import org.semanticweb.owl.model.OWLEntity; import org.semanticweb.owl.model.OWLOntology; -import org.semanticweb.owl.model.OWLOntologyChange; -import org.semanticweb.owl.model.OWLOntologyChangeListener; import org.semanticweb.owl.model.OWLOntologyManager; import org.semanticweb.owl.model.OWLSubClassAxiom; @@ -24,7 +24,7 @@ import uk.ac.manchester.cs.owl.explanation.ordering.DefaultExplanationOrderer; import uk.ac.manchester.cs.owl.explanation.ordering.ExplanationTree; -public class ExplanationManager implements OWLOntologyChangeListener, RepairManagerListener, OREManagerListener{ +public class ExplanationManager implements OREManagerListener{ private static ExplanationManager instance; @@ -35,8 +35,6 @@ private RootFinder rootFinder; - private boolean ontologyChanged = true; - private boolean isComputeAllExplanations = false; private int maxExplantionCount = 1; private boolean allExplanationWarningChecked = false; @@ -46,8 +44,8 @@ private List<ExplanationManagerListener> listeners; + private AxiomUsageChecker usageChecker; - private CachedExplanationGenerator gen; @@ -57,14 +55,14 @@ this.manager = reasoner.getManager(); this.ontology = reasoner.getLoadedOntologies().iterator().next(); - manager.addOntologyChangeListener(this); dataFactory = manager.getOWLDataFactory(); - RepairManager.getRepairManager(oreMan).addListener(this); explanationOrderer = new DefaultExplanationOrderer(); orderingMap = new HashMap<Explanation, List<Map<OWLAxiom, Integer>>>(); rootFinder = new RootFinder(); + + usageChecker = new AxiomUsageChecker(ontology); listeners = new ArrayList<ExplanationManagerListener>(); @@ -72,10 +70,6 @@ } - public ExplanationManager() { - // TODO Auto-generated constructor stub - } - public static synchronized ExplanationManager getInstance( OREManager oreMan) { if (instance == null) { @@ -84,19 +78,16 @@ return instance; } - public static synchronized ExplanationManager getInstance(){ - if (instance == null) { - instance = new ExplanationManager(); - } - return instance; - } - public Set<OWLClass> getDerivedClasses(){ return rootFinder.getDerivedClasses(); } public Set<OWLClass> getRootUnsatisfiableClasses(){ - return rootFinder.getRootClasses(); + if(rootFinder != null){ + return rootFinder.getRootClasses(); + } else { + return Collections.<OWLClass>emptySet(); + } } public Set<Explanation> getUnsatisfiableExplanations(OWLClass unsat) { @@ -148,8 +139,12 @@ return ordering; } + public Set<OWLEntity> getUsage(OWLAxiom axiom){ + return usageChecker.getUsage(axiom); + } + private ArrayList<Map<OWLAxiom, Integer>> getTree2List(Tree<OWLAxiom> tree){ ArrayList<Map<OWLAxiom, Integer>> ordering = new ArrayList<Map<OWLAxiom, Integer>>(); Map<OWLAxiom, Integer> axiom2Depth = new HashMap<OWLAxiom, Integer>(); @@ -160,9 +155,7 @@ } return ordering; } - - public int getArity(OWLClass cl, OWLAxiom ax) { int arity = 0; @@ -206,18 +199,6 @@ public int getMaxExplantionCount(){ return maxExplantionCount; } - - @Override - public void repairPlanExecuted(List<OWLOntologyChange> changes) { - reasoner.refresh(); - ontologyChanged = true; - } - - @Override - public void repairPlanChanged() { - // TODO Auto-generated method stub - - } public void addListener(ExplanationManagerListener l){ listeners.add(l); @@ -254,18 +235,13 @@ public Set<OWLAxiom> getRemainingAxioms(OWLAxiom source, OWLAxiom part){ return gen.getRemainingAxioms(source, part); } - - @Override - public void ontologiesChanged(List<? extends OWLOntologyChange> changes) - throws OWLException { - ontologyChanged = true; - } @Override public void activeOntologyChanged() { ontology = OREManager.getInstance().getPelletReasoner().getOWLAPIOntologies(); reasoner = OREManager.getInstance().getPelletReasoner().getReasoner(); gen = new CachedExplanationGenerator(ontology, reasoner); + orderingMap.clear(); } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -1,40 +1,47 @@ package org.dllearner.tools.ore; import java.util.ArrayList; -import java.util.HashMap; import java.util.HashSet; import java.util.List; -import java.util.Map; import java.util.Set; -import org.dllearner.tools.ore.explanation.AxiomRanker; +import org.dllearner.tools.ore.explanation.LostEntailmentsChecker; import org.mindswap.pellet.owlapi.Reasoner; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLOntology; import org.semanticweb.owl.model.OWLOntologyChange; import org.semanticweb.owl.model.OWLOntologyManager; -public class ImpactManager implements RepairManagerListener{ +public class ImpactManager implements RepairManagerListener, OREManagerListener{ private static ImpactManager instance; - private Map<OWLAxiom, Set<OWLAxiom>> impact; - private AxiomRanker ranker; - private OWLAxiom actual; + private LostEntailmentsChecker lostEntailmentsChecker; private List<OWLAxiom> selectedAxioms; private List<ImpactManagerListener> listeners; private OWLOntology ontology; private OWLOntologyManager manager; private Reasoner reasoner; + private OREManager oreMan; + + private Set<OWLAxiom> lostEntailments; + private Set<OWLAxiom> addedEntailments; private ImpactManager(OREManager oreMan) { + this.oreMan = oreMan; this.reasoner = oreMan.getPelletReasoner().getReasoner(); this.ontology = reasoner.getLoadedOntologies().iterator().next(); this.manager = reasoner.getManager(); - impact = new HashMap<OWLAxiom, Set<OWLAxiom>>(); + + lostEntailments = new HashSet<OWLAxiom>(); + addedEntailments = new HashSet<OWLAxiom>(); + selectedAxioms = new ArrayList<OWLAxiom>(); listeners = new ArrayList<ImpactManagerListener>(); - ranker = new AxiomRanker(ontology, reasoner, manager); - RepairManager.getRepairManager(oreMan).addListener(this); + + lostEntailmentsChecker = new LostEntailmentsChecker(ontology, oreMan.getPelletReasoner().getClassifier(), manager); + RepairManager.getInstance(oreMan).addListener(this); + oreMan.addListener(this); + } @@ -57,46 +64,31 @@ return instance; } - - public Set<OWLAxiom> getImpactAxioms(OWLAxiom ax) { - - Set<OWLAxiom> imp = impact.get(ax); - if (imp == null) { - imp = new HashSet<OWLAxiom>(); - impact.put(ax, imp); - if(ax != null){ -// imp.addAll(ranker.computeImpactOnRemoval(ax)); - imp.addAll(ranker.computeImpactSOS(ax)); - } - } - return imp; + public Set<OWLAxiom> getLostEntailments(){ + return lostEntailments; } - public Set<OWLAxiom> getImpactForAxioms2Remove(){ - Set<OWLAxiom> totalImpact = new HashSet<OWLAxiom>(); - for(OWLAxiom ax : selectedAxioms){ - Set<OWLAxiom> imp = getImpactAxioms(ax); - if(imp != null){ - totalImpact.addAll(imp); - } - - - } - return totalImpact; + public Set<OWLAxiom> getAddedEntailments(){ + return addedEntailments; } - public void setActualAxiom(OWLAxiom ax){ - actual = ax; - fireImpactListChanged(); + public void computeImpactForAxiomsInRepairPlan(){ + lostEntailments.clear(); + addedEntailments.clear(); + List<OWLOntologyChange> repairPlan = RepairManager.getInstance(oreMan).getRepairPlan(); + List<Set<OWLAxiom>> classificationImpact = lostEntailmentsChecker.computeClassificationImpact(repairPlan); + lostEntailments.addAll(classificationImpact.get(0)); + addedEntailments.addAll(classificationImpact.get(1)); + Set<OWLAxiom> structuralImpact = lostEntailmentsChecker.computeStructuralImpact(repairPlan); + lostEntailments.addAll(structuralImpact); } - public void addAxiom2ImpactList(OWLAxiom ax){ - selectedAxioms.add(ax); - + public void addSelection(OWLAxiom ax){ + selectedAxioms.add(ax); fireImpactListChanged(); } - public void removeAxiomFromImpactList(OWLAxiom ax){ + public void removeSelection(OWLAxiom ax){ selectedAxioms.remove(ax); fireImpactListChanged(); } @@ -121,10 +113,26 @@ @Override public void repairPlanExecuted(List<OWLOntologyChange> changes) { selectedAxioms.clear(); - impact.clear(); + lostEntailments.clear(); + addedEntailments.clear(); fireImpactListChanged(); } + + @Override + public void activeOntologyChanged() { + this.reasoner = oreMan.getPelletReasoner().getReasoner(); + this.ontology = reasoner.getLoadedOntologies().iterator().next(); + this.manager = reasoner.getManager(); + lostEntailmentsChecker = new LostEntailmentsChecker(ontology, oreMan.getPelletReasoner().getClassifier(), manager); + selectedAxioms.clear(); + lostEntailments.clear(); + addedEntailments.clear(); + fireImpactListChanged(); + + } + + } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -31,13 +31,11 @@ import org.dllearner.tools.ore.ui.wizard.Wizard; import org.dllearner.tools.ore.ui.wizard.WizardPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.ClassChoosePanelDescriptor; -import org.dllearner.tools.ore.ui.wizard.descriptors.InconsistencyExplanationPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.IntroductionPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.KnowledgeSourcePanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.LearningPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.RepairPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.SavePanelDescriptor; -import org.dllearner.tools.ore.ui.wizard.descriptors.UnsatisfiableExplanationPanelDescriptor; /** @@ -68,9 +66,10 @@ // TODO Auto-generated catch block e.printStackTrace(); } + Locale.setDefault(Locale.ENGLISH); final Wizard wizard = new Wizard(); - wizard.getDialog().setTitle("DL-Learner ORE-Tool"); + wizard.getDialog().setTitle("DL-Learner Ontology Repair and Enrichment"); Dimension dim = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); wizard.getDialog().setSize(dim); @@ -101,12 +100,10 @@ if (!(args.length == 1)){ wizard.setCurrentPanel(IntroductionPanelDescriptor.IDENTIFIER); } else{ - OREManager.getInstance().setCurrentKnowledgeSource(new File(args[0]).toURI()); - OREManager.getInstance().initPelletReasoner(); -// ((KnowledgeSourcePanelDescriptor) descriptor2).getPanel().setFileURL(args[0]); wizard.setCurrentPanel(KnowledgeSourcePanelDescriptor.IDENTIFIER); - wizard.setLeftPanel(1); - + wizard.setLeftPanel(1); + ((KnowledgeSourcePanelDescriptor)wizard.getModel().getPanelHashMap().get(KnowledgeSourcePanelDescriptor.IDENTIFIER)).loadOntology(new File(args[0]).toURI()); + } SwingUtilities.invokeLater(new Runnable() { Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -1,7 +1,5 @@ package org.dllearner.tools.ore; -import java.io.IOException; -import java.io.StringWriter; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; @@ -35,11 +33,7 @@ import org.dllearner.reasoning.PelletReasoner; import org.dllearner.tools.ore.ui.DescriptionLabel; import org.mindswap.pellet.exceptions.InconsistentOntologyException; -import org.semanticweb.owl.model.OWLAxiom; -import org.semanticweb.owl.model.OWLException; -import com.clarkparsia.explanation.io.manchester.ManchesterSyntaxExplanationRenderer; - public class OREManager { @@ -183,32 +177,6 @@ } } - - - public String getInconsistencyExplanationsString(){ - ManchesterSyntaxExplanationRenderer renderer = new ManchesterSyntaxExplanationRenderer(); - StringWriter buffer = new StringWriter(); - renderer.startRendering(buffer); - try { - renderer.render(getInconsistencyExplanations()); - } catch (UnsupportedOperationException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (OWLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - renderer.endRendering(); - return buffer.toString(); - } - - private Set<Set<OWLAxiom>> getInconsistencyExplanations(){ - return pelletReasoner.getInconsistencyReasons(); - } - public OntologyModifier getModifier() { return modifier; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -2,46 +2,41 @@ import java.util.ArrayList; import java.util.List; -import java.util.Set; import java.util.Stack; import org.mindswap.pellet.owlapi.Reasoner; import org.semanticweb.owl.model.AddAxiom; -import org.semanticweb.owl.model.OWLAxiom; -import org.semanticweb.owl.model.OWLOntology; import org.semanticweb.owl.model.OWLOntologyChange; import org.semanticweb.owl.model.OWLOntologyChangeException; import org.semanticweb.owl.model.OWLOntologyManager; import org.semanticweb.owl.model.RemoveAxiom; -public class RepairManager { +public class RepairManager implements OREManagerListener{ private static RepairManager instance; - - private OWLAxiom actual; - private List<OWLAxiom> axioms2Remove; - private List<OWLAxiom> axioms2Keep; private List<RepairManagerListener> listeners; - private OWLOntology ontology; + private OWLOntologyManager manager; private Reasoner reasoner; + private List<OWLOntologyChange> repairPlan; + private Stack<List<OWLOntologyChange>> undoStack; private Stack<List<OWLOntologyChange>> redoStack; - private RepairManager(OREManager oreMan) { + private RepairManager(OREManager oreMan){ this.reasoner = oreMan.getPelletReasoner().getReasoner(); - this.ontology = reasoner.getLoadedOntologies().iterator().next(); this.manager = reasoner.getManager(); - - axioms2Remove = new ArrayList<OWLAxiom>(); - axioms2Keep = new ArrayList<OWLAxiom>(); - + listeners = new ArrayList<RepairManagerListener>(); undoStack = new Stack<List<OWLOntologyChange>>(); redoStack = new Stack<List<OWLOntologyChange>>(); + + repairPlan = new ArrayList<OWLOntologyChange>(); + + oreMan.addListener(this); } @@ -57,100 +52,77 @@ listeners.remove(listener); } - public static synchronized RepairManager getRepairManager(OREManager oreMan) { + public static synchronized RepairManager getInstance(OREManager oreMan) { if (instance == null) { instance = new RepairManager(oreMan); } return instance; } - public void addAxiom2Remove(OWLAxiom ax){ - axioms2Remove.add(ax); + public void addToRepairPlan(OWLOntologyChange change){ + repairPlan.add(change); fireRepairPlanChanged(); } - public void addAxioms2Remove(Set<OWLAxiom> axioms){ - axioms2Remove.addAll(axioms); + public void removeFromRepairPlan(OWLOntologyChange change){ + repairPlan.remove(change); fireRepairPlanChanged(); } - public void removeAxiom2Remove(OWLAxiom ax){ - axioms2Remove.remove(ax); - fireRepairPlanChanged(); + public List<OWLOntologyChange> getRepairPlan(){ + return repairPlan; } - public void removeAxioms2Remove(Set<OWLAxiom> axioms){ - axioms2Remove.removeAll(axioms); - fireRepairPlanChanged(); + public boolean isUndoable(){ + return !undoStack.isEmpty(); } - public void addAxiom2Keep(OWLAxiom ax){ - axioms2Keep.add(ax); - fireRepairPlanChanged(); - } - - public void addAxioms2Keep(Set<OWLAxiom> axioms){ - axioms2Keep.addAll(axioms); - fireRepairPlanChanged(); - } - - public void removeAxiom2Keep(OWLAxiom ax){ - axioms2Keep.remove(ax); - fireRepairPlanChanged(); - } - - public void removeAxioms2Keep(Set<OWLAxiom> axioms){ - axioms2Keep.removeAll(axioms); - fireRepairPlanChanged(); - } - - public boolean isSelected(OWLAxiom ax){ - return axioms2Remove.contains(ax); - } - - public List<OWLAxiom> getAxioms2Remove(){ - return axioms2Remove; - } - - public List<OWLAxiom> getAxioms2Keep(){ - return axioms2Keep; - } - public void executeRepairPlan(){ - List<OWLOntologyChange> changes = new ArrayList<OWLOntologyChange>(); - for(OWLAxiom ax : axioms2Remove){ - changes.add(new RemoveAxiom(ontology, ax)); - } - for(OWLAxiom ax : axioms2Keep){ - changes.add(new AddAxiom(ontology, ax)); - } + try { - manager.applyChanges(changes); + manager.applyChanges(repairPlan); } catch (OWLOntologyChangeException e) { System.out.println("Error in Repairmanager: Couldn't apply ontology changes"); e.printStackTrace(); } - undoStack.push(changes); - axioms2Remove.clear(); - axioms2Keep.clear(); + undoStack.push(new ArrayList<OWLOntologyChange>(repairPlan)); + List<OWLOntologyChange> changes = new ArrayList<OWLOntologyChange>(repairPlan); + + repairPlan.clear(); fireRepairPlanExecuted(changes); + } public void undo(){ List<OWLOntologyChange> changes = undoStack.pop(); redoStack.push(changes); + try { - manager.applyChanges(changes); + manager.applyChanges(getInverseChanges(changes)); } catch (OWLOntologyChangeException e) { System.out.println("Error in Repairmanager: Couldn't apply ontology changes"); e.printStackTrace(); } + + fireRepairPlanExecuted(changes); } public void redo(){ } + private List<OWLOntologyChange> getInverseChanges(List<OWLOntologyChange> changes){ + List<OWLOntologyChange> inverseChanges = new ArrayList<OWLOntologyChange>(changes.size()); + for(OWLOntologyChange change : changes){ + if(change instanceof RemoveAxiom){ + inverseChanges.add(new AddAxiom(change.getOntology(), change.getAxiom())); + } else { + inverseChanges.add(new RemoveAxiom(change.getOntology(), change.getAxiom())); + } + } + return inverseChanges; + } + private void fireRepairPlanChanged(){ for(RepairManagerListener listener : listeners){ listener.repairPlanChanged(); @@ -158,9 +130,14 @@ } private void fireRepairPlanExecuted(List<OWLOntologyChange> changes){ - for(RepairManagerListener listener : listeners){ listener.repairPlanExecuted(changes); } } + + @Override + public void activeOntologyChanged() { + repairPlan.clear(); + + } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -1,5 +1,7 @@ package org.dllearner.tools.ore; +import java.awt.Cursor; + import javax.swing.JDialog; import javax.swing.SwingWorker; @@ -50,4 +52,18 @@ public synchronized void cancelCurrentThread(){currentThread.stop(); } + + public void setTaskStarted(String message){ + dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + statusBar.setProgressTitle(message); + statusBar.showProgress(true); + } + + public void setTaskFinished(){ + dialog.setCursor(null); + statusBar.setProgressTitle("Done"); + statusBar.showProgress(false); + } + + } Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -1,269 +0,0 @@ -package org.dllearner.tools.ore.explanation; - -import java.net.URI; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.mindswap.pellet.owlapi.PelletReasonerFactory; -import org.mindswap.pellet.owlapi.Reasoner; -import org.mindswap.pellet.utils.SetUtils; -import org.semanticweb.owl.apibinding.OWLManager; -import org.semanticweb.owl.inference.OWLReasonerException; -import org.semanticweb.owl.model.AxiomType; -import org.semanticweb.owl.model.OWLAxiom; -import org.semanticweb.owl.model.OWLClass; -import org.semanticweb.owl.model.OWLDataFactory; -import org.semanticweb.owl.model.OWLDataPropertyDomainAxiom; -import org.semanticweb.owl.model.OWLDescription; -import org.semanticweb.owl.model.OWLDisjointClassesAxiom; -import org.semanticweb.owl.model.OWLObjectPropertyDomainAxiom; -import org.semanticweb.owl.model.OWLObjectPropertyRangeAxiom; -import org.semanticweb.owl.model.OWLOntology; -import org.semanticweb.owl.model.OWLOntologyChangeException; -import org.semanticweb.owl.model.OWLOntologyCreationException; -import org.semanticweb.owl.model.OWLOntologyManager; -import org.semanticweb.owl.model.OWLSubClassAxiom; -import org.semanticweb.owl.model.RemoveAxiom; - -import com.clarkparsia.modularity.IncrementalClassifier; -import com.clarkparsia.modularity.ModuleExtractor; -import com.clarkparsia.modularity.ModuleExtractorFactory; - -public class AxiomRanker { - - private Map axiomSOSMap; - - private OWLOntology ontology; - private Reasoner reasoner; - private OWLOntologyManager manager; - private OWLDataFactory factory; - private IncrementalClassifier classifier; - - boolean enableImpactUnsat; - - public AxiomRanker(OWLOntology ont, Reasoner reasoner, OWLOntologyManager mng){ - this.ontology = ont; - this.reasoner = reasoner; - this.manager = mng; - this.factory = manager.getOWLDataFactory(); - ModuleExtractor extractor = ModuleExtractorFactory.createModuleExtractor(); - classifier = new IncrementalClassifier(manager, reasoner, extractor); - - } - - public Set<OWLAxiom> computeImpactOnRemoval(OWLAxiom ax){ - Set<OWLAxiom> impact = new HashSet<OWLAxiom>(); - - try { -// IncrementalClassifier classifier = new IncrementalClassifier(manager); - classifier.loadOntology(ontology); - classifier.classify(); - Set<OWLClass> inc = classifier.getInconsistentClasses(); - for(OWLDescription cl : ontology.getClassesInSignature()){ - if(!inc.contains(cl)){ - for(OWLClass sup : SetUtils.union(classifier.getAncestorClasses(cl))){ - if(!sup.equals(factory.getOWLThing())){ - for(OWLClass sub : SetUtils.union(classifier.getDescendantClasses(cl))){ - if(!sub.equals(factory.getOWLNothing())){ - impact.add(factory.getOWLSubClassAxiom(cl, sup)); - } - } - - } - } - - } - } - - - manager.applyChange(new RemoveAxiom(ontology, ax)); - - classifier.classify(); - inc = classifier.getInconsistentClasses();System.out.println(inc); - - for(OWLDescription cl : ontology.getClassesInSignature()){ - if(!inc.contains(cl)){ - for(OWLClass sup : SetUtils.union(classifier.getAncestorClasses(cl))){ - if(!sup.equals(factory.getOWLThing())){ - for(OWLClass sub : SetUtils.union(classifier.getDescendantClasses(cl))){ - if(!sub.equals(factory.getOWLNothing())){ - impact.remove(factory.getOWLSubClassAxiom(cl, sup)); - } - } - - } - } - - } - } - manager.addAxiom(ontology, ax);classifier.classify(); - - } catch (OWLReasonerException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (OWLOntologyChangeException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - return impact; - } - - public Set<OWLAxiom> computeImpactSOS(OWLAxiom axiom) { - Set<OWLAxiom> result = new HashSet<OWLAxiom>(); - if (axiom instanceof OWLSubClassAxiom) { - OWLSubClassAxiom subAx = (OWLSubClassAxiom) axiom; - if (subAx.getSubClass() instanceof OWLClass && subAx.getSuperClass() instanceof OWLClass) { - OWLClass sub = (OWLClass) subAx.getSubClass(); - OWLClass sup = (OWLClass) subAx.getSuperClass(); - - for (OWLClass desc : SetUtils.union(reasoner.getDescendantClasses(sub))) { - - for (OWLClass anc : SetUtils.union(reasoner.getAncestorClasses(sup))) { - - if (!anc.equals(factory.getOWLThing()) && !desc.equals(factory.getOWLNothing())) { - OWLSubClassAxiom ax = factory.getOWLSubClassAxiom(desc, anc); - result.add(ax); - } - } - } - } - }else if (axiom instanceof OWLDisjointClassesAxiom) { - Set<OWLDescription> disjointClasses = ((OWLDisjointClassesAxiom) axiom).getDescriptions(); - boolean complex = false; - for (OWLDescription dis : disjointClasses) { - if (dis.isAnonymous()) { - complex = true; - break; - } - } - if (!complex) { - - List<OWLDescription> disjoints = new ArrayList<OWLDescription>(disjointClasses); - - - - for (OWLDescription dis : new ArrayList<OWLDescription>(disjoints)) { - if (!dis.equals(factory.getOWLNothing())) { - disjoints.remove(dis); - Set<? extends OWLDescription> descendants = SetUtils.union(reasoner.getDescendantClasses(dis.asOWLClass())); - descendants.removeAll(reasoner.getEquivalentClasses(factory.getOWLNothing())); -// if (enableImpactUnsat) { -// descendants.addAll(((OWLClass) dis).getSubClasses(ontology)); -// } - for (OWLDescription desc1 : descendants) { - - if (!desc1.equals(factory.getOWLNothing())) { - if (enableImpactUnsat || !reasoner.getEquivalentClasses((desc1)).contains(factory.getOWLNothing())) { - for (OWLDescription desc2 : disjoints) { - - if (!desc2.equals(desc1)) { - Set<OWLDescription> newDis = new HashSet<OWLDescription>(); - newDis.add(desc1); - newDis.add(desc2); - OWLDisjointClassesAxiom ax = factory.getOWLDisjointClassesAxiom(newDis); - result.add(ax); - } - } - } - } - } - - disjoints.add(dis); - - - } - } -// return result; - } - } - else if (axiom instanceof OWLObjectPropertyDomainAxiom) { - OWLObjectPropertyDomainAxiom pd = (OWLObjectPropertyDomainAxiom) axiom; - - if (pd.getDomain() instanceof OWLClass) { - OWLClass dom = (OWLClass) pd.getDomain(); - Set<OWLClass> superClasses = SetUtils.union(reasoner.getSuperClasses(dom)); - for (OWLClass sup : superClasses) { - - OWLObjectPropertyDomainAxiom ax = factory.getOWLObjectPropertyDomainAxiom( pd.getProperty(), sup); - result.add(ax); - } - } - } - else if (axiom instanceof OWLDataPropertyDomainAxiom) { - OWLDataPropertyDomainAxiom pd = (OWLDataPropertyDomainAxiom) axiom; - - if (pd.getDomain() instanceof OWLClass) { - OWLClass dom = (OWLClass) pd.getDomain(); - Set<OWLClass> superClasses = SetUtils.union(reasoner.getSuperClasses(dom)); - for (OWLClass sup : superClasses) { - - OWLDataPropertyDomainAxiom ax = factory.getOWLDataPropertyDomainAxiom( pd.getProperty(), sup); - result.add(ax); - } - } - } - else if (axiom instanceof OWLObjectPropertyRangeAxiom) { - OWLObjectPropertyRangeAxiom pd = (OWLObjectPropertyRangeAxiom) axiom; - - if (pd.getRange() instanceof OWLClass) { - OWLClass ran = (OWLClass) pd.getRange(); - Set<OWLClass> superClasses = SetUtils.union(reasoner.getSuperClasses(ran)); - for (OWLClass sup : superClasses) { - - OWLObjectPropertyRangeAxiom ax = factory.getOWLObjectPropertyRangeAxiom(pd.getProperty(), sup); - result.add(ax); - } - } - } - for(OWLAxiom ax : result){ - System.out.println(reasoner.isEntailed(axiom)); - } - return result; - } - - - - - - public static void main(String[] args){ - - try { - OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); - OWLDataFactory dFactory = manager.getOWLDataFactory(); - OWLOntology ontology = manager.loadOntologyFromPhysicalURI(URI.create("file:examples/ore/koala.owl")); - PelletReasonerFactory factory = new PelletReasonerFactory(); - Reasoner reasoner = factory.createReasoner(manager); - reasoner.loadOntology(ontology); - reasoner.classify(); - - - OWLClass cl1 = dFactory.getOWLClass(URI.create("http://protege.stanford.edu/plugins/owl/owl-library/koala.owl#koala")); - OWLClass cl2 = dFactory.getOWLClass(URI.create("http://protege.stanford.edu/plugins/owl/owl-library/koala.owl#person")); - OWLAxiom ax = dFactory.getOWLSubClassAxiom(cl1, dFactory.getOWLObjectComplementOf(cl2)); - Set<OWLClass> before = null; - Set<OWLClass> after = null; - - before = SetUtils.union(reasoner.getSuperClasses(cl1)); - manager.applyChange(new RemoveAxiom(ontology, ax)); - after = SetUtils.union(reasoner.getSuperClasses(cl1)); - System.out.println(SetUtils.difference(before, after)); - - System.out.println(cl1.getSuperClasses(ontology)); - System.out.println(after); - - - - } catch (OWLOntologyCreationException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (OWLOntologyChangeException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - -} Added: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomUsageChecker.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomUsageChecker.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomUsageChecker.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -0,0 +1,43 @@ +package org.dllearner.tools.ore.explanation; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLEntity; +import org.semanticweb.owl.model.OWLOntology; + +public class AxiomUsageChecker { + + private OWLOntology ontology; + private Map<OWLAxiom, Set<OWLEntity>> axiom2UsageMap; + + public AxiomUsageChecker(OWLOntology ontology){ + this.ontology = ontology; + axiom2UsageMap = new HashMap<OWLAxiom, Set<OWLEntity>>(); + } + + private Set<OWLEntity> computeUsage(OWLAxiom axiom) { + Set<OWLEntity> usage = new HashSet<OWLEntity>(); + for(OWLEntity ent : axiom.getSignature()){ + for(OWLAxiom ax : ontology.getLogicalAxioms()){ + if(ax.getSignature().contains(ent)){ + usage.addAll(ax.getSignature()); + } + } + } + + return usage; + } + + public Set<OWLEntity> getUsage(OWLAxiom axiom){ + Set<OWLEntity> usage = axiom2UsageMap.get(axiom); + if(usage == null){ + usage = computeUsage(axiom); + axiom2UsageMap.put(axiom, usage); + } + return usage; + } +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/CachedExplanationGenerator.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -6,7 +6,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.Map.Entry; import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.RepairManager; @@ -19,7 +18,6 @@ import org.semanticweb.owl.model.OWLOntology; import org.semanticweb.owl.model.OWLOntologyChange; import org.semanticweb.owl.model.OWLOntologyManager; -import org.semanticweb.owl.model.RemoveAxiom; import uk.ac.manchester.cs.owl.modularity.ModuleType; @@ -49,7 +47,7 @@ laconicExplanationCache = new HashMap<OWLAxiom, Set<Explanation>>(); lastRequestedRegularSize = new HashMap<OWLAxiom, Integer>(); lastRequestedLaconicSize = new HashMap<OWLAxiom, Integer>(); - RepairManager.getRepairManager(OREManager.getInstance()).addListener(this); + RepairManager.getInstance(OREManager.getInstance()).addListener(this); // regularExpGen = new PelletExplanation(manager, Collections.singleton(ontology)); // laconicExpGen = new LaconicExplanationGenerator(manager, new PelletReasonerFactory(), Collections.singleton(ontology)); Copied: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java (from rev 1834, trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java) =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -0,0 +1,245 @@ +package org.dllearner.tools.ore.explanation; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.mindswap.pellet.owlapi.Reasoner; +import org.mindswap.pellet.utils.SetUtils; +import org.semanticweb.owl.inference.OWLReasonerException; +import org.semanticweb.owl.model.AddAxiom; +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLClass; +import org.semanticweb.owl.model.OWLDataFactory; +import org.semanticweb.owl.model.OWLDataPropertyDomainAxiom; +import org.semanticweb.owl.model.OWLDescription; +import org.semanticweb.owl.model.OWLDisjointClassesAxiom; +import org.semanticweb.owl.model.OWLObjectPropertyDomainAxiom; +import org.semanticweb.owl.model.OWLObjectPropertyRangeAxiom; +import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.OWLOntologyChange; +import org.semanticweb.owl.model.OWLOntologyChangeException; +import org.semanticweb.owl.model.OWLOntologyManager; +import org.semanticweb.owl.model.OWLSubClassAxiom; +import org.semanticweb.owl.model.RemoveAxiom; + +import com.clarkparsia.modularity.IncrementalClassifier; + +public class LostEntailmentsChecker { + + + private OWLOntology ontology; + private Reasoner reasoner; + private OWLOntologyManager manager; + private OWLDataFactory factory; + private IncrementalClassifier classifier; + + boolean enableImpactUnsat; + + public LostEntailmentsChecker(OWLOntology ont, IncrementalClassifier classifier, OWLOntologyManager mng){ + this.ontology = ont; + this.classifier = classifier; + this.manager = mng; + this.factory = manager.getOWLDataFactory(); + this.reasoner = classifier.getReasoner(); + + } + + public List<Set<OWLAxiom>> computeClassificationImpact(List<OWLOntologyChange> changes){ + List<Set<OWLAxiom>> impact = new ArrayList<Set<OWLAxiom>>(2); + Set<OWLAxiom> entailmentsBefore = new HashSet<OWLAxiom>(); + Set<OWLAxiom> entailmentsAfter = new HashSet<OWLAxiom>(); + Set<OWLAxiom> lostEntailments = new HashSet<OWLAxiom>(); + Set<OWLAxiom> addedEntailents = new HashSet<OWLAxiom>(); + + try{ + Set<OWLClass> inc = classifier.getInconsistentClasses(); + for(OWLDescription cl : ontology.getClassesInSignature()){ + if(!inc.contains(cl) && !cl.isOWLThing()){ + for(OWLClass sub : SetUtils.union(classifier.getDescendantClasses(cl))){ + if(!sub.isOWLNothing() && !inc.contains(sub)){ + entailmentsBefore.add(factory.getOWLSubClassAxiom(sub, cl)); + } + } + } + } + + + manager.applyChanges(changes); + + classifier.classify(); + inc = classifier.getInconsistentClasses(); + + for(OWLDescription cl : ontology.getClassesInSignature()){ + if(!inc.contains(cl) && !cl.isOWLThing()){ + for(OWLClass sub : SetUtils.union(classifier.getDescendantClasses(cl))){ + if(!sub.isOWLNothing() && !inc.contains(sub)){ + entailmentsAfter.add(factory.getOWLSubClassAxiom(sub, cl)); + } + } + } + } + lostEntailments = SetUtils.difference(entailmentsBefore, entailmentsAfter); + addedEntailents = SetUtils.difference(entailmentsAfter, entailmentsBefore); + impact.add(0, lostEntailments); + impact.add(1, addedEntailents); + manager.applyChanges(getInverseChanges(changes)); + + } catch (OWLReasonerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (OWLOntologyChangeException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return impact; + } + + public Set<OWLAxiom> computeStructuralImpact(List<OWLOntologyChange> changes) {reasoner.refresh(); + Set<OWLAxiom> possibleLosts = new HashSet<OWLAxiom>(); + Set<OWLAxiom> realLosts = new HashSet<OWLAxiom>(); + OWLAxiom axiom; + for(OWLOntologyChange change : changes){ + if(change instanceof RemoveAxiom){ + axiom = change.getAxiom(); + if (axiom instanceof OWLSubClassAxiom) { + OWLSubClassAxiom subAx = (OWLSubClassAxiom) axiom; + if (subAx.getSubClass() instanceof OWLClass && subAx.getSuperClass() instanceof OWLClass) { + OWLClass sub = (OWLClass) subAx.getSubClass(); + OWLClass sup = (OWLClass) subAx.getSuperClass(); + + for (OWLClass desc : SetUtils.union(reasoner.getDescendantClasses(sub))) { + + for (OWLClass anc : SetUtils.union(reasoner.getAncestorClasses(sup))) { + + if (!anc.equals(factory.getOWLThing()) && !desc.equals(factory.getOWLNothing())) { + OWLSubClassAxiom ax = factory.getOWLSubClassAxiom(desc, anc); + possibleLosts.add(ax); + } + } + } + } + }else if (axiom instanceof OWLDisjointClassesAxiom) { + Set<OWLDescription> disjointClasses = ((OWLDisjointClassesAxiom) axiom).getDescriptions(); + boolean complex = false; + for (OWLDescription dis : disjointClasses) { + if (dis.isAnonymous()) { + complex = true; + break; + } + } + if (!complex) { + + List<OWLDescription> disjoints = new ArrayList<OWLDescription>(disjointClasses); + + + + for (OWLDescription dis : new ArrayList<OWLDescription>(disjoints)) { + if (!dis.equals(factory.getOWLNothing())) { + disjoints.remove(dis); + Set<? extends OWLDescription> descendants = SetUtils.union(reasoner.getDescendantClasses(dis.asOWLClass())); + + descendants.removeAll(reasoner.getEquivalentClasses(factory.getOWLNothing())); +// if (enableImpactUnsat) { +// descendants.addAll(((OWLClass) dis).getSubClasses(ontology)); +// } + for (OWLDescription desc1 : descendants) { + + if (!desc1.equals(factory.getOWLNothing())) { + if (enableImpactUnsat || !reasoner.getEquivalentClasses((desc1)).contains(factory.getOWLNothing())) { + for (OWLDescription desc2 : disjoints) { + + if (!desc2.equals(desc1)) { + Set<OWLDescription> newDis = new HashSet<OWLDescription>(); + newDis.add(desc1); + newDis.add(desc2); + OWLDisjointClassesAxiom ax = factory.getOWLDisjointClassesAxiom(newDis); + possibleLosts.add(ax); + } + } + } + } + } + + disjoints.add(dis); + + + } + } +// return result; + } + } + else if (axiom instanceof OWLObjectPropertyDomainAxiom) { + OWLObjectPropertyDomainAxiom pd = (OWLObjectPropertyDomainAxiom) axiom; + + if (pd.getDomain() instanceof OWLClass) { + OWLClass dom = (OWLClass) pd.getDomain(); + Set<OWLClass> superClasses = SetUtils.union(reasoner.getSuperClasses(dom)); + for (OWLClass sup : superClasses) { + + OWLObjectPropertyDomainAxiom ax = factory.getOWLObjectPropertyDomainAxiom( pd.getProperty(), sup); + possibleLosts.add(ax); + } + } + } + else if (axiom instanceof OWLDataPropertyDomainAxiom) { + OWLDataPropertyDomainAxiom pd = (OWLDataPropertyDomainAxiom) axiom; + + if (pd.getDomain() instanceof OWLClass) { + OWLClass dom = (OWLClass) pd.getDomain(); + Set<OWLClass> superClasses = SetUtils.union(reasoner.getSuperClasses(dom)); + for (OWLClass sup : superClasses) { + + OWLDataPropertyDomainAxiom ax = factory.getOWLDataPropertyDomainAxiom( pd.getProperty(), sup); + possibleLosts.add(ax); + } + } + } + else if (axiom instanceof OWLObjectPropertyRangeAxiom) { + OWLObjectPropertyRangeAxiom pd = (OWLObjectPropertyRangeAxiom) axiom; + + if (pd.getRange() instanceof OWLClass) { + OWLClass ran = (OWLClass) pd.getRange(); + Set<OWLClass> superClasses = SetUtils.union(reasoner.getSuperClasses(ran)); + for (OWLClass sup : superClasses) { + + OWLObjectPropertyRangeAxiom ax = factory.getOWLObjectPropertyRangeAxiom(pd.getProperty(), sup); + possibleLosts.add(ax); + } + } + } + } + + } + + for(OWLAxiom ax : possibleLosts){ + try { + manager.applyChanges(changes); + if(!reasoner.isEntailed(ax)){ + realLosts.add(ax); + } + manager.applyChanges(getInverseChanges(changes)); + } catch (OWLOntologyChangeException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + return realLosts; + } + + private List<OWLOntologyChange> getInverseChanges(List<OWLOntologyChange> changes){ + List<OWLOntologyChange> inverseChanges = new ArrayList<OWLOntologyChange>(changes.size()); + for(OWLOntologyChange change : changes){ + if(change instanceof RemoveAxiom){ + inverseChanges.add(new AddAxiom(change.getOntology(), change.getAxiom())); + } else { + inverseChanges.add(new RemoveAxiom(change.getOntology(), change.getAxiom())); + } + } + return inverseChanges; + } + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -11,7 +11,10 @@ import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.OREManagerListener; +import org.dllearner.tools.ore.RepairManager; +import org.dllearner.tools.ore.RepairManagerListener; import org.mindswap.pellet.owlapi.PelletReasonerFactory; +import org.mindswap.pellet.owlapi.Reasoner; import org.semanticweb.owl.apibinding.OWLManager; import org.semanticweb.owl.inference.OWLReasoner; import org.semanticweb.owl.inference.OWLReasonerException; @@ -51,10 +54,10 @@ import org.semanticweb.owl.model.OWLQuantifiedRestriction; import org.semanticweb.owl.model.RemoveAxiom; -public class RootFinder implements OWLDescriptionVisitor, OREManagerListener, OWLOntologyChangeListener{ +public class RootFinder implements OWLDescriptionVisitor, OREManagerListener, OWLOntologyChangeListener, RepairManagerListener{ private OWLOntologyManager manager; - private OWLReasoner reasoner; + private Reasoner reasoner; private OWLReasonerFactory reasonerFactory; private Set<OWLClass> depend2Classes; @@ -67,7 +70,7 @@ private boolean ontologyChanged = true; - int depth; + private int depth; private Map<Integer, Set<OWLObjectAllRestriction>> depth2UniversalRestrictionPropertyMap; private Map<Integer, Set<OWLObjectPropertyExpression>> depth2ExistsRestrictionPropertyMap; @@ -96,7 +99,8 @@ parent2Children = new HashMap<OWLClass, Set<OWLClass>>(); OREManager.getInstance().addListener(this); - OREManager.getInstance().getPelletReasoner().getOWLOntologyManager().addOntologyChangeListener(this); + RepairManager.getInstance(OREManager.getInstance()).addListener(this); +// OREManager.getInstance().getPelletReasoner().getOWLOntologyManager().addOntologyChangeListener(this); } public Set<OWLClass> getRootClasses(){ @@ -121,6 +125,14 @@ } public void computeRootDerivedClasses(){ +// this.manager = OWLManager.createOWLOntologyManager(); +// try { +// this.ontology = manager.createOntology(URI.create("all"), reasoner.getLoadedOntologies()); +// } catch (OWLOntologyCreationException e) { +// e.printStackTrace(); +// } catch (OWLOntologyChangeException e) { +// e.printStackTrace(); +// } rootClasses.clear(); derivedClasses.clear(); depend2Classes.clear(); @@ -136,7 +148,7 @@ } private void computePossibleRoots(){ - try {derivedClasses.addAll(reasoner.getInconsistentClasses()); + derivedClasses.addAll(reasoner.getInconsistentClasses()); for(OWLClass cls : derivedClasses){ reset(); for(OWLDescription equi : cls.getEquivalentClasses(ontology)){ @@ -160,9 +172,7 @@ rootClasses.add(cls); } } - } catch (OWLReasonerException e) { - e.printStackTrace(); - } + } private void pruneRoots() { @@ -222,7 +232,7 @@ private void checkObjectRestriction(OWLQuantifiedRestriction<OWLObjectPropertyExpression,OWLDescription> restr){ OWLDescription filler = restr.getFiller(); - try { + if(filler.isAnonymous()){ depth++; filler.accept(this); @@ -237,10 +247,8 @@ } addExistsRestrictionProperty(restr.getProperty()); } - } catch (OWLReasonerException e) { - e.printStackTrace(); - } + } private void addExistsRestrictionProperty(OWLObjectPropertyExpression expr){ @@ -265,19 +273,17 @@ @Override public void visit(OWLClass cls) { - try { + if(!reasoner.isSatisfiable(cls)) { depend2Classes.add(cls); } - } catch (OWLReasonerException e) { - e.printStackTrace(); - } + } @Override public void visit(OWLObjectIntersectionOf and) { - try { + for(OWLDescription op : and.getOperands()) { if(op.isAnonymous()){ op.accept(this); @@ -285,15 +291,13 @@ depend2Classes.add(op.asOWLClass()); } } - } catch (OWLReasonerException e) { - e.printStackTrace(); - } + } @Override public void visit(OWLObjectUnionOf or) { - try { + for(OWLDescription op : or.getOperands()){ if(reasoner.isSatisfiable(op)){ return; @@ -306,9 +310,7 @@ depend2Classes.add(op.asOWLClass()); } } - } catch (OWLReasonerException e) { - e.printStackTrace(); - } + } @Override @@ -399,4 +401,16 @@ ontologyChanged = true; } + + @Override + public void repairPlanChanged() { + // TODO Auto-generated method stub + + } + + @Override + public void repairPlanExecuted(List<OWLOntologyChange> changes) { + ontologyChanged = true; + + } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -306,7 +306,7 @@ public Set<OWLAxiom> getSourceAxioms(OWLAxiom axiom){ Map<OWLAxiom, Set<OWLAxiom>> axioms2SourceMap = oPlus.getAxiomsMap(); Set<OWLAxiom> sourceAxioms = new HashSet<OWLAxiom>(); - + System.out.println(axiom); for(OWLAxiom ax : axioms2SourceMap.get(axiom)){ if(ontology.containsAxiom(ax)){ sourceAxioms.add(ax); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/recent.txt =================================================================== (Binary files differ) Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTable.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -11,6 +11,7 @@ import java.util.List; import javax.swing.AbstractCellEditor; +import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JTable; import javax.swing.UIManager; @@ -41,21 +42,22 @@ public ExplanationTable(Explanation exp, OWLClass cl) { - repMan = RepairManager.getRepairManager(OREManager.getInstance()); + repMan = RepairManager.getInstance(OREManager.getInstance()); repMan.addListener(this); setBackground(Color.WHITE); setHighlighters(HighlighterFactory.createAlternateStriping()); setAutoResizeMode(JTable.AUTO_RESIZE_OFF); setModel(new ExplanationTableModel(exp, cl)); - TableColumn column4 = getColumn(3); - column4.setCellRenderer(new ButtonCellRenderer()); - column4.setCellEditor(new ButtonCellEditor()); - column4.setResizable(false); + TableColumn column5 = getColumn(4); + column5.setCellRenderer(new ButtonCellRenderer()); + column5.setCellEditor(new ButtonCellEditor()); + column5.setResizable(false); setRowHeight(getRowHeight() + 4); getColumn(1).setMaxWidth(30); getColumn(2).setMaxWidth(30); - getColumn(3).setMaxWidth(80); + getColumn(3).setMaxWidth(30); + getColumn(4).setMaxWidth(30); getSelectionModel().addListSelectionListener( new ListSelectionListener() { @@ -133,7 +135,8 @@ setForeground(table.getForeground()); setBackground(UIManager.getColor("Button.background")); } - setText( (value ==null) ? "" : value.toString() ); + setIcon(new ImageIcon("src/dl-learner/org/dllearner/tools/ore/Edit16.gif")); + setText(""); return this; } @@ -164,7 +167,7 @@ public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { text = (value == null) ? "" : value.toString(); - editButton.setText(text); + editButton.setText(""); return editButton; } @@ -182,7 +185,7 @@ @Override public void repairPlanExecuted(List<OWLOntologyChange> changes) { - // TODO Auto-generated method stub + repaint(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2009-09-02 10:19:41 UTC (rev 1834) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2009-09-05 08:02:35 UTC (rev 1835) @@ -7,8 +7,11 @@ import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.RepairManager; import org.dllearner.tools.ore.explanation.Explanation; +import org.semanticweb.owl.model.AddAxiom; import org.semanticweb.owl.model.OWLAxiom; import org.semanticweb.owl.model.OWLClass; +import org.semanticweb.owl.model.OWLOntology; +import org.semanticweb.owl.model.RemoveAxiom; public class ExplanationTableModel extends AbstractTableModel { @@ -22,18 +25,20 @@ private ImpactManager impMan; private RepairManager repMan; private OWLClass unsat; + private OWLOntology ont; public ExplanationTableModel(Explanation exp, OWLClass cl){ this.exp = exp; this.expMan = ExplanationManager.getInstance(OREM... [truncated message content] |
From: <lor...@us...> - 2009-09-06 15:28:12
|
Revision: 1837 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1837&view=rev Author: lorenz_b Date: 2009-09-06 15:28:00 +0000 (Sun, 06 Sep 2009) Log Message: ----------- added simple explanation dialog for impact axioms Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java trunk/src/dl-learner/org/dllearner/tools/ore/recent.txt trunk/src/dl-learner/org/dllearner/tools/ore/ui/ClassesTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionLabel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairDialog.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatsPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBarSimulator.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/InconsistencyExplanationPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/KnowledgeSourcePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/SimpleExplanationTable.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/SimpleExplanationTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/ trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/AddPropertyAssertionMenuItem.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/AddToClassMenuItem.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/MoveFromClassToMenuItem.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/MoveToClassFromMenuItem.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/RemoveAllPropertyAssertionsMenuItem.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/RemoveAllPropertyAssertionsNotToMenuItem.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/RemoveAllPropertyAssertionsToMenuItem.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/item/RemoveFromClassMenuItem.java Removed Paths: ------------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionMenuItem.java Modified: trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java =================================================================== --- trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java 2009-09-05 14:13:56 UTC (rev 1836) +++ trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -310,7 +310,7 @@ } else if(change instanceof AddAxiom){ classInstancesPos.get(desc).add(ind); } - } else if(axiom instanceof OWLObjectPropertyAssertionAxiom){System.out.println(axiom); + } else if(axiom instanceof OWLObjectPropertyAssertionAxiom){ Individual obj = OWLAPIConverter.convertIndividual(((OWLObjectPropertyAssertionAxiom)axiom).getObject()); Individual sub = OWLAPIConverter.convertIndividual(((OWLObjectPropertyAssertionAxiom)axiom).getSubject()); ObjectProperty prop = OWLAPIConverter.convertObjectProperty(((OWLObjectPropertyAssertionAxiom)axiom).getProperty().asOWLObjectProperty()); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-09-05 14:13:56 UTC (rev 1836) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -51,7 +51,7 @@ private ExplanationManager(OREManager oreMan) { OREManager.getInstance().addListener(this); - this.reasoner = oreMan.getPelletReasoner().getReasoner(); + this.reasoner = oreMan.getReasoner().getReasoner(); this.manager = reasoner.getManager(); this.ontology = reasoner.getLoadedOntologies().iterator().next(); @@ -119,6 +119,14 @@ return explanations; } + public Set<Explanation> getEntailmentExplanations(OWLAxiom entailment){ + boolean before = gen.isLaconicMode(); + gen.setComputeLaconicExplanations(false); + Set<Explanation> explanations = gen.getExplanations(entailment); + gen.setComputeLaconicExplanations(before); + return explanations; + } + public List<Map<OWLAxiom, Integer>> getOrdering(Explanation exp){ List<Map<OWLAxiom, Integer>> orderedAxioms = orderingMap.get(exp); if(orderedAxioms == null){ @@ -238,8 +246,8 @@ @Override public void activeOntologyChanged() { - ontology = OREManager.getInstance().getPelletReasoner().getOWLAPIOntologies(); - reasoner = OREManager.getInstance().getPelletReasoner().getReasoner(); + ontology = OREManager.getInstance().getReasoner().getOWLAPIOntologies(); + reasoner = OREManager.getInstance().getReasoner().getReasoner(); gen = new CachedExplanationGenerator(ontology, reasoner); orderingMap.clear(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2009-09-05 14:13:56 UTC (rev 1836) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -28,7 +28,7 @@ private ImpactManager(OREManager oreMan) { this.oreMan = oreMan; - this.reasoner = oreMan.getPelletReasoner().getReasoner(); + this.reasoner = oreMan.getReasoner().getReasoner(); this.ontology = reasoner.getLoadedOntologies().iterator().next(); this.manager = reasoner.getManager(); @@ -38,7 +38,7 @@ selectedAxioms = new ArrayList<OWLAxiom>(); listeners = new ArrayList<ImpactManagerListener>(); - lostEntailmentsChecker = new LostEntailmentsChecker(ontology, oreMan.getPelletReasoner().getClassifier(), manager); + lostEntailmentsChecker = new LostEntailmentsChecker(ontology, oreMan.getReasoner().getClassifier(), manager); RepairManager.getInstance(oreMan).addListener(this); oreMan.addListener(this); @@ -121,10 +121,10 @@ @Override public void activeOntologyChanged() { - this.reasoner = oreMan.getPelletReasoner().getReasoner(); + this.reasoner = oreMan.getReasoner().getReasoner(); this.ontology = reasoner.getLoadedOntologies().iterator().next(); this.manager = reasoner.getManager(); - lostEntailmentsChecker = new LostEntailmentsChecker(ontology, oreMan.getPelletReasoner().getClassifier(), manager); + lostEntailmentsChecker = new LostEntailmentsChecker(ontology, oreMan.getReasoner().getClassifier(), manager); selectedAxioms.clear(); lostEntailments.clear(); addedEntailments.clear(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-09-05 14:13:56 UTC (rev 1836) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -24,7 +24,6 @@ import org.dllearner.core.owl.Individual; import org.dllearner.core.owl.Intersection; import org.dllearner.core.owl.NamedClass; -import org.dllearner.core.owl.ObjectQuantorRestriction; import org.dllearner.core.owl.Union; import org.dllearner.kb.OWLFile; import org.dllearner.kb.sparql.SparqlKnowledgeSource; @@ -36,26 +35,25 @@ public class OREManager { - private static OREManager instance; - + private ComponentManager cm; - - private PelletReasoner pelletReasoner; + + private PelletReasoner reasoner; private ClassLearningProblem lp; private CELOE la; private KnowledgeSource ks; - + private String baseURI; private Map<String, String> prefixes; - + private NamedClass currentClass2Learn; private EvaluatedDescriptionClass learnedClassDescription; - + private double noisePercentage; private int maxExecutionTimeInSeconds = 10; private int maxNrOfResults = 10; - + private List<OREManagerListener> listeners; private OntologyModifier modifier; @@ -98,7 +96,7 @@ public void setLearningProblem(){ - lp = cm.learningProblem(ClassLearningProblem.class, pelletReasoner); + lp = cm.learningProblem(ClassLearningProblem.class, reasoner); try { lp.getConfigurator().setClassToDescribe(getClass2LearnAsURL()); @@ -112,7 +110,7 @@ public void setLearningAlgorithm(){ try { - la = cm.learningAlgorithm(CELOE.class, lp, pelletReasoner); + la = cm.learningAlgorithm(CELOE.class, lp, reasoner); la.getConfigurator().setMaxExecutionTimeInSeconds(maxExecutionTimeInSeconds); la.getConfigurator().setUseNegation(false); la.getConfigurator().setNoisePercentage(noisePercentage); @@ -136,25 +134,28 @@ public void initPelletReasoner(){ - pelletReasoner = cm.reasoner(PelletReasoner.class, ks); + reasoner = cm.reasoner(PelletReasoner.class, ks); try { - pelletReasoner.init(); + reasoner.init(); } catch (ComponentInitException e) { // TODO Auto-generated catch block e.printStackTrace(); } - pelletReasoner.loadOntologies(); - baseURI = pelletReasoner.getBaseURI(); - prefixes = pelletReasoner.getPrefixes(); - modifier = new OntologyModifier(pelletReasoner); + reasoner.loadOntologies(); + baseURI = reasoner.getBaseURI(); + prefixes = reasoner.getPrefixes(); + modifier = new OntologyModifier(reasoner); fireActiveOntologyChanged(); } public void loadOntology(){ - pelletReasoner.loadOntologies(); - + reasoner.loadOntologies(); } + public void makeOWAToCWA(){ + reasoner.dematerialise(); + } + public void addListener(OREManagerListener listener){ listeners.add(listener); } @@ -164,11 +165,11 @@ } public boolean consistentOntology() throws InconsistentOntologyException{ - return pelletReasoner.isConsistent(); + return reasoner.isConsistent(); } - public PelletReasoner getPelletReasoner(){ - return pelletReasoner; + public PelletReasoner getReasoner(){ + return reasoner; } private void fireActiveOntologyChanged(){ @@ -176,18 +177,15 @@ listener.activeOntologyChanged(); } } - public OntologyModifier getModifier() { return modifier; } - public EvaluatedDescriptionClass getNewClassDescription() { return learnedClassDescription; } - public String getBaseURI() { return baseURI; } @@ -209,7 +207,7 @@ } public SortedSet<Individual> getPositiveFailureExamples(){ - SortedSet<Individual> posNotCovered = pelletReasoner.getIndividuals(currentClass2Learn); + SortedSet<Individual> posNotCovered = reasoner.getIndividuals(currentClass2Learn); posNotCovered.removeAll(learnedClassDescription.getCoveredInstances()); return posNotCovered; } @@ -233,9 +231,7 @@ public int getMaxNrOfResults(){ return maxNrOfResults; } - - - + /** * Sets the class that has to be learned. * @param oldClass class that is chosen to be (re)learned @@ -281,9 +277,6 @@ return la; } - - - /** * Retrieves description parts that might cause inconsistency - for negative examples only. * @param ind @@ -294,7 +287,7 @@ Set<Description> criticals = new HashSet<Description>(); List<Description> children = desc.getChildren(); - if(pelletReasoner.hasType(desc, ind)){ + if(reasoner.hasType(desc, ind)){ if(children.size() >= 2){ @@ -304,7 +297,7 @@ } } else if(desc instanceof Union){ for(Description d: children){ - if(pelletReasoner.hasType(d, ind)){ + if(reasoner.hasType(d, ind)){ criticals.addAll(getNegCriticalDescriptions(ind, d)); } } @@ -328,7 +321,7 @@ List<Description> children = desc.getChildren(); // try { - if(pelletReasoner.hasType(desc, ind)){ + if(reasoner.hasType(desc, ind)){ if(children.size() >= 2){ @@ -344,14 +337,14 @@ } else if(desc instanceof Union){ criticals.add(new JLabel("(")); for(int i = 0; i<children.size()-1; i++){ - if(pelletReasoner.hasType(desc.getChild(i), ind)){ + if(reasoner.hasType(desc.getChild(i), ind)){ criticals.addAll(descriptionToJLabelNeg(ind, desc.getChild(i))); } else{ criticals.add(new JLabel(desc.getChild(i).toManchesterSyntaxString(baseURI, prefixes))); } criticals.add(new JLabel("or")); } - if(pelletReasoner.hasType(desc.getChild(children.size()-1), ind)){ + if(reasoner.hasType(desc.getChild(children.size()-1), ind)){ criticals.addAll(descriptionToJLabelNeg(ind, desc.getChild(children.size()-1))); } else{ criticals.add(new JLabel(desc.getChild(children.size()-1).toManchesterSyntaxString(baseURI, prefixes))); @@ -387,7 +380,7 @@ List<Description> children = desc.getChildren(); // try { - if(!pelletReasoner.hasType(desc, ind)){ + if(!reasoner.hasType(desc, ind)){ if(children.size() >= 2){ @@ -402,14 +395,14 @@ } else if(desc instanceof Intersection){ criticals.add(new JLabel("(")); for(int i = 0; i<children.size()-1; i++){ - if(!pelletReasoner.hasType(desc.getChild(i), ind)){ + if(!reasoner.hasType(desc.getChild(i), ind)){ criticals.addAll(descriptionToJLabelPos(ind, desc.getChild(i))); } else{ criticals.add(new JLabel(desc.getChild(i).toManchesterSyntaxString(baseURI, prefixes))); } criticals.add(new JLabel("and")); } - if(!pelletReasoner.hasType(desc.getChild(children.size()-1), ind)){ + if(!reasoner.hasType(desc.getChild(children.size()-1), ind)){ criticals.addAll(descriptionToJLabelPos(ind, desc.getChild(children.size()-1))); } else{ criticals.add(new JLabel(desc.getChild(children.size()-1).toManchesterSyntaxString(baseURI, prefixes))); @@ -435,9 +428,9 @@ * @param objRestr * @param ind */ - public Set<Individual> getIndividualsInPropertyRange(ObjectQuantorRestriction objRestr, Individual ind){ + public Set<Individual> getIndividualsInPropertyRange(Description desc, Individual ind){ - Set<Individual> individuals = pelletReasoner.getIndividuals(objRestr.getChild(0)); + Set<Individual> individuals = reasoner.getIndividuals(desc); individuals.remove(ind); return individuals; @@ -448,23 +441,19 @@ * @param objRestr * @param ind */ - public Set<Individual> getIndividualsNotInPropertyRange(ObjectQuantorRestriction objRestr, Individual ind){ + public Set<Individual> getIndividualsNotInPropertyRange(Description desc, Individual ind){ Set<Individual> allIndividuals = new HashSet<Individual>(); - for(Individual i : pelletReasoner.getIndividuals()){ + for(Individual i : reasoner.getIndividuals()){ -// try { - if(!pelletReasoner.hasType(objRestr.getChild(0), i)){ + if(!reasoner.hasType(desc, i)){ allIndividuals.add(i); } -// } catch (ReasoningMethodUnsupportedException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } + } - + allIndividuals.remove(ind); return allIndividuals; } @@ -476,8 +465,8 @@ */ public Set<NamedClass> getpossibleClassesMoveTo(Individual ind){ Set<NamedClass> moveClasses = new HashSet<NamedClass>(); - for(NamedClass nc : pelletReasoner.getNamedClasses()){ - if(!pelletReasoner.hasType(nc, ind)){ + for(NamedClass nc : reasoner.getNamedClasses()){ + if(!reasoner.hasType(nc, ind)){ moveClasses.add(nc); } } @@ -493,8 +482,8 @@ */ public Set<NamedClass> getpossibleClassesMoveFrom(Individual ind){ Set<NamedClass> moveClasses = new HashSet<NamedClass>(); - for(NamedClass nc : pelletReasoner.getNamedClasses()){ - if(pelletReasoner.hasType(nc, ind)){ + for(NamedClass nc : reasoner.getNamedClasses()){ + if(reasoner.hasType(nc, ind)){ moveClasses.add(nc); } } @@ -502,8 +491,7 @@ return moveClasses; } - - + /** * Get the complement classes where individual is asserted to. * @param desc @@ -513,19 +501,16 @@ Set<NamedClass> complements = new HashSet<NamedClass>(); - for(NamedClass nc : pelletReasoner.getNamedClasses()){ + for(NamedClass nc : reasoner.getNamedClasses()){ if(!(nc.toString().endsWith("Thing"))){ - if(pelletReasoner.hasType(nc, ind)){ + if(reasoner.hasType(nc, ind)){ if(modifier.isComplement(desc, nc)){ complements.add(nc); } } } - } - - + } return complements; } - } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java 2009-09-05 14:13:56 UTC (rev 1836) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -35,8 +35,9 @@ import org.dllearner.core.owl.Negation; import org.dllearner.core.owl.ObjectProperty; import org.dllearner.core.owl.ObjectPropertyAssertion; -import org.dllearner.core.owl.ObjectQuantorRestriction; +import org.dllearner.core.owl.ObjectPropertyExpression; import org.dllearner.reasoning.PelletReasoner; +import org.dllearner.utilities.owl.OWLAPIConverter; import org.dllearner.utilities.owl.OWLAPIDescriptionConvertVisitor; import org.semanticweb.owl.io.RDFXMLOntologyFormat; import org.semanticweb.owl.model.AddAxiom; @@ -188,8 +189,8 @@ individualOWLAPI.accept(remover); changes.addAll(remover.getChanges()); try { + reasoner.updateCWAOntology(changes); manager.applyChanges(changes); - saveOntology(); return changes; } catch (OWLOntologyChangeException e) { // TODO Auto-generated catch block @@ -310,12 +311,12 @@ * @param objSome the property which has to be removed * @return changes that have been done */ - public List<OWLOntologyChange> deleteObjectProperty(Individual ind, ObjectQuantorRestriction objSome){ + public List<OWLOntologyChange> deleteObjectProperty(Individual ind, ObjectPropertyExpression property){ List<OWLOntologyChange> changes = new LinkedList<OWLOntologyChange>(); - OWLIndividual individualOWLAPI = factory.getOWLIndividual(URI.create(ind.getName())); - OWLObjectProperty propertyOWLAPI = factory.getOWLObjectProperty(URI.create(objSome.getRole().getName())); + OWLIndividual individualOWLAPI = OWLAPIConverter.getOWLAPIIndividual(ind); + OWLObjectProperty propertyOWLAPI = factory.getOWLObjectProperty(URI.create(property.getName())); Set<OWLObjectPropertyAssertionAxiom> properties = ontology.getObjectPropertyAssertionAxioms(individualOWLAPI); Set<OWLInverseObjectPropertiesAxiom> invProperties = ontology.getInverseObjectPropertyAxioms(propertyOWLAPI); @@ -370,18 +371,18 @@ * @param object * @return changes that have been done */ - public List<OWLOntologyChange> removeObjectPropertyAssertion(Individual subject, ObjectQuantorRestriction objSome, Individual object){ + public List<OWLOntologyChange> removeObjectPropertyAssertion(Individual subject, ObjectPropertyExpression property, Individual object){ List<OWLOntologyChange> changes = new LinkedList<OWLOntologyChange>(); OWLIndividual subjectOWLAPI = factory.getOWLIndividual(URI.create(subject.getName())); OWLIndividual objectOWLAPI = factory.getOWLIndividual(URI.create(object.getName())); - OWLObjectProperty propertyOWLAPI = factory.getOWLObjectProperty(URI.create(objSome.getRole().getName())); + OWLObjectProperty propertyOWLAPI = factory.getOWLObjectProperty(URI.create(property.getName())); Set<OWLObjectPropertyAssertionAxiom> properties = ontology.getObjectPropertyAssertionAxioms(subjectOWLAPI); - + RemoveAxiom remove = null; - for(OWLObjectPropertyAssertionAxiom o :properties){ + for(OWLObjectPropertyAssertionAxiom o :properties){System.out.println(o); if((o.getProperty().equals(propertyOWLAPI)) && (o.getSubject().equals(subjectOWLAPI)) && (o.getObject().equals(objectOWLAPI))){ remove = new RemoveAxiom(ontology, o); } @@ -395,9 +396,9 @@ if(remove != null){ reasoner.updateCWAOntology(changes); manager.applyChange(remove); - + return changes; } - return changes; + } catch (OWLOntologyChangeException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -407,6 +408,38 @@ } + public List<OWLOntologyChange> removeAllObjectPropertyAssertions(Individual subject, ObjectPropertyExpression property,Set<Individual> objects){ + List<OWLOntologyChange> changes = new LinkedList<OWLOntologyChange>(); + + OWLIndividual subjectOWLAPI = factory.getOWLIndividual(URI.create(subject.getName())); + OWLObjectProperty propertyOWLAPI = factory.getOWLObjectProperty(URI.create(property.getName())); + Set<OWLIndividual> objectsOWLAPI = new HashSet<OWLIndividual>(); + for(Individual ind : objects){ + objectsOWLAPI.add(OWLAPIConverter.getOWLAPIIndividual(ind)); + } + + + Set<OWLObjectPropertyAssertionAxiom> properties = ontology.getObjectPropertyAssertionAxioms(subjectOWLAPI); + + for(OWLObjectPropertyAssertionAxiom o :properties){ + if((o.getProperty().equals(propertyOWLAPI)) && objectsOWLAPI.contains(o.getObject())){ + changes.add(new RemoveAxiom(ontology, o)); + } + } + + try { + reasoner.updateCWAOntology(changes); + manager.applyChanges(changes); + return changes; + + + } catch (OWLOntologyChangeException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return changes; + } + /** * Adds an object property assertion to the ontology. * @param subInd the individual which is subject in the objectProperty @@ -414,13 +447,13 @@ * @param objInd the individual which is object in the objectProperty * @return changes that have been done */ - public List<OWLOntologyChange> addObjectProperty(Individual subInd, ObjectQuantorRestriction objSome, Individual objInd){ + public List<OWLOntologyChange> addObjectProperty(Individual subInd, ObjectPropertyExpression property, Individual objInd){ List<OWLOntologyChange> changes = new LinkedList<OWLOntologyChange>(); OWLIndividual subjectOWLAPI = factory.getOWLIndividual(URI.create(subInd.getName())); OWLIndividual objectOWLAPI = factory.getOWLIndividual(URI.create(objInd.getName())); - OWLObjectProperty propertyOWLAPI = factory.getOWLObjectProperty(URI.create(objSome.getRole().getName())); + OWLObjectProperty propertyOWLAPI = factory.getOWLObjectProperty(URI.create(property.getName())); OWLObjectPropertyAssertionAxiom objAssertion = factory.getOWLObjectPropertyAssertionAxiom(subjectOWLAPI, propertyOWLAPI, objectOWLAPI); AddAxiom axiom = new AddAxiom(ontology, objAssertion); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java 2009-09-05 14:13:56 UTC (rev 1836) +++ trunk/src/dl-learner/org/dllearner/tools/ore/RepairManager.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -26,7 +26,7 @@ private Stack<List<OWLOntologyChange>> redoStack; private RepairManager(OREManager oreMan){ - this.reasoner = oreMan.getPelletReasoner().getReasoner(); + this.reasoner = oreMan.getReasoner().getReasoner(); this.manager = reasoner.getManager(); listeners = new ArrayList<RepairManagerListener>(); @@ -111,7 +111,7 @@ } - private List<OWLOntologyChange> getInverseChanges(List<OWLOntologyChange> changes){ + public List<OWLOntologyChange> getInverseChanges(List<OWLOntologyChange> changes){ List<OWLOntologyChange> inverseChanges = new ArrayList<OWLOntologyChange>(changes.size()); for(OWLOntologyChange change : changes){ if(change instanceof RemoveAxiom){ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java 2009-09-05 14:13:56 UTC (rev 1836) +++ trunk/src/dl-learner/org/dllearner/tools/ore/TaskManager.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -34,6 +34,10 @@ this.dialog = dialog; } + public JDialog getDialog(){ + return dialog; + } + public void setCurrentTask(SwingWorker<?, ?> task){ this.currentTask = task; } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java 2009-09-05 14:13:56 UTC (rev 1836) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -1,6 +1,7 @@ package org.dllearner.tools.ore.explanation; import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -24,6 +25,7 @@ import org.semanticweb.owl.model.OWLSubClassAxiom; import org.semanticweb.owl.model.RemoveAxiom; +import com.clarkparsia.explanation.PelletExplanation; import com.clarkparsia.modularity.IncrementalClassifier; public class LostEntailmentsChecker { @@ -62,6 +64,11 @@ entailmentsBefore.add(factory.getOWLSubClassAxiom(sub, cl)); } } + for(OWLClass equ : classifier.getEquivalentClasses(cl)){ + if(!equ.isOWLNothing() && ! inc.contains(equ)){ + entailmentsBefore.add(factory.getOWLEquivalentClassesAxiom(equ, cl)); + } + } } } @@ -79,6 +86,11 @@ } } } + for(OWLClass equ : classifier.getEquivalentClasses(cl)){ + if(!equ.isOWLNothing() && ! inc.contains(equ)){ + entailmentsAfter.add(factory.getOWLEquivalentClassesAxiom(equ, cl)); + } + } } lostEntailments = SetUtils.difference(entailmentsBefore, entailmentsAfter); addedEntailents = SetUtils.difference(entailmentsAfter, entailmentsBefore); @@ -215,7 +227,9 @@ } for(OWLAxiom ax : possibleLosts){ - try { + try {System.out.println(ax + " is entailed " + reasoner.isEntailed(ax)); + PelletExplanation exp = new PelletExplanation(manager, Collections.singleton(ontology), false); + System.out.println(exp.getEntailmentExplanation(ax)); manager.applyChanges(changes); if(!reasoner.isEntailed(ax)){ realLosts.add(ax); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java 2009-09-05 14:13:56 UTC (rev 1836) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/RootFinder.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -80,7 +80,7 @@ public RootFinder(){ this.manager = OWLManager.createOWLOntologyManager(); - this.reasoner = OREManager.getInstance().getPelletReasoner().getReasoner(); + this.reasoner = OREManager.getInstance().getReasoner().getReasoner(); this.reasonerFactory = new PelletReasonerFactory(); try { this.ontology = manager.createOntology(URI.create("all"), reasoner.getLoadedOntologies()); @@ -381,7 +381,7 @@ @Override public void activeOntologyChanged() { this.manager = OWLManager.createOWLOntologyManager(); - this.reasoner = OREManager.getInstance().getPelletReasoner().getReasoner(); + this.reasoner = OREManager.getInstance().getReasoner().getReasoner(); this.reasonerFactory = new PelletReasonerFactory(); try { this.ontology = manager.createOntology(URI.create("all"), reasoner.getLoadedOntologies()); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/recent.txt =================================================================== (Binary files differ) Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ClassesTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ClassesTable.java 2009-09-05 14:13:56 UTC (rev 1836) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ClassesTable.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -43,10 +43,6 @@ return tip; } - public void clear(){ - ((ClassesTableModel)getModel()).clear(); - } - public void addClasses(Set<NamedClass> classes){ ((ClassesTableModel)getModel()).addClasses(classes); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionLabel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionLabel.java 2009-09-05 14:13:56 UTC (rev 1836) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionLabel.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -31,6 +31,7 @@ import javax.swing.JLabel; import javax.swing.JMenu; +import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.ToolTipManager; @@ -43,6 +44,14 @@ import org.dllearner.core.owl.ObjectSomeRestriction; import org.dllearner.core.owl.Thing; import org.dllearner.tools.ore.OREManager; +import org.dllearner.tools.ore.ui.item.AddPropertyAssertionMenuItem; +import org.dllearner.tools.ore.ui.item.AddToClassMenuItem; +import org.dllearner.tools.ore.ui.item.MoveFromClassToMenuItem; +import org.dllearner.tools.ore.ui.item.MoveToClassFromMenuItem; +import org.dllearner.tools.ore.ui.item.RemoveAllPropertyAssertionsMenuItem; +import org.dllearner.tools.ore.ui.item.RemoveAllPropertyAssertionsNotToMenuItem; +import org.dllearner.tools.ore.ui.item.RemoveAllPropertyAssertionsToMenuItem; +import org.dllearner.tools.ore.ui.item.RemoveFromClassMenuItem; /** * Label that might have menu items when clicked on it. @@ -55,15 +64,6 @@ */ private static final long serialVersionUID = 1L; - private static final int MOVE_TO_CLASS = 0; - private static final int MOVE_FROM_CLASS = 1; - private static final int ADD_CLASS = 2; - private static final int REMOVE_CLASS = 3; - private static final int ADD_PROPERTY = 4; - private static final int REMOVE_RANGE_PROPERTY = 5; - private static final int DELETE_PROPERTY = 6; - private static final int REMOVE_NOT_RANGE_PROPERTY = 7; - private final Description desc; private Individual ind; private OREManager ore; @@ -104,12 +104,11 @@ if(!(desc instanceof Negation)){ if(desc instanceof NamedClass){ //1. description is a named class descriptionLabel = desc.toManchesterSyntaxString(baseURI, prefixes); - menu.add(new DescriptionMenuItem(REMOVE_CLASS, descriptionLabel, desc)); //1.a remove class assertion - - JMenu dme = new JMenu("move class assertion " + descriptionLabel + " to ..."); //1.b move individual + + menu.add(new RemoveFromClassMenuItem(desc)); //1.a remove class assertion + JMenu dme = new JMenu("move class assertion from " + descriptionLabel + " to ..."); //1.b move individual for(NamedClass nc : ore.getpossibleClassesMoveTo(ind)){ - DescriptionMenuItem move = new DescriptionMenuItem(MOVE_TO_CLASS, nc.toManchesterSyntaxString(baseURI, prefixes), (NamedClass) desc); - move.setName(nc.toString()); + MoveFromClassToMenuItem move = new MoveFromClassToMenuItem(desc, nc); dme.add(move); Set<NamedClass> complements = ore.getComplements(nc, ind); //check for complement error if(!(complements.isEmpty() || (complements.size() == 1 && complements.toArray()[0].toString().equals(desc.toString())))){ @@ -129,26 +128,24 @@ } menu.add(dme); } else if(desc instanceof ObjectSomeRestriction){ //2. description is a object some restriction - String propertyName = ((ObjectSomeRestriction) desc).getRole().toString(baseURI, prefixes); - String propertyRange = ((ObjectSomeRestriction) desc).getChild(0).toManchesterSyntaxString(baseURI, prefixes); - menu.add(new DescriptionMenuItem(DELETE_PROPERTY, propertyName , desc)); //2.a remove all property assertions + menu.add(new RemoveAllPropertyAssertionsMenuItem(((ObjectSomeRestriction) desc).getRole())); //2.a remove all property assertions if (!(desc.getChild(0) instanceof Thing)){ - menu.add(new DescriptionMenuItem(REMOVE_RANGE_PROPERTY, propertyRange, desc)); //2.b remove property assertions with objects in range + menu.add(new RemoveAllPropertyAssertionsToMenuItem(((ObjectSomeRestriction) desc).getRole(), ((ObjectSomeRestriction) desc).getChild(0))); //2.b remove property assertions with objects in range } } else if(desc instanceof ObjectAllRestriction){ //3. description is a object all restriction if (!(desc.getChild(0) instanceof Thing)) { JMenu dme = new JMenu("add property assertion " + ((ObjectAllRestriction) desc).getRole().toKBSyntaxString(baseURI, prefixes) //3.a add property assertion with object not in range + " with object ..."); - for (Individual i : ore.getIndividualsNotInPropertyRange((ObjectAllRestriction) desc, ind)){ - dme.add(new DescriptionMenuItem(ADD_PROPERTY, i.toManchesterSyntaxString(baseURI, prefixes), desc)); + for (Individual i : ore.getIndividualsNotInPropertyRange(desc.getChild(0), ind)){ + dme.add(new AddPropertyAssertionMenuItem(((ObjectAllRestriction)desc).getRole(), i)); } - menu.add(dme); + menu.add(dme); } } } else if(desc instanceof Negation){ if(desc.getChild(0) instanceof NamedClass){ //4. description is a negated named class - DescriptionMenuItem addItem = new DescriptionMenuItem(ADD_CLASS, desc.getChild(0).toManchesterSyntaxString(baseURI, prefixes), desc.getChild(0)); + AddToClassMenuItem addItem = new AddToClassMenuItem(desc.getChild(0)); menu.add(addItem); //4.a add class assertion Set<NamedClass> complements = ore.getComplements(desc.getChild(0), ind); //check for complement errors if(!complements.isEmpty()){ @@ -170,7 +167,7 @@ } else if(mode.equals("pos")){//positive example solutions if(!(desc instanceof Negation)){ if(desc instanceof NamedClass){ - DescriptionMenuItem add = new DescriptionMenuItem(ADD_CLASS, desc.toManchesterSyntaxString(baseURI, prefixes), desc); + AddToClassMenuItem add = new AddToClassMenuItem(desc); Set<NamedClass> complements = ore.getComplements(desc, ind); if(!(complements.isEmpty())){ add.setEnabled(false); @@ -191,12 +188,11 @@ Set<NamedClass> moveClasses = ore.getpossibleClassesMoveFrom(ind); if(moveClasses.size() > 0){ JMenu move = new JMenu("move to " + desc.toManchesterSyntaxString(baseURI, prefixes) + " from ..."); - for (NamedClass m : moveClasses){System.out.println("hier" + m); - DescriptionMenuItem item = new DescriptionMenuItem(MOVE_FROM_CLASS, m.toManchesterSyntaxString(baseURI, prefixes), desc); - item.setName(m.toString()); + for (NamedClass source : moveClasses){ + MoveToClassFromMenuItem item = new MoveToClassFromMenuItem(desc, source); move.add(item); - if(!(complements.isEmpty() || (complements.size() == 1 && complements.toArray()[0].toString().equals(m.toString())))){ + if(!(complements.isEmpty() || (complements.size() == 1 && complements.toArray()[0].toString().equals(source.toString())))){ move.setEnabled(false); StringBuffer strBuf = new StringBuffer(); strBuf.append("<html>moving class is not possible because individual<br> " @@ -217,17 +213,16 @@ } else if(desc instanceof ObjectSomeRestriction){ - JMenu dme = new JMenu("add property assertion " + ((ObjectSomeRestriction) desc).getRole() - + " with object ..."); - for (Individual i : ore.getIndividualsInPropertyRange((ObjectSomeRestriction) desc, ind)){ - dme.add(new DescriptionMenuItem(ADD_PROPERTY, i.toManchesterSyntaxString(baseURI, prefixes), desc)); + JMenu dme = new JMenu("add property assertion with object ..."); + for (Individual i : ore.getIndividualsInPropertyRange(desc.getChild(0), ind)){ + dme.add(new AddPropertyAssertionMenuItem(((ObjectSomeRestriction) desc).getRole(), i)); } menu.add(dme); } else if(desc instanceof ObjectAllRestriction){ if (!(desc.getChild(0) instanceof Thing)) { - menu.add(new DescriptionMenuItem(REMOVE_NOT_RANGE_PROPERTY, ((ObjectAllRestriction) desc).getChild(0).toString(baseURI, prefixes), desc)); - menu.add(new DescriptionMenuItem(DELETE_PROPERTY, ((ObjectAllRestriction) desc).getRole().toString(baseURI, prefixes), desc)); + menu.add(new RemoveAllPropertyAssertionsNotToMenuItem(((ObjectAllRestriction) desc).getRole(), ((ObjectAllRestriction) desc).getChild(0))); + menu.add(new RemoveAllPropertyAssertionsMenuItem(((ObjectAllRestriction) desc).getRole())); } } @@ -237,7 +232,7 @@ } else if(desc instanceof Negation){ if(desc.getChild(0) instanceof NamedClass){ descriptionLabel = desc.toManchesterSyntaxString(baseURI, prefixes); - menu.add(new DescriptionMenuItem(REMOVE_CLASS, descriptionLabel, desc)); + menu.add(new RemoveFromClassMenuItem(desc.getChild(0))); } } } @@ -257,13 +252,15 @@ */ public void addActionListeners(ActionListener aL){ for(Component c : menu.getComponents()){ - if(c instanceof DescriptionMenuItem){ - ((DescriptionMenuItem) c).addActionListener(aL); - } else if(c instanceof JMenu){ + if(c instanceof JMenuItem){ + ((JMenuItem) c).addActionListener(aL); + } + if(c instanceof JMenu){ for(int i = 0; i < ((JMenu) c).getItemCount(); i++){ ((JMenu) c).getItem(i).addActionListener(aL); } } + } Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionMenuItem.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionMenuItem.java 2009-09-05 14:13:56 UTC (rev 1836) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/DescriptionMenuItem.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -1,84 +0,0 @@ -/** - * Copyright (C) 2007-2008, 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.tools.ore.ui; - -import javax.swing.JMenuItem; - -import org.dllearner.core.owl.Description; - -/** - * Item for possible repair action. - * @author Lorenz Buehmann - * - */ -public class DescriptionMenuItem extends JMenuItem { - - /** - * - */ - private static final long serialVersionUID = 6784086889435854440L; - - private Description desc; - private int action; - - public DescriptionMenuItem(int action, String text, Description d){ - super(); - if(action == 3){ - setText("remove class assertion to " + text); - } else if(action == 0){ - setText(text); - } else if(action == 2){ - setText("add class assertion to " + text); - } else if(action == 4){ - setText(text); - } else if(action == 6){ - setText("delete complete property " + text); - }else if(action == 5){ - setText("remove all property assertions to " + text); - } else if(action == 7){ - setText("remove all property assertions with range not in " + text); - } else if(action == 1){ - setText(text); - } - - this.desc = d; - this.action = action; - } - - /** - * Returns the description part where item is asserted to. - * @return description - */ - public Description getDescription(){ - return desc; - } - - /** - * Returns action type represented as number.. - * @return number - */ - public int getActionID(){ - return action; - } - - - -} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2009-09-05 14:13:56 UTC (rev 1836) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExplanationTableModel.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -33,7 +33,7 @@ this.impMan = ImpactManager.getInstance(OREManager.getInstance()); this.repMan = RepairManager.getInstance(OREManager.getInstance()); this.unsat = cl; - this.ont = OREManager.getInstance().getPelletReasoner().getOWLAPIOntologies(); + this.ont = OREManager.getInstance().getReasoner().getOWLAPIOntologies(); } @Override Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlPanel.java 2009-09-05 14:13:56 UTC (rev 1836) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlPanel.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -1,6 +1,5 @@ package org.dllearner.tools.ore.ui; -import java.awt.Cursor; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; @@ -27,7 +26,6 @@ import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlKnowledgeSource; -import org.dllearner.tools.ore.OREManager; import org.dllearner.utilities.datastructures.SetManipulation; import org.dllearner.utilities.examples.AutomaticPositiveExampleFinderSPARQL; import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java 2009-09-05 14:13:56 UTC (rev 1836) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -141,10 +141,10 @@ AlphaComposite ac = AlphaComposite.getInstance( AlphaComposite.SRC_OVER, 0.5f); g2D.setColor(Color.BLACK); - g2D.drawString(OREManager.getInstance().getCurrentClass2Learn() - .toString(), 320, 10); - g2D.setColor(Color.ORANGE); - g2D.fillOval(310, 20, 9, 9); + g2D.drawString(ManchesterSyntaxRenderer.renderSimple(OREManager.getInstance().getCurrentClass2Learn()) + , 320, 10); +// g2D.setColor(Color.ORANGE); +// g2D.fillOval(310, 20, 9, 9); g2D.setColor(Color.black); int p = 30; @@ -154,11 +154,11 @@ g2D.setColor(Color.BLACK); g2D.drawString("individuals covered by", 320, p); g2D.setColor(Color.ORANGE); - g2D.fillOval(455, p - 9, 9, 9); + g2D.fillOval(460, p - 9, 9, 9); g2D.setColor(Color.BLACK); - g2D.drawString("and", 485, p); + g2D.drawString("and", 475, p); g2D.setColor(Color.YELLOW); - g2D.fillOval(525, p - 9, 9, 9); + g2D.fillOval(505, p - 9, 9, 9); g2D.setColor(Color.BLACK); p = p + 20; g2D.drawString("(OK)", 320, p); @@ -170,7 +170,7 @@ g2D.setColor(Color.BLACK); g2D.drawString("individuals covered by", 320, p); g2D.setColor(Color.ORANGE); - g2D.fillOval(455, p - 9, 9, 9); + g2D.fillOval(460, p - 9, 9, 9); g2D.setColor(Color.BLACK); p = p + 20; g2D.drawString("(potential problem)", 320, p); @@ -181,7 +181,7 @@ g2D.setColor(Color.BLACK); g2D.drawString("individuals covered by", 320, p); g2D.setColor(Color.YELLOW); - g2D.fillOval(455, p - 9, 9, 9); + g2D.fillOval(460, p - 9, 9, 9); g2D.setColor(Color.BLACK); p = p + 20; g2D.drawString("(potential problem)", 320, p); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java 2009-09-05 14:13:56 UTC (rev 1836) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTable.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -1,11 +1,30 @@ package org.dllearner.tools.ore.ui; +import java.awt.BorderLayout; import java.awt.Color; import java.awt.Cursor; +import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.util.List; +import java.util.Set; +import javax.swing.AbstractAction; +import javax.swing.Box; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JPopupMenu; + +import org.dllearner.tools.ore.ExplanationManager; +import org.dllearner.tools.ore.OREManager; +import org.dllearner.tools.ore.RepairManager; +import org.dllearner.tools.ore.TaskManager; +import org.dllearner.tools.ore.explanation.Explanation; import org.jdesktop.swingx.JXTable; +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLOntologyChange; +import org.semanticweb.owl.model.OWLOntologyChangeException; +import org.semanticweb.owl.model.OWLOntologyManager; public class ImpactTable extends JXTable { @@ -64,8 +83,111 @@ setCursor(null); } } + + + public void mousePressed(MouseEvent e) { + int row = rowAtPoint(e.getPoint()); + if (row >= 0 && row < getRowCount() && e.isPopupTrigger()) { + showPopupMenu(e); + + } + + } + + public void mouseReleased(MouseEvent e) { + int row = rowAtPoint(e.getPoint()); + if (row >= 0 && row < getRowCount() && e.isPopupTrigger()) { + + showPopupMenu(e); + + } + } + + + + }); } + private void showPopupMenu(MouseEvent e){ + final int row = rowAtPoint(e.getPoint()); + JPopupMenu menu = new JPopupMenu(); + menu.add(new AbstractAction("Why?") { + /** + * + */ + private static final long serialVersionUID = 950445739098337169L; + final ImpactTable table = ImpactTable.this; + + public void actionPerformed(ActionEvent e){ + + + OWLAxiom ax = (OWLAxiom)table.getValueAt(row, 1); + showWhy(ax); + + + } + + + }); + menu.show(this, e.getX(), e.getY()); + } + private void showWhy(OWLAxiom entailment){ + try { + OREManager oreMan = OREManager.getInstance(); + RepairManager repMan = RepairManager.getInstance(oreMan); + ExplanationManager expMan = ExplanationManager.getInstance(oreMan); + OWLOntologyManager man = oreMan.getReasoner().getOWLOntologyManager(); + List<OWLOntologyChange>repairPlan = repMan.getRepairPlan(); + + StringBuilder sb = new StringBuilder(); + sb.append(ManchesterSyntaxRenderer.renderSimple(entailment)); + if(((ImpactTableModel)getModel()).isLostEntailment(entailment)){ + sb.append(" is lost because"); + new ExplanationDialog(sb.toString(), expMan.getEntailmentExplanations(entailment)); + } else { + sb.append(" is added because"); + man.applyChanges(repairPlan); + new ExplanationDialog(sb.toString(), expMan.getEntailmentExplanations(entailment)); + man.applyChanges(repMan.getInverseChanges(repairPlan)); + } + + } catch (OWLOntologyChangeException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + + private class ExplanationDialog extends JDialog{ + + /** + * + */ + private static final long serialVersionUID = 1L; + + private JComponent explanationsPanel; + + public ExplanationDialog(String title, Set<Explanation> explanations){ + super(TaskManager.getInstance().getDialog(), title, true); + setLayout(new BorderLayout()); + + explanationsPanel = new Box(1); + + int counter = 1; + for(Explanation exp : explanations){ + ExplanationTablePanel panel = new ExplanationTablePanel(new SimpleExplanationTable(exp), counter); + explanationsPanel.add(panel); + } + add(explanationsPanel, BorderLayout.NORTH); + setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); + setSize(700, 400); + + setVisible(true); + + + + } + } + } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTableModel.java 2009-09-05 14:13:56 UTC (rev 1836) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTableModel.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -45,7 +45,7 @@ lostEntailments = new HashSet<OWLAxiom>(); addedEntailemnts = new HashSet<OWLAxiom>(); - ont = OREManager.getInstance().getPelletReasoner().getOWLAPIOntologies(); + ont = OREManager.getInstance().getReasoner().getOWLAPIOntologies(); repMan.addListener(this); // impMan.addListener(this); @@ -145,6 +145,10 @@ public boolean isLostEntailment(int rowIndex){ return lostEntailments.contains(getOWLAxiomAtRow(rowIndex)); } + + public boolean isLostEntailment(OWLAxiom entailment){ + return lostEntailments.contains(entailment); + } @Override Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java 2009-09-05 14:13:56 UTC (rev 1836) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -34,6 +34,32 @@ return render(desc); } + public static String renderSimple(OWLAxiom ax){ + ax.accept(renderer); + writer.flush(); + String renderedString = buffer.toString(); + buffer.getBuffer().delete(0, buffer.toString().length()); + return renderedString; + } + + public static String renderSimple(Description value){ + OWLDescription desc = OWLAPIDescriptionConvertVisitor.getOWLDescription((Description)value); + desc.accept(renderer); + writer.flush(); + String renderedString = buffer.toString(); + buffer.getBuffer().delete(0, buffer.toString().length()); + return renderedString; + } + + public static String renderSimple(Individual value){ + OWLIndividual ind = OWLAPIConverter.getOWLAPIIndividual(value); + ind.accept(renderer); + writer.flush(); + String renderedString = buffer.toString(); + buffer.getBuffer().delete(0, buffer.toString().length()); + return renderedString; + } + public static String render(Individual value){ OWLIndividual ind = OWLAPIConverter.getOWLAPIIndividual((Individual) value); return render(ind); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairDialog.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairDialog.java 2009-09-05 14:13:56 UTC (rev 1836) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/RepairDialog.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -42,12 +42,17 @@ import javax.swing.JSeparator; import javax.swing.border.EmptyBorder; -import org.dllearner.core.owl.Description; import org.dllearner.core.owl.Individual; -import org.dllearner.core.owl.NamedClass; -import org.dllearner.core.owl.ObjectQuantorRestriction; import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.OntologyModifier; +import org.dllearner.tools.ore.ui.item.AddPropertyAssertionMenuItem; +import org.dllearner.tools.ore.ui.item.AddToClassMenuItem; +import org.dllearner.tools.ore.ui.item.MoveFromClassToMenuItem; +import org.dllearner.tools.ore.ui.item.MoveToClassFromMenuItem; +import org.dllearner.tools.ore.ui.item.RemoveAllPropertyAssertionsMenuItem; +import org.dllearner.tools.ore.ui.item.RemoveAllPropertyAssertionsNotToMenuItem; +import org.dllearner.tools.ore.ui.item.RemoveAllPropertyAssertionsToMenuItem; +import org.dllearner.tools.ore.ui.item.RemoveFromClassMenuItem; import org.semanticweb.owl.model.OWLException; import org.semanticweb.owl.model.OWLOntologyChange; import org.semanticweb.owl.model.OWLOntologyChangeListener; @@ -88,8 +93,6 @@ private OntologyModifier modifier; private Individual ind; - private Description actualDesc; - private Description newDesc; public RepairDialog(Individual ind, JDialog dialog, String mode){ @@ -126,7 +129,7 @@ this.modifier = OREManager.getInstance().getModifier(); this.mode = mode; - OREManager.getInstance().getPelletReasoner().getOWLOntologyManager().addOntologyChangeListener(this); + OREManager.getInstance().getReasoner().getOWLOntologyManager().addOntologyChangeListener(this); } @@ -206,48 +209,45 @@ * Method controls action events triggered by clicking on red labels in class description at the top of the dialog. */ public void actionPerformed(ActionEvent e) { + if(e.getSource() instanceof RemoveFromClassMenuItem){ + RemoveFromClassMenuItem item = (RemoveFromClassMenuItem)e.getSource(); + List<OWLOntologyChange> changes = modifier.removeClassAssertion(ind, item.getDescription()); + changesTable.addChanges(changes); + } else if(e.getSource() instanceof MoveFromClassToMenuItem){ + MoveFromClassToMenuItem item = (MoveFromClassToMenuItem)e.getSource(); + List<OWLOntologyChange> changes = modifier.moveIndividual(ind, item.getSource(), item.getDestination()); + changesTable.addChanges(changes); + } else if(e.getSource() instanceof AddToClassMenuItem){ + AddToClassMenuItem item = (AddToClassMenuItem)e.getSource(); + List<OWLOntologyChange> changes = modifier.addClassAssertion(ind, item.getDescription()); + changesTable.addChanges(changes); + } else if(e.getSource() instanceof RemoveAllPropertyAssertionsMenuItem){ + RemoveAllPropertyAssertionsMenuItem item = (RemoveAllPropertyAssertionsMenuItem)e.getSource(); + List<OWLOntologyChange> changes = modifier.deleteObjectProperty(ind, item.getProperty()); + changesTable.addChanges(changes); + } else if(e.getSource() instanceof RemoveAllPropertyAssertionsToMenuItem){ + RemoveAllPropertyAssertionsToMenuItem item = (RemoveAllPropertyAssertionsToMenuItem)e.getSource(); + List<OWLOntologyChange> changes = new ArrayList<OWLOntologyChange>(); + changes.addAll(modifier.removeAllObjectPropertyAssertions(ind, item.getProperty(), OREManager.getInstance().getIndividualsInPropertyRange(item.getDestination(), ind))); + changesTable.addChanges(changes); + } else if(e.getSource() instanceof RemoveAllPropertyAssertionsNotToMenuItem){ + RemoveAllPropertyAssertionsNotToMenuItem item = (RemoveAllPropertyAssertionsNotToMenuItem)e.getSource(); + List<OWLOntologyChange> changes = new ArrayList<OWLOntologyChange>(); + changes.addAll(modifier.removeAllObjectPropertyAssertions(ind, item.getProperty(), OREManager.getInstance().getIndividualsNotInPropertyRange(item.getDestination(), ind))); + changesTable.addChanges(changes); + } else if(e.getSource() instanceof MoveToClassFromMenuItem){ + MoveToClassFromMenuItem item = (MoveToClassFromMenuItem)e.getSource(); + List<OWLOntologyChange> changes = new ArrayList<OWLOntologyChange>(); + changes.addAll(modifier.moveIndividual(ind, item.getSource(), item.getDestination())); + changesTable.addChanges(changes); + } else if(e.getSource() instanceof AddPropertyAssertionMenuItem){ + AddPropertyAssertionMenuItem item = (AddPropertyAssertionMenuItem)e.getSource(); + List<OWLOntologyChange> changes = new ArrayList<OWLOntologyChange>(); + changes.addAll(modifier.addObjectProperty(ind, item.getProperty(), item.getObject())); + changesTable.addChanges(changes); + } - if(e.getSource() instanceof DescriptionMenuItem){ - DescriptionMenuItem item =(DescriptionMenuItem) e.getSource(); - actualDesc = item.getDescription(); - int action = item.getActionID(); - if(action == 4){ - Individual obj = new Individual(e.getActionCommand()); - List<OWLOntologyChange> changes = modifier.addObjectProperty(ind, (ObjectQuantorRestriction) actualDesc, obj); - changesTable.addChanges(changes); - } else if(action == 5){ - ObjectQuantorRestriction property = (ObjectQuantorRestriction) actualDesc; - List<OWLOntologyChange> changes = new ArrayList<OWLOntologyChange>(); - for(Individual i : OREManager.getInstance().getIndividualsInPropertyRange(property, ind)){ - changes.addAll(modifier.removeObjectPropertyAssertion(ind, property, i)); - } - changesTable.addChanges(changes); - - } else if(action == 6){ - List<OWLOntologyChange> changes = modifier.deleteObjectProperty(ind, (ObjectQuantorRestriction) actualDesc); - changesTable.addChanges(changes); - } else if(action == 0){ - newDesc = new NamedClass(item.getName()); - List<OWLOntologyChange> changes = modifier.moveIndividual(ind, actualDesc, newDesc); - changesTable.addChanges(changes); - } else if(action == 3){ - List<OWLOntologyChange> changes = modifier.removeClassAssertion(ind, actualDesc); - changesTable.addChanges(changes); - } else if(action == 2){ - List<OWLOntologyChange> changes = modifier.addClassAssertion(ind, actualDesc); - changesTable.addChanges(changes); - } else if(action == 7){ - ObjectQuantorRestriction property = (ObjectQuantorRestriction) actualDesc; - List<OWLOntologyChange> changes = new ArrayList<OWLOntologyChange>(); - for(Individual i : OREManager.getInstance().getIndividualsNotInPropertyRange(property, ind)){ - changes.addAll(modifier.removeObjectPropertyAssertion(ind, property, i)); - } - } else if(action == 1){ - Description oldDesc = new NamedClass(item.getName()); - List<OWLOntologyChange> changes = modifier.moveIndividual(ind, oldDesc, actualDesc); - changesTable.addChanges(changes); - } - } else if(e.getActionCommand().equals("Ok")){ + else if(e.getActionCommand().equals("Ok")){ if(descPanel.isCorrect()){ returncode = VALID_RETURN_CODE; } else{ Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/SimpleExplanationTable.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/SimpleExplanationTable.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/SimpleExplanationTable.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -0,0 +1,25 @@ +package org.dllearner.tools.ore.ui; + +import java.awt.Color; + +import javax.swing.JTable; + +import org.dllearner.tools.ore.explanation.Explanation; +import org.jdesktop.swingx.JXTable; +import org.jdesktop.swingx.decorator.HighlighterFactory; + +public class SimpleExplanationTable extends JXTable { + + /** + * + */ + private static final long serialVersionUID = 5258296616232184974L; + + + public SimpleExplanationTable(Explanation exp){ + setBackground(Color.WHITE); + setHighlighters(HighlighterFactory.createAlternateStriping()); + setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + setModel(new SimpleExplanationTableModel(exp)); + } +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/SimpleExplanationTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/SimpleExplanationTableModel.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/SimpleExplanationTableModel.java 2009-09-06 15:28:00 UTC (rev 1837) @@ -0,0 +1,49 @@ +package org.dllearner.tools.ore.ui; + +import javax.swing.table.A... [truncated message content] |
From: <lor...@us...> - 2009-09-10 11:37:56
|
Revision: 1840 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1840&view=rev Author: lorenz_b Date: 2009-09-10 11:37:40 +0000 (Thu, 10 Sep 2009) Log Message: ----------- fixed some bugs added a new sparql extraction dialog Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java trunk/src/dl-learner/org/dllearner/tools/ore/RecentManager.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java trunk/src/dl-learner/org/dllearner/tools/ore/recent.txt trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/MetricsPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatsPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/IntroductionPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/KnowledgeSourcePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LeftPanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java Removed Paths: ------------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBarSimulator.java Modified: trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java =================================================================== --- trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java 2009-09-08 09:30:35 UTC (rev 1839) +++ trunk/src/dl-learner/org/dllearner/reasoning/PelletReasoner.java 2009-09-10 11:37:40 UTC (rev 1840) @@ -161,7 +161,7 @@ this.configurator = new PelletReasonerConfigurator(this); } - public void loadOntologies() { + public void loadOntologies() throws URISyntaxException, OWLOntologyCreationException { Comparator<OWLNamedObject> namedObjectComparator = new Comparator<OWLNamedObject>() { public int compare(OWLNamedObject o1, OWLNamedObject o2) { return o1.getURI().compareTo(o2.getURI()); @@ -188,7 +188,7 @@ url = ((OWLFile) source).getURL(); } - try { +// try { if (source instanceof OWLAPIOntology) { ontology = ((OWLAPIOntology) source).getOWLOntolgy(); @@ -258,11 +258,11 @@ individuals.add(new Individual(owlIndividual.getURI().toString())); } - } catch (OWLOntologyCreationException e) { - e.printStackTrace(); - } catch (URISyntaxException e) { - e.printStackTrace(); - } +// } catch (OWLOntologyCreationException e) { +// e.printStackTrace(); +// } catch (URISyntaxException e) { +// e.printStackTrace(); +// } // all other sources are converted to KB and then to an // OWL API ontology } else { Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2009-09-08 09:30:35 UTC (rev 1839) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2009-09-10 11:37:40 UTC (rev 1840) @@ -47,12 +47,12 @@ /** * main method. - * @param args possible is to use OWL-File as parameter + * @param args possible is to use URI as parameter */ public static void main(String[] args) { try { - UIManager.setLookAndFeel( - UIManager.getSystemLookAndFeelClassName()); +// UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -110,8 +110,9 @@ @Override public void run() { + System.out.println("Starting application..."); int ret = wizard.showModalDialog(); - System.out.println("Dialog return code is (0=Finish,1=Cancel,2=Error): " + ret); + System.out.println("Exited ORE application"); System.exit(0); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-09-08 09:30:35 UTC (rev 1839) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-09-10 11:37:40 UTC (rev 1840) @@ -2,6 +2,7 @@ import java.net.MalformedURLException; import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.util.ArrayList; import java.util.Collection; @@ -32,6 +33,7 @@ import org.dllearner.reasoning.PelletReasoner; import org.dllearner.tools.ore.ui.DescriptionLabel; import org.mindswap.pellet.exceptions.InconsistentOntologyException; +import org.semanticweb.owl.model.OWLOntologyCreationException; public class OREManager { @@ -133,7 +135,7 @@ } - public void initPelletReasoner(){ + public void initPelletReasoner() throws URISyntaxException, OWLOntologyCreationException{ reasoner = cm.reasoner(PelletReasoner.class, ks); try { reasoner.init(); @@ -148,7 +150,7 @@ fireActiveOntologyChanged(); } - public void loadOntology(){ + public void loadOntology() throws OWLOntologyCreationException, URISyntaxException{ reasoner.loadOntologies(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/RecentManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/RecentManager.java 2009-09-08 09:30:35 UTC (rev 1839) +++ trunk/src/dl-learner/org/dllearner/tools/ore/RecentManager.java 2009-09-10 11:37:40 UTC (rev 1840) @@ -70,7 +70,9 @@ try { List<URI> list = (List<URI>) inputStream.readObject(); - uriList.addAll(list); + if(list != null){ + uriList.addAll(list); + } } finally { inputStream.close(); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java 2009-09-08 09:30:35 UTC (rev 1839) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/laconic/LaconicExplanationGenerator.java 2009-09-10 11:37:40 UTC (rev 1840) @@ -322,13 +322,17 @@ } public Set<OWLAxiom> getRemainingAxioms(OWLAxiom source, OWLAxiom part){ - Set<OWLAxiom> parts = computeOPlus(Collections.singleton(source));System.out.println("Parts: " + parts); - parts.remove(part);System.out.println("removed part: " + part); + Set<OWLAxiom> parts = computeOPlus(Collections.singleton(source)); + for(OWLAxiom par : parts){ + System.out.println("has Part: " + par); + } +// parts.remove(part);System.out.println("removed part: " + part); for(OWLAxiom pa : parts){ - System.out.println("Part : " + pa + "has source : " + oPlus.getAxiomsMap().get(pa)); - if(oPlus.getAxiomsMap().get(pa).size() == 1){ - System.out.println("important: " + pa); + System.out.println("\nPart: " + pa); + for(OWLAxiom ax : oPlus.getAxiomsMap().get(pa)){ + System.out.println("has source : " + ax); } + } return rebuildAxioms(parts); @@ -346,7 +350,7 @@ Map<OWLClass, Map<OWLAxiom, Set<OWLSubClassAxiom>>> lhs2SubClassAxiom = new HashMap<OWLClass, Map<OWLAxiom, Set<OWLSubClassAxiom>>>(); Set<OWLAxiom> reconstituedAxioms = new HashSet<OWLAxiom>(); - for (OWLAxiom laconicAx : axioms) { + for (OWLAxiom laconicAx : axioms) {System.out.println("\n" + laconicAx); if (laconicAx instanceof OWLSubClassAxiom) { @@ -412,7 +416,7 @@ Set<OWLAxiom> sourceAxioms = expGen.getSourceAxioms(laconicAx); System.out.println("Source axioms: " + sourceAxioms); for(OWLAxiom sourceAx : sourceAxioms){ - System.out.println("Rebuildet: " + expGen.getRemainingAxioms(sourceAx, laconicAx)); + System.out.println("\nRebuildet: " + expGen.getRemainingAxioms(sourceAx, laconicAx)); } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/recent.txt =================================================================== (Binary files differ) Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlDialog.java 2009-09-10 11:37:40 UTC (rev 1840) @@ -0,0 +1,524 @@ +package org.dllearner.tools.ore.ui; + +import java.awt.BorderLayout; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.GridLayout; +import java.awt.Insets; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.SortedSet; +import java.util.TreeSet; + +import javax.swing.AbstractAction; +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.ButtonGroup; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JRadioButton; +import javax.swing.JTextField; +import javax.swing.JToggleButton; +import javax.swing.ProgressMonitor; +import javax.swing.SwingWorker; +import javax.swing.border.TitledBorder; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import javax.swing.text.JTextComponent; + +import org.dllearner.core.ComponentManager; +import org.dllearner.kb.sparql.SPARQLTasks; +import org.dllearner.kb.sparql.SparqlEndpoint; +import org.dllearner.kb.sparql.SparqlKnowledgeSource; +import org.dllearner.utilities.datastructures.SetManipulation; +import org.dllearner.utilities.examples.AutomaticPositiveExampleFinderSPARQL; +import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator; + +public class ExtractFromSparqlDialog extends JDialog implements ActionListener, PropertyChangeListener, DocumentListener { + + /** + * + */ + private static final long serialVersionUID = 6379950242859458507L; + + public static final int CANCEL_RETURN_CODE = 0; + public static final int OK_RETURN_CODE = 1; + + private int returnCode; + + private JButton okButton = null; + private JButton cancelButton = null; + + private JComboBox comboBox; + private JTextField classField; + private JTextField defaultGraphField; + + private JRadioButton asLabelButton; + private JRadioButton asURLButton; + + private JButton extractButton; + + private JLabel message; + + private SparqlExtractOptionsPanel optionsPanel; + private JToggleButton optionsButton; + private ImageIcon toggledIcon = new ImageIcon("src/dl-learner/org/dllearner/tools/ore/toggled.gif"); + private ImageIcon untoggledIcon = new ImageIcon("src/dl-learner/org/dllearner/tools/ore/untoggled.gif"); + + + private SPARQLTasks task; + private SparqlKnowledgeSource ks; + private OntologyExtractingTask extractTask; + private ProgressMonitor mon; + + private Map<URL, List<String>> endpointToDefaultGraph; + + public ExtractFromSparqlDialog(Dialog owner) { + super(owner, "Extract fragment from Sparql-endpoint", true); + + // Create the controls + createControls(); + //create main panel + createSparqlPanel(); + //add predifined endpoints + addPredifinedEndpoints(); + positionErrorDialog(owner); + } + + private void positionErrorDialog(Dialog owner) { + if (owner == null || !owner.isVisible()) { + Dimension screenDimension = Toolkit.getDefaultToolkit() + .getScreenSize(); + setLocation(screenDimension.width / 2 - getSize().width / 2, + screenDimension.height / 2 - getSize().height / 2); + } + } + + private void createControls() { + getContentPane().setLayout(new BorderLayout()); + + // Create the dialog buttons + // Create a box to hold the buttons - to give the right spacing between + // them + Box buttonBox = Box.createHorizontalBox(); + + // Create a panel to hold a box with the buttons in it - to give it the + // right space around them + JPanel buttonPanel = new JPanel(); + buttonPanel.add(buttonBox); + buttonPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); + + // Create the buttons and add them to the box (leading strut will give + // the dialog box its width) + buttonBox.add(okButton = createButton("Ok", 'o')); + okButton.setEnabled(false); + buttonBox.add(Box.createHorizontalGlue()); + buttonBox.add(Box.createHorizontalStrut(4)); + buttonBox.add(cancelButton = createButton("Cancel", 'c')); + buttonBox.add(Box.createHorizontalStrut(10)); + + // Add the button panel to the bottom of the BorderLayout + getContentPane().add(buttonPanel, BorderLayout.SOUTH); + } + + private void createSparqlPanel() { + JPanel panel = new JPanel(); + GridBagConstraints c = new GridBagConstraints(); + panel.setLayout(new GridBagLayout()); + c = new GridBagConstraints(); + c.fill = GridBagConstraints.HORIZONTAL; + c.weightx = 1.0; + c.gridwidth = GridBagConstraints.REMAINDER; + + JPanel endPointHolderPanel = new JPanel(); + endPointHolderPanel.setLayout(new GridLayout(0, 1)); + endPointHolderPanel.setBorder(new TitledBorder("Sparql endpoint")); + comboBox = new JComboBox(); + comboBox.setEditable(true); + comboBox.setActionCommand("endpoints"); + comboBox.addActionListener(this); + + ((JTextComponent)comboBox.getEditor().getEditorComponent()).getDocument().addDocumentListener(this); + AutoCompleteDecorator.decorate(this.comboBox); + endPointHolderPanel.add(new JLabel("URL")); + endPointHolderPanel.add(comboBox); + defaultGraphField = new JTextField(); + endPointHolderPanel.add(new JLabel("Default graph URI (optional)")); + endPointHolderPanel.add(defaultGraphField); + panel.add(endPointHolderPanel, c); + + JPanel classHolderPanel = new JPanel(); + classHolderPanel.setLayout(new GridLayout(0, 1)); + classHolderPanel.setBorder(new TitledBorder("Class to learn")); + asLabelButton = new JRadioButton("label"); + asURLButton = new JRadioButton("URI"); + asURLButton.setSelected(true); + ButtonGroup bG = new ButtonGroup(); + bG.add(asLabelButton); + bG.add(asURLButton); + JPanel buttonPanel = new JPanel(); + buttonPanel.add(new JLabel("input type:")); + buttonPanel.add(asURLButton); + buttonPanel.add(asLabelButton); + + classHolderPanel.add(buttonPanel); + classField = new JTextField(); + classField.getDocument().addDocumentListener(this); + classHolderPanel.add(classField); + panel.add(classHolderPanel, c); + + + + optionsButton = new JToggleButton(new AbstractAction("Advanced options") { + + /** + * + */ + private static final long serialVersionUID = -4395104616001102604L; + + @Override + public void actionPerformed(ActionEvent e) { + JToggleButton button = (JToggleButton) e.getSource(); + + if (!button.getModel().isSelected()) { + collapseOptionsPanel(); + } else { + expandOptionsPanel(); + } + + } + }); + optionsButton.setIcon(untoggledIcon); + optionsButton.setBorder(BorderFactory.createEmptyBorder(2,2,2,2)); + optionsButton.setHorizontalAlignment(JButton.LEADING); // optional + optionsButton.setBorderPainted(false); + optionsButton.setContentAreaFilled(false); + c.fill = GridBagConstraints.NONE; + c.anchor = GridBagConstraints.WEST; + panel.add(optionsButton, c); + + c.anchor = GridBagConstraints.CENTER; + c.fill = GridBagConstraints.HORIZONTAL; + optionsPanel = new SparqlExtractOptionsPanel(); + panel.add(optionsPanel, c); + optionsPanel.setVisible(false); + + extractButton = createButton("Extract", 'e'); + extractButton.setEnabled(false); + c.fill = GridBagConstraints.NONE; + panel.add(extractButton, c); + + message = new JLabel(""); + panel.add(message, c); + + JLabel padding = new JLabel(); + c.weighty = 1.0; + panel.add(padding, c); + getContentPane().add(panel, BorderLayout.CENTER); + } + + private void addPredifinedEndpoints(){ + endpointToDefaultGraph = new HashMap<URL, List<String>>(); +// endpointToDefaultGraph.put(SparqlEndpoint.getEndpointDBpedia().getURL(), SparqlEndpoint.getEndpointDBpedia().getDefaultGraphURIs()); +// endpointToDefaultGraph.put(SparqlEndpoint.getEndpointDOAPspace().getURL(), SparqlEndpoint.getEndpointDOAPspace().getDefaultGraphURIs()); + for(SparqlEndpoint endpoint : SparqlEndpoint.listEndpoints()){ + endpointToDefaultGraph.put(endpoint.getURL(), endpoint.getDefaultGraphURIs()); + } + + for(URL url : endpointToDefaultGraph.keySet()){ + comboBox.addItem(url.toString()); + } + + } + + + private void expandOptionsPanel(){ + optionsButton.setIcon(toggledIcon); + Dimension dialogSize = getSize (); + Dimension detailSize = optionsPanel.getPreferredSize (); + dialogSize.height += detailSize.height; + setSize (dialogSize); + optionsPanel.setVisible(true); + // Cause the new layout to take effect + invalidate (); + validate (); + + } + + private void collapseOptionsPanel(){ + optionsButton.setIcon(untoggledIcon); + Dimension dialogSize = getSize (); + Dimension detailSize = optionsPanel.getPreferredSize (); + dialogSize.height -= detailSize.height; + setSize (dialogSize); + optionsPanel.setVisible(false); + // Cause the new layout to take effect + invalidate (); + validate (); + + } + + private JButton createButton (String label, char mnemonic) { + // Create the new button object + JButton newButton = new JButton (label); + newButton.setActionCommand(label); + + newButton.setPreferredSize (new Dimension (90, 30)); + newButton.setMargin (new Insets (2, 2, 2, 2)); + + if (mnemonic != '\0') { + // Specify the button's mnemonic + newButton.setMnemonic (mnemonic); + } + + // Setup the dialog to listen to events + newButton.addActionListener (this); + + return newButton; + } + + public int showDialog(){ + setSize(500, 400); + setVisible(true); + setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); + return returnCode; + } + + + + private void extract() { + if(urlIsConnectable()){ + message.setText(""); + mon = new ProgressMonitor(this, "Extracting fragment", "", 0, 100); + extractTask = new OntologyExtractingTask(mon); + extractTask.addPropertyChangeListener(this); + extractTask.execute(); + } else { + message.setText("<html><font color=\"red\">Could not connect to endpoint</html>"); + } + + } + + private boolean urlIsConnectable() + { + URL url = null; + try { + url = new URL((String)comboBox.getSelectedItem()); + } catch (MalformedURLException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + try { + if(url.openConnection().getContentLength() > 0){ + return true; + } else { + return false; + } + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return false; + } + + private boolean urlIsValid(){ + Document urlDoc = ((JTextComponent)comboBox.getEditor().getEditorComponent()).getDocument(); + String url = ""; + try { + url = urlDoc.getText(0, urlDoc.getLength()); + } catch (BadLocationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if(url.toLowerCase().startsWith("http://")){ + return true; + } else { + return false; + } + } + + private void setExtractButtonEnabledToValidInput(){ + extractButton.setEnabled(urlIsValid() && !classField.getText().isEmpty()); + } + + private String getClassFromLabel(){ + + String queryString = "SELECT DISTINCT ?class WHERE {" + + "?class rdf:type owl:Class ." + + "?class rdfs:label ?label . " + + "FILTER(regex(?label, '" + classField.getText() + "')) }"; + SortedSet<String> classes = task.queryAsSet(queryString, "class"); + + return classes.iterator().next(); + } + + public SparqlKnowledgeSource getKnowledgeSource(){ + return ks; + } + + class OntologyExtractingTask extends SwingWorker<Void, Void>{ + + private ProgressMonitor mon; + + public OntologyExtractingTask(ProgressMonitor mon) { + this.mon = mon; + } + + @Override + public Void doInBackground() { + ComponentManager cm = ComponentManager.getInstance(); + URL endpointURL = null; + try { + endpointURL = new URL(comboBox.getSelectedItem().toString()); + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + List<String> defaultGraphURIS = new ArrayList<String>(1); + defaultGraphURIS.add(defaultGraphField.getText()); + SparqlEndpoint endpoint = new SparqlEndpoint(endpointURL, defaultGraphURIS, Collections.<String>emptyList()); + task = new SPARQLTasks(endpoint); + String classKBString; + if(asLabelButton.isSelected()){ + classKBString = "\"" + getClassFromLabel() + "\""; + } else { + classKBString = "\"" + classField.getText() +"\""; + } + + AutomaticPositiveExampleFinderSPARQL pos = new AutomaticPositiveExampleFinderSPARQL( + task); + pos.makePositiveExamplesFromConcept(classKBString); + + SortedSet<String> allPosExamples = pos.getPosExamples(); + SortedSet<String> posExamples = SetManipulation.stableShrink( + allPosExamples, 20); + + SortedSet<String> instances = new TreeSet<String>(posExamples); + + ks = cm.knowledgeSource(SparqlKnowledgeSource.class); + ks.getConfigurator().setUrl(SparqlEndpoint.getEndpointDBpedia().getURL()); + ks.getConfigurator().setInstances(instances); + ks.getConfigurator().setPredefinedFilter("YAGO"); + ks.getConfigurator().setBreakSuperClassRetrievalAfter(optionsPanel.getBreakSuperClassRetrievalAfterValue()); + ks.getConfigurator().setRecursionDepth(optionsPanel.getRecursionDepthValue()); + ks.getConfigurator().setUseCache(optionsPanel.isUseCache()); + ks.getConfigurator().setGetAllSuperClasses(optionsPanel.isGetAllSuperClasses()); + ks.getConfigurator().setDissolveBlankNodes(optionsPanel.isDissolveBlankNodes()); + ks.getConfigurator().setUseImprovedSparqlTupelAquisitor(optionsPanel.isUseImprovedSparqlTupelAquisitor()); + ks.getConfigurator().setUseLits(optionsPanel.isUseLiterals()); + ks.getConfigurator().setGetPropertyInformation(optionsPanel.isGetPropertyInformation()); + ks.getConfigurator().setCloseAfterRecursion(optionsPanel.isCloseAfterRecursion()); + ks.addProgressMonitor(mon); + + ks.init(); + + return null; + } + + @Override + public void done() { + + if(!isCancelled() && ks != null){ + okButton.setEnabled(true); + message.setText("<html><font color=\"green\">Fragment successfully extracted</html>"); + } + } + } + + + @Override + public void actionPerformed(ActionEvent e) { + if(e.getActionCommand().equals("Extract")){ + extract(); + } else if(e.getActionCommand().equals("Ok")){ + returnCode = OK_RETURN_CODE; + closeDialog(); + } else if(e.getActionCommand().equals("Cancel")){ + returnCode = CANCEL_RETURN_CODE; + closeDialog(); + } else if(e.getActionCommand().equals("endpoints")){ + message.setText(""); + JComboBox cb = (JComboBox)e.getSource(); + if(cb.getSelectedIndex() >= 0){ + URL endpointURL = null; + try { + endpointURL = new URL((String)cb.getSelectedItem()); + } catch (MalformedURLException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + List<String> defaultGraphs = endpointToDefaultGraph.get(endpointURL); + if(defaultGraphs != null && !defaultGraphs.isEmpty()){ + defaultGraphField.setText(defaultGraphs.iterator().next()); + } else { + defaultGraphField.setText(""); + } + } + + } + + } + + private void closeDialog(){ + setVisible(false); + dispose(); + } + + @Override + public void propertyChange(PropertyChangeEvent evt) { + if ("progress" == evt.getPropertyName() ) { + if(mon.isCanceled()){ + extractTask.cancel(true); + } + } + + } + + @Override + public void changedUpdate(DocumentEvent e) { + setExtractButtonEnabledToValidInput(); + + } + + @Override + public void insertUpdate(DocumentEvent e) { + setExtractButtonEnabledToValidInput(); + + } + + @Override + public void removeUpdate(DocumentEvent e) { + setExtractButtonEnabledToValidInput(); + + } + + + public static void main(String[] args){ + ExtractFromSparqlDialog dialog = new ExtractFromSparqlDialog(null); + dialog.showDialog(); + } + + + +} + + Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlPanel.java 2009-09-08 09:30:35 UTC (rev 1839) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ExtractFromSparqlPanel.java 2009-09-10 11:37:40 UTC (rev 1840) @@ -1,21 +1,36 @@ package org.dllearner.tools.ore.ui; +import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; +import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.net.MalformedURLException; import java.net.URL; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import java.util.SortedSet; import java.util.TreeSet; +import javax.swing.AbstractAction; +import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JComboBox; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; +import javax.swing.JRadioButton; +import javax.swing.JScrollPane; import javax.swing.JTextField; +import javax.swing.JToggleButton; import javax.swing.ProgressMonitor; import javax.swing.SwingWorker; import javax.swing.border.TitledBorder; @@ -29,7 +44,6 @@ import org.dllearner.utilities.datastructures.SetManipulation; import org.dllearner.utilities.examples.AutomaticPositiveExampleFinderSPARQL; import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator; -import org.protege.editor.core.ui.util.JOptionPaneEx; public class ExtractFromSparqlPanel extends JPanel implements DocumentListener, ActionListener, PropertyChangeListener{ @@ -41,6 +55,11 @@ private JComboBox comboBox; private JTextField classField; + private JTextField defaultGraphField; + + private JRadioButton asLabelButton; + private JRadioButton asURLButton; + private JButton extractButton; private GridBagConstraints c; @@ -49,48 +68,107 @@ private SparqlKnowledgeSource ks; private OntologyExtractingTask extractTask; private ProgressMonitor mon; + private List<SparqlEndpoint> endpoints; private SparqlExtractOptionsPanel optionsPanel; public ExtractFromSparqlPanel(){ + setLayout(new GridBagLayout()); c = new GridBagConstraints(); c.fill = GridBagConstraints.HORIZONTAL; + c.weightx = 1.0; + c.gridwidth = GridBagConstraints.REMAINDER; - JPanel comboBoxHolderPanel = new JPanel(); - comboBoxHolderPanel.setBorder(new TitledBorder("Sparql endpoint URI")); - comboBox = new JComboBox(SparqlEndpoint.listEndpoints().toArray()); + JPanel endPointHolderPanel = new JPanel(); + endPointHolderPanel.setLayout(new GridLayout(0, 1)); + endPointHolderPanel.setBorder(new TitledBorder("Sparql endpoint")); + comboBox = new JComboBox(); comboBox.setEditable(true); AutoCompleteDecorator.decorate(this.comboBox); - comboBoxHolderPanel.add(comboBox); - c.gridx = 0; - c.gridy = 0; - add(comboBoxHolderPanel, c); + endPointHolderPanel.add(new JLabel("URL")); + endPointHolderPanel.add(comboBox); + defaultGraphField = new JTextField(); + endPointHolderPanel.add(new JLabel("Default graph URI")); + endPointHolderPanel.add(defaultGraphField); + add(endPointHolderPanel, c); + JPanel classHolderPanel = new JPanel(); + classHolderPanel.setLayout(new GridLayout(0, 1)); + classHolderPanel.setBorder(new TitledBorder("Class to learn")); + asLabelButton = new JRadioButton("label"); + asURLButton = new JRadioButton("URI"); + asURLButton.setSelected(true); + ButtonGroup bG = new ButtonGroup(); + bG.add(asLabelButton); + bG.add(asURLButton); + JPanel buttonPanel = new JPanel(); + buttonPanel.add(new JLabel("input type:")); + buttonPanel.add(asURLButton); + buttonPanel.add(asLabelButton); + + classHolderPanel.add(buttonPanel); classField = new JTextField(); classField.getDocument().addDocumentListener(this); - c.gridx = 0; - c.gridy = 1; - add(classField, c); + classHolderPanel.add(classField); + add(classHolderPanel, c); extractButton = new JButton("extract"); extractButton.addActionListener(this); - c.gridx = 0; - c.gridy = 2; + c.fill = GridBagConstraints.NONE; add(extractButton, c); + +// JToggleButton button = new JToggleButton(new AbstractAction("Options") { +// +// @Override +// public void actionPerformed(ActionEvent e) { +// JToggleButton button = (JToggleButton)e.getSource(); +// +// if(!button.getModel().isSelected()){ +// +// collapseOptionsPanel(); +// } else { +// expandOptionsPanel(); +// } +// +// +// } +// }); +// +// +// add(button, c); + + optionsPanel = new SparqlExtractOptionsPanel(); - c.gridx = 0; - c.gridy = 3; add(optionsPanel, c); +// optionsPanel.setVisible(false); + JLabel padding = new JLabel(); + c.weighty = 1.0; + add(padding, c); + + } + + private void expandOptionsPanel(){ + Dimension dialogSize = getSize (); + Dimension detailSize = optionsPanel.getPreferredSize (); + dialogSize.height += detailSize.height; + setSize (dialogSize); + optionsPanel.setVisible(true); + // Cause the new layout to take effect + invalidate (); + validate (); - } + private void collapseOptionsPanel(){ + optionsPanel.setVisible(false); + } + private void extract() { mon = new ProgressMonitor(this, "Extracting fragment", "", 0, 100); @@ -120,10 +198,12 @@ } public static SparqlKnowledgeSource showDialog() { + ExtractFromSparqlPanel panel = new ExtractFromSparqlPanel(); + int ret = JOptionPaneEx.showConfirmDialog(null, "Extract fragment from Sparql-Endpoint", - panel, + new JScrollPane(panel), JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION, panel.comboBox); @@ -132,6 +212,7 @@ } return null; } + @Override public void changedUpdate(DocumentEvent e) { @@ -186,10 +267,13 @@ // TODO Auto-generated catch block e.printStackTrace(); } + List<String> defaultGraphURIS = new ArrayList<String>(1); + defaultGraphURIS.add(defaultGraphField.getText()); + SparqlEndpoint endpoint = new SparqlEndpoint(endpointURL, defaultGraphURIS, Collections.<String>emptyList()); + task = new SPARQLTasks(endpoint); - task = new SPARQLTasks(new SparqlEndpoint(endpointURL)); - String exampleClassKBString = "\"" + getClassFromLabel() + "\""; + AutomaticPositiveExampleFinderSPARQL pos = new AutomaticPositiveExampleFinderSPARQL( task); pos.makePositiveExamplesFromConcept(exampleClassKBString); @@ -202,7 +286,7 @@ SortedSet<String> instances = new TreeSet<String>(posExamples); ks = cm.knowledgeSource(SparqlKnowledgeSource.class); - ks.getConfigurator().setUrl(endpointURL); + ks.getConfigurator().setUrl(SparqlEndpoint.getEndpointDBpedia().getURL()); ks.getConfigurator().setInstances(instances); ks.getConfigurator().setPredefinedFilter("YAGO"); ks.getConfigurator().setBreakSuperClassRetrievalAfter(optionsPanel.getBreakSuperClassRetrievalAfterValue()); @@ -226,8 +310,39 @@ mon.setProgress(0); } } - + private static class JOptionPaneEx extends JOptionPane { + /** + * + */ + private static final long serialVersionUID = -8531422911783932819L; + public static int showConfirmDialog(JComponent parent, String title, JComponent content, int messageType, + int optionType, final JComponent defaultFocusedComponent) { + + JOptionPane optionPane = new JOptionPane(content, messageType, optionType); + JDialog dlg = optionPane.createDialog(parent, title); + dlg.addWindowListener(new WindowAdapter() { + public void windowOpened(WindowEvent e) { + if (defaultFocusedComponent != null) { + defaultFocusedComponent.requestFocusInWindow(); + } + } + }); + dlg.setSize(400, 300); + dlg.setResizable(true); + dlg.setVisible(true); + Object value = optionPane.getValue(); + return (value != null) ? (Integer) value : JOptionPane.CLOSED_OPTION; + } + } + + + public static void main(String[] args){ + ExtractFromSparqlPanel.showDialog(); + } + + + } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/MetricsPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/MetricsPanel.java 2009-09-08 09:30:35 UTC (rev 1839) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/MetricsPanel.java 2009-09-10 11:37:40 UTC (rev 1840) @@ -7,6 +7,7 @@ import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; import java.awt.event.ActionEvent; +import java.io.FileNotFoundException; import java.net.URI; import java.util.ArrayList; import java.util.Collections; @@ -27,6 +28,7 @@ import org.protege.editor.core.PropertyUtil; import org.protege.editor.core.ProtegeProperties; import org.semanticweb.owl.apibinding.OWLManager; +import org.semanticweb.owl.io.UnparsableOntologyException; import org.semanticweb.owl.metrics.AxiomCountMetric; import org.semanticweb.owl.metrics.AxiomTypeMetric; import org.semanticweb.owl.metrics.DLExpressivity; @@ -306,12 +308,21 @@ clipboard.setContents(new StringSelection(sb.toString()), null); } - public static void main(String[] args) throws OWLOntologyCreationException{ + public static void main(String[] args) { String file = "file:examples/ore/tambis.owl"; + URI uri2 = URI.create("file:/home/lorenz/Desktop/Finance.owl"); + URI uri = URI.create("http://protege.stanford.edu/plugins/owl/owl-library/koala.ow"); - + OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); - OWLOntology ontology = manager.loadOntology( URI.create( file ) ); + try{ + OWLOntology ontology = manager.loadOntology( uri ); + } catch (OWLOntologyCreationException e){ + System.out.println(e.getClass()); + System.out.println(e.getClass().equals(UnparsableOntologyException.class)); +// System.out.println(e.getCause()); + e.printStackTrace(); + } JFrame test = new JFrame(); test.setBounds(200, 200, 600, 200); test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatsPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatsPanel.java 2009-09-08 09:30:35 UTC (rev 1839) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatsPanel.java 2009-09-10 11:37:40 UTC (rev 1840) @@ -156,11 +156,11 @@ Set<String> newClassesString = new HashSet<String>(); for (NamedClass nc : OREManager.getInstance().getReasoner().getTypes(ind)){ - newClassesString.add(nc.toManchesterSyntaxString(baseURI, prefixes)); + newClassesString.add(ManchesterSyntaxRenderer.renderSimple(nc)); } Set<String> oldClassesString = new HashSet<String>(); for (NamedClass nc : oldClasses){ - oldClassesString.add(nc.toManchesterSyntaxString(baseURI, prefixes)); + oldClassesString.add(ManchesterSyntaxRenderer.renderSimple(nc)); } for (String nc : oldClassesString){ if (!newClassesString.contains(nc)){ Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java 2009-09-08 09:30:35 UTC (rev 1839) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBar.java 2009-09-10 11:37:40 UTC (rev 1840) @@ -22,8 +22,8 @@ import javax.swing.JSeparator; import javax.swing.SwingUtilities; -import org.dllearner.tools.ore.TaskManager; import org.mindswap.pellet.utils.progress.ProgressMonitor; +import org.protege.editor.core.ui.list.MListDeleteButton; import org.semanticweb.owl.model.OWLAxiom; import com.clarkparsia.explanation.util.ExplanationProgressMonitor; @@ -43,18 +43,19 @@ private boolean isCanceled = false; public StatusBar() { + infoLabel = new JLabel(""); progressBar = new JProgressBar(); // progressBar.setStringPainted(true); setLayout(new BorderLayout()); - setPreferredSize(new Dimension(10, 23)); - +// setPreferredSize(new Dimension(10, 23)); + JPanel rightPanel = new JPanel(new BorderLayout()); rightPanel.add(new JLabel(new AngledLinesWindowsCornerIcon()), BorderLayout.SOUTH); rightPanel.setOpaque(false); JPanel leftPanel = new JPanel(new FlowLayout()); - CancelButton rB = new CancelButton(""); + CancelButton rB = new CancelButton("", getHeight()); rB.addActionListener(new ActionListener() { @Override @@ -65,6 +66,7 @@ }); rB.setToolTipText("Abort"); leftPanel.add(rB); + leftPanel.add(progressBar); leftPanel.add(new JSeparator(JSeparator.VERTICAL)); leftPanel.add(infoLabel); @@ -275,14 +277,16 @@ * */ private static final long serialVersionUID = -8903797519798252577L; - public CancelButton(String label) { + public CancelButton(String label, int siz) { super(label); // These statements enlarge the button so that it // becomes a circle rather than an oval. Dimension size = getPreferredSize(); - size.width = size.height = Math.max(size.width, - size.height); + size.width = size.height = Math.min(size.width, + size.height) + 5; + + setPreferredSize(size); // This call causes the JButton not to paint @@ -298,14 +302,16 @@ // a property of the RoundButton class. g.setColor(Color.YELLOW); } else { - g.setColor(Color.lightGray); + g.setColor(Color.RED);//lightGray); } g.fillOval(0, 0, getSize().width-1, getSize().height-1); - - g.setColor(Color.white); - g.drawLine(2, 2, 9 , 9); - g.drawLine(2, 9, 9 , 2); +// double height = Math.sin(45) * (getSize().width-1)/2; +// double width = Math.cos(45) * (getSize().width-1)/2; +// g.setColor(Color.white); +// g.drawLine(0, 0, (int)width, (int)height); +// g.drawLine(3, 3, getSize().width-3 , getSize().height-3); +// g.drawLine(3, 11, 11 , 3); // This call will paint the label and the // focus rectangle. Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBarSimulator.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBarSimulator.java 2009-09-08 09:30:35 UTC (rev 1839) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/StatusBarSimulator.java 2009-09-10 11:37:40 UTC (rev 1840) @@ -1,122 +0,0 @@ -package org.dllearner.tools.ore.ui; - -import java.awt.BorderLayout; -import java.awt.Container; -import java.awt.Cursor; -import java.net.URI; - -import javax.swing.JFrame; -import javax.swing.SwingWorker; -import javax.swing.UIManager; - -import org.dllearner.tools.ore.OREManager; -import org.mindswap.pellet.owlapi.Reasoner; -import org.mindswap.pellet.utils.Timer; -import org.semanticweb.owl.apibinding.OWLManager; -import org.semanticweb.owl.model.OWLDataFactory; -import org.semanticweb.owl.model.OWLOntology; -import org.semanticweb.owl.model.OWLOntologyCreationException; -import org.semanticweb.owl.model.OWLOntologyManager; - -import com.sun.java.swing.plaf.windows.WindowsLookAndFeel; - -public class StatusBarSimulator { - - private StatusBar statusBar; - private OREManager ore; - private Reasoner reasoner; - - public StatusBarSimulator(OREManager ore, Reasoner reasoner){ - this.ore = ore; - this.reasoner = reasoner; - ore.initPelletReasoner(); - - } - - public void createandShowGUI(){ - try { - UIManager.setLookAndFeel(new WindowsLookAndFeel()); - } catch (Exception e) { - - } - - JFrame frame = new JFrame(); - frame.setBounds(200, 200, 600, 200); - frame.setTitle("Status bar simulator"); - - Container contentPane = frame.getContentPane(); - contentPane.setLayout(new BorderLayout()); - - statusBar = new StatusBar(); - statusBar.setMessage("loading ontology"); -// ore.getPelletReasoner().getReasoner().getKB().getTaxonomyBuilder().setProgressMonitor(statusBar); -// reasoner.getKB().getTaxonomyBuilder().setProgressMonitor(statusBar); - - contentPane.add(statusBar, BorderLayout.SOUTH); - - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - frame.setVisible(true); - new Task(frame).execute(); - } - - class Task extends SwingWorker<Void, Void> { - - private JFrame frame; - public Task(JFrame frame){ - this.frame = frame; - } - /* - * Main task. Executed in background thread. - */ - @Override - public Void doInBackground() { - - statusBar.showProgress(true); -// statusBar.setMessage("loading ontology"); - Timer t1 = new Timer("load");t1.start(); -// reasoner.classify(); - frame.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - ore.loadOntology(); - ore.getReasoner().classify(); - - t1.stop(); - System.out.println(t1.getTotal()); - - return null; - } - - /* - * Executed in event dispatching thread - */ - @Override - public void done() {frame.setCursor(null); - statusBar.showProgress(false); - statusBar.setMessage("ontology classified"); - } - } - - public static void main(String[] args) throws OWLOntologyCreationException { - String file = "file:examples/ore/tambis.owl"; - OREManager ore = new OREManager(); - ore.setCurrentKnowledgeSource(URI.create(file)); - OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); - OWLOntology ontology = manager.loadOntology( URI.create( file ) ); - OWLDataFactory factory = manager.getOWLDataFactory(); - - // Create the reasoner and load the ontology - Reasoner reasoner = new Reasoner( manager ); - reasoner.loadOntology( ontology ); - - new StatusBarSimulator(ore, reasoner).createandShowGUI(); - } - - - - - - - - - - -} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java 2009-09-08 09:30:35 UTC (rev 1839) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/Wizard.java 2009-09-10 11:37:40 UTC (rev 1840) @@ -429,6 +429,7 @@ buttonPanel.add(buttonBox, java.awt.BorderLayout.EAST); buttonPanel.add(statusBar, BorderLayout.SOUTH); JPanel informationPanel = new JPanel(); + informationPanel.setLayout(new BorderLayout()); JScrollPane infoScrollPane = new JScrollPane(); informationsField = new JTextArea(); @@ -446,7 +447,7 @@ informationsField.setFont(new Font("Serif", Font.PLAIN, 14)); informationsField.setWrapStyleWord(true); infoScrollPane.setViewportView(informationsField); - informationPanel.add(infoScrollPane); + informationPanel.add(infoScrollPane, BorderLayout.EAST); JPanel buttonInformationPanel = new JPanel(); buttonInformationPanel.setLayout(new BorderLayout()); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java 2009-09-08 09:30:35 UTC (rev 1839) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java 2009-09-10 11:37:40 UTC (rev 1840) @@ -257,17 +257,20 @@ wizard.setLeftPanel(1); } if(panelDescriptor.equals("CLASS_CHOOSE_OWL_PANEL") || panelDescriptor.equals("CLASS_CHOOSE_SPARQL_PANEL")){ - wizard.setLeftPanel(2); + wizard.setLeftPanel(3); } if(panelDescriptor.equals("LEARNING_PANEL")){ - wizard.setLeftPanel(3); + wizard.setLeftPanel(4); } if(panelDescriptor.equals("REPAIR_PANEL")){ - wizard.setLeftPanel(4); + wizard.setLeftPanel(5); } if(panelDescriptor.equals("SAVE_PANEL")){ - wizard.setLeftPanel(5); + wizard.setLeftPanel(6); } + if(panelDescriptor.equals(UnsatisfiableExplanationPanelDescriptor.IDENTIFIER)){ + wizard.setLeftPanel(2); + } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java 2009-09-08 09:30:35 UTC (rev 1839) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/KnowledgeSourcePanelDescriptor.java 2009-09-10 11:37:40 UTC (rev 1840) @@ -25,20 +25,24 @@ import java.awt.event.ActionListener; import java.io.File; import java.net.URI; +import java.net.URISyntaxException; import javax.swing.JFileChooser; +import javax.swing.JOptionPane; import javax.swing.SwingWorker; import javax.swing.filechooser.FileFilter; import org.dllearner.tools.ore.OREManager; import org.dllearner.tools.ore.RecentManager; -import org.dllearner.tools.ore.ui.ExtractFromSparqlPanel; +import org.dllearner.tools.ore.ui.ExtractFromSparqlDialog; import org.dllearner.tools.ore.ui.LinkLabel; import org.dllearner.tools.ore.ui.StatusBar; import org.dllearner.tools.ore.ui.wizard.WizardPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.panels.KnowledgeSourcePanel; import org.protege.editor.core.ui.OpenFromURIPanel; import org.protege.editor.core.ui.error.ErrorLogPanel; +import org.semanticweb.owl.io.UnparsableOntologyException; +import org.semanticweb.owl.model.OWLOntologyCreationException; /** * Wizard panel descriptor where knowledge source is selected. @@ -53,6 +57,8 @@ private KnowledgeSourcePanel knowledgePanel; + private URI currentURI; + public KnowledgeSourcePanelDescriptor() { knowledgePanel = new KnowledgeSourcePanel(); @@ -99,9 +105,8 @@ public void loadOntology(URI uri){ OREManager.getInstance().setCurrentKnowledgeSource(uri); + currentURI = uri; - RecentManager.getInstance().addURI(uri); - RecentManager.getInstance().serialize(); new OntologyLoadingTask(getWizard().getStatusBar()).execute(); } @@ -157,10 +162,13 @@ } private void handleLoadFromSparqlEndpoint(){ + ExtractFromSparqlDialog dialog = new ExtractFromSparqlDialog(getWizard().getDialog()); + int ret = dialog.showDialog(); + if(ret == ExtractFromSparqlDialog.OK_RETURN_CODE){ + OREManager.getInstance().setCurrentKnowledgeSource(dialog.getKnowledgeSource()); + new OntologyLoadingTask(getWizard().getStatusBar()).execute(); + } - OREManager.getInstance().setCurrentKnowledgeSource( - ExtractFromSparqlPanel.showDialog()); - new OntologyLoadingTask(getWizard().getStatusBar()).execute(); } private void handleOpenFromRecent(URI uri){ @@ -195,31 +203,69 @@ statusBar.setProgressTitle("Loading ontology"); try{ oreMan.initPelletReasoner(); + RecentManager.getInstance().addURI(currentURI); + RecentManager.getInstance().serialize(); + if(oreMan.consistentOntology()){ + statusBar.setProgressTitle("Classifying ontology"); + oreMan.getReasoner().classify(); + statusBar.setProgressTitle("Realising ontology"); + oreMan.getReasoner().realise(); + } - } catch(Throwable e){ + } catch(URISyntaxException e){ + + cancel(true); statusBar.showProgress(false); - statusBar.setProgressTitle("Error occured"); + statusBar.setProgressTitle(""); getWizard().getDialog().setCursor(null); - ErrorLogPanel.showErrorDialog(e); + JOptionPane.showMessageDialog(getWizard().getDialog(), + "Error loading ontology. Please check URI and try again.", + "Ontology loading error", + JOptionPane.ERROR_MESSAGE); + + + +// ErrorLogPanel.showErrorDialog(e); return null; + } catch(OWLOntologyCreationException e){ + + cancel(true); + statusBar.showProgress(false); + statusBar.setProgressTitle(""); + getWizard().getDialog().setCursor(null); + if(e.getClass().equals(UnparsableOntologyException.class)){ + JOptionPane.showMessageDialog(getWizard().getDialog(), + "Error loading ontology. A syntax error in the ontology has been detected.", + "Ontology loading error", + JOptionPane.ERROR_MESSAGE); + } else {// if(e.getCause() instanceof FileNotFoundException){ + JOptionPane.showMessageDialog(getWizard().getDialog(), + "Error loading ontology. File is not existing at given URI. Please check whether you " + + "have entered the correct location and then try again.", + "Ontology loading error", + JOptionPane.ERROR_MESSAGE); + } + + + + +// ErrorLogPanel.showErrorDialog(e); +// return null; } - if(oreMan.consistentOntology()){ - statusBar.setProgressTitle("Classifying ontology"); - oreMan.getReasoner().classify(); - statusBar.setProgressTitle("Realising ontology"); - oreMan.getReasoner().realise(); - } + return null; } @Override public void done() { - statusBar.showProgress(false); - statusBar.setProgressTitle("Done"); - getWizard().getDialog().setCursor(null); - getWizard().setNextFinishButtonEnabled(true); - updateMetrics(); + if(!isCancelled()){ + statusBar.showProgress(false); + statusBar.setProgressTitle("Done"); + getWizard().getDialog().setCursor(null); + getWizard().setNextFinishButtonEnabled(true); + updateMetrics(); + } } } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java 2009-09-08 09:30:35 UTC (rev 1839) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java 2009-09-10 11:37:40 UTC (rev 1840) @@ -38,6 +38,7 @@ import org.dllearner.core.LearningAlgorithm; import org.dllearner.learningproblems.EvaluatedDescriptionClass; import org.dllearner.tools.ore.OREManager; +import org.dllearner.tools.ore.OREManagerListener; import org.dllearner.tools.ore.ui.wizard.WizardPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.panels.LearningPanel; @@ -48,7 +49,7 @@ * @author Lorenz Buehmann * */ -public class LearningPanelDescriptor extends WizardPanelDescriptor implements ActionListener, ListSelectionListener{ +public class LearningPanelDescriptor extends WizardPanelDescriptor implements ActionListener, ListSelectionListener, OREManagerListener{ public static final String IDENTIFIER = "LEARNING_PANEL"; public static final String INFORMATION = "Press <Start> to start learning. While it is running, " @@ -265,4 +266,11 @@ } + + + @Override + public void activeOntologyChanged() { + learnPanel.getResultTable().clear(); + + } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/IntroductionPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/IntroductionPanel.java 2009-09-08 09:30:35 UTC (rev 1839) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/IntroductionPanel.java 2009-09-10 11:37:40 UTC (rev 1840) @@ -79,20 +79,23 @@ setBorder(BorderFactory.createEmptyBorder(12, 6, 12, 12)); jScrollPane1.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); jScrollPane1.setViewportBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); - instructionsField.setBackground(UIManager.getDefaults().getColor("control")); + Color color = UIManager.getColor("Panel.background"); + instructionsField.setBackground(new Color(color.getRed(), color.getGreen(), color.getBlue())); + instructionsField.setOpaque(true); instructionsField.setColumns(20); instructionsField.setEditable(false); instructionsField.setLineWrap(true); instructionsField.setRows(5); + instructionsField.setFont(new Font("Serif", Font.PLAIN, 14)); - instructionsField.setText("This is an test of a wizard dialog, which allows a knowledge engineer to select " - + "a class of an ontology which should be (re)learned.\n" - + "On the next page, choose a OWL file or a SPARQL-URL, that contains an ontology. After that " - + "you might be able to select a class in the ontology to learn. When the class you selected is learned" - + ", you are able to add the axiom to the ontology and after all you might be able to repair if necessary. "); + instructionsField.setText("This is a tool for debugging end enriching OWL-ontologies. " + + "You are able to check ontologies for inconsistency and unsatisfiable classes.\n" + + "If some of that is detected, helpful explanations can be generated to find out the relevant axioms. " + + "Another feature is to get equivalent class expressions for atomic classes, using an intelligent and efficient\n" + + "machine learning algorithm. TODO...Jens "); instructionsField.setWrapStyleWord(true); jScrollPane1.setViewportView(instructionsField); - + welcomeTitle = new JLabel(); welcomeTitle.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, new Color(0, 0, 0))); welcomeTitle.setFont(new java.awt.Font("MS Sans Serif", Font.BOLD, 14)); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/KnowledgeSourcePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/KnowledgeSourcePanel.java 2009-09-08 09:30:35 UTC (rev 1839) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/KnowledgeSourcePanel.java 2009-09-10 11:37:40 UTC (rev 1840) @@ -68,6 +68,8 @@ public KnowledgeSourcePanel() { + + openFromRecentLinks = new ArrayList<LinkLabel>(); // setBackground(Color.WHITE); new LeftPanel(1); contentPanel = getContentPanel(); @@ -129,7 +131,7 @@ getFont().deriveFont(Font.BOLD), Color.GRAY), BorderFactory.createEmptyBorder(20, 20, 20, 20))); - openFromRecentLinks = new ArrayList<LinkLabel>(); + LinkLabel link; for (final URI uri : RecentManager.getInstance().getURIs()) { link = new LinkLabel(uri.toString()); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LeftPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LeftPanel.java 2009-09-08 09:30:35 UTC (rev 1839) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LeftPanel.java 2009-09-10 11:37:40 UTC (rev 1840) @@ -44,17 +44,19 @@ */ public LeftPanel(int i){ - jLabel = new JLabel[6]; + jLabel = new JLabel[7]; setBackground(new java.awt.Color(255, 255, 255)); JPanel panel2 = new JPanel(); panel2.setBackground(new java.awt.Color(255, 255, 255)); panel2.setLayout(new GridLayout(5, 1, 0, 10)); jLabel[0] = new JLabel("1. Introduction"); jLabel[1] = new JLabel("2. Knowledge Source"); - jLabel[2] = new JLabel("3. Choose Class"); - jLabel[3] = new JLabel("4. Learn"); - jLabel[4] = new JLabel("5. Repair"); - jLabel[5] = new JLabel("6. Save/Exit"); + jLabel[2] = new JLabel("3. Debugging"); + jLabel[3] = new JLabel("4. Choose Class"); + jLabel[4] = new JLabel("5. Learn"); + jLabel[5] = new JLabel("6. Repair"); + jLabel[6] = new JLabel("7. Save/Exit"); + jLabel[i].setFont(jLabel[i].getFont().deriveFont(Font.BOLD)); for(JLabel current : jLabel){ @@ -76,13 +78,14 @@ setBackground(new java.awt.Color(255, 255, 255)); JPanel panel2 = new JPanel(); panel2.setBackground(new java.awt.Color(255, 255, 255)); - panel2.setLayout(new GridLayout(6, 1, 0, 10)); + panel2.setLayout(new GridLayout(7, 1, 0, 10)); jLabel[0] = new JLabel("1. Introduction"); jLabel[1] = new JLabel("2. Knowledge Source"); - jLabel[2] = new JLabel("3. Choose Class"); - jLabel[3] = new JLabel("4. Learning"); - jLabel[4] = new JLabel("5. Repair"); - jLabel[5] = new JLabel("6. Save/Exit"); + jLabel[2] = new JLabel("3. Debugging"); + jLabel[3] = new JLabel("4. Choose Class"); + jLabel[4] = new JLabel("5. Learn"); + jLabel[5] = new JLabel("6. Repair"); + jLabel[6] = new JLabel("7. Save/Exit"); jLabel[i].setFont(jLabel[i].getFont().deriveFont(Font.BOLD)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2009-09-29 08:26:49
|
Revision: 1868 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1868&view=rev Author: lorenz_b Date: 2009-09-29 08:26:40 +0000 (Tue, 29 Sep 2009) Log Message: ----------- started auto learning mode changed consistency checking in org.dllearner.learningproblems.ClassLearningProblem Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/learningproblems/ClassLearningProblem.java trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/HelpablePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTableModel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/LearningOptionsPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/RepairPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/UnsatisfiableExplanationPanel.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/AutoLearnPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ManualLearnPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ManualLearnPanel.java Removed Paths: ------------- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LearningPanel.java Modified: trunk/src/dl-learner/org/dllearner/learningproblems/ClassLearningProblem.java =================================================================== --- trunk/src/dl-learner/org/dllearner/learningproblems/ClassLearningProblem.java 2009-09-28 14:35:48 UTC (rev 1867) +++ trunk/src/dl-learner/org/dllearner/learningproblems/ClassLearningProblem.java 2009-09-29 08:26:40 UTC (rev 1868) @@ -165,8 +165,11 @@ double protusion = (additionalInstances.size() + coveredInstances.size() == 0) ? 0 : coveredInstances.size()/(double)(coveredInstances.size()+additionalInstances.size()); // for each description with less than 100% coverage, we check whether it is // leads to an inconsistent knowledge base - boolean isConsistent = coverage >= 0.999999 || isConsistent(description); + // workaround due to a bug (see http://sourceforge.net/tracker/?func=detail&aid=2866610&group_id=203619&atid=986319) +// boolean isConsistent = coverage >= 0.999999 || isConsistent(description); + boolean isConsistent = isConsistent(description); + // we check whether the axiom already follows from the knowledge base boolean followsFromKB = reasoner.isSuperClassOf(description, classToDescribe); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2009-09-28 14:35:48 UTC (rev 1867) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREApplication.java 2009-09-29 08:26:40 UTC (rev 1868) @@ -39,10 +39,11 @@ import org.apache.log4j.PropertyConfigurator; import org.dllearner.tools.ore.ui.wizard.Wizard; import org.dllearner.tools.ore.ui.wizard.WizardPanelDescriptor; +import org.dllearner.tools.ore.ui.wizard.descriptors.AutoLearnPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.ClassChoosePanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.IntroductionPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.KnowledgeSourcePanelDescriptor; -import org.dllearner.tools.ore.ui.wizard.descriptors.LearningPanelDescriptor; +import org.dllearner.tools.ore.ui.wizard.descriptors.ManualLearnPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.RepairPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.SavePanelDescriptor; @@ -124,9 +125,12 @@ WizardPanelDescriptor descriptor5 = new ClassChoosePanelDescriptor(); wizard.registerWizardPanel(ClassChoosePanelDescriptor.IDENTIFIER, descriptor5); - WizardPanelDescriptor descriptor6 = new LearningPanelDescriptor(); - wizard.registerWizardPanel(LearningPanelDescriptor.IDENTIFIER, descriptor6); + WizardPanelDescriptor descriptor9 = new AutoLearnPanelDescriptor(); + wizard.registerWizardPanel(AutoLearnPanelDescriptor.IDENTIFIER, descriptor9); + WizardPanelDescriptor descriptor6 = new ManualLearnPanelDescriptor(); + wizard.registerWizardPanel(ManualLearnPanelDescriptor.IDENTIFIER, descriptor6); + WizardPanelDescriptor descriptor7 = new RepairPanelDescriptor(); wizard.registerWizardPanel(RepairPanelDescriptor.IDENTIFIER, descriptor7); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-09-28 14:35:48 UTC (rev 1867) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OREManager.java 2009-09-29 08:26:40 UTC (rev 1868) @@ -64,6 +64,7 @@ private int maxExecutionTimeInSeconds; private int maxNrOfResults; private double threshold; + private int minInstanceCount; private List<OREManagerListener> listeners; @@ -268,6 +269,14 @@ return currentClass2Learn; } + public void setMinInstanceCount(int instanceCount){ + this.minInstanceCount = instanceCount; + } + + public int getMinInstanceCount(){ + return minInstanceCount; + } + public void init(){ this.setLearningProblem(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java 2009-09-28 14:35:48 UTC (rev 1867) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/LostEntailmentsChecker.java 2009-09-29 08:26:40 UTC (rev 1868) @@ -24,7 +24,10 @@ import org.semanticweb.owl.model.OWLSubClassAxiom; import org.semanticweb.owl.model.RemoveAxiom; +import uk.ac.manchester.cs.owl.modularity.ModuleType; + import com.clarkparsia.modularity.IncrementalClassifier; +import com.clarkparsia.modularity.ModularityUtils; public class LostEntailmentsChecker { @@ -114,7 +117,11 @@ return impact; } - public Set<OWLAxiom> computeStructuralImpact(List<OWLOntologyChange> changes) {reasoner.refresh(); + public Set<OWLAxiom> computeStructuralImpact(List<OWLOntologyChange> changes) { + System.out.println("Computing structural impact"); + System.out.println("Refreshing reasoner"); + reasoner.refresh(); + System.out.println("Reasoner refreshed"); Set<OWLAxiom> possibleLosts = new HashSet<OWLAxiom>(); Set<OWLAxiom> realLosts = new HashSet<OWLAxiom>(); OWLAxiom axiom; @@ -139,6 +146,7 @@ } } }else if (axiom instanceof OWLDisjointClassesAxiom) { + Set<OWLDescription> disjointClasses = ((OWLDisjointClassesAxiom) axiom).getDescriptions(); boolean complex = false; for (OWLDescription dis : disjointClasses) { @@ -156,6 +164,7 @@ for (OWLDescription dis : new ArrayList<OWLDescription>(disjoints)) { if (!dis.equals(factory.getOWLNothing())) { disjoints.remove(dis); + Set<? extends OWLDescription> descendants = SetUtils.union(reasoner.getDescendantClasses(dis.asOWLClass())); descendants.removeAll(reasoner.getEquivalentClasses(factory.getOWLNothing())); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java 2009-09-28 14:35:48 UTC (rev 1867) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/GraphicalCoveragePanel.java 2009-09-29 08:26:40 UTC (rev 1868) @@ -31,6 +31,8 @@ import java.util.Set; import java.util.Vector; +import javax.swing.JPanel; + import org.dllearner.core.EvaluatedDescription; import org.dllearner.core.owl.Individual; import org.dllearner.learningproblems.EvaluatedDescriptionClass; @@ -44,7 +46,7 @@ * @author Christian Koetteritzsch * */ -public class GraphicalCoveragePanel extends HelpablePanel implements MouseMotionListener{ +public class GraphicalCoveragePanel extends JPanel implements MouseMotionListener{ private static final long serialVersionUID = 855436961912515267L; private static final int HEIGHT = 200; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/HelpablePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/HelpablePanel.java 2009-09-28 14:35:48 UTC (rev 1867) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/HelpablePanel.java 2009-09-29 08:26:40 UTC (rev 1868) @@ -1,27 +1,23 @@ package org.dllearner.tools.ore.ui; -import java.awt.BorderLayout; import java.awt.Dimension; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; -import javax.swing.BorderFactory; +import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JButton; -import javax.swing.JComboBox; import javax.swing.JFrame; -import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; -import javax.swing.JTextField; +import javax.swing.JRadioButton; import javax.swing.border.TitledBorder; -import javax.swing.text.JTextComponent; -import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator; - public class HelpablePanel extends JPanel { /** @@ -31,10 +27,12 @@ private JButton helpButton; private String helpText = "TODO"; - + private GridBagConstraints c; public HelpablePanel(){ - setLayout(new BorderLayout()); + setLayout(new GridBagLayout()); + c = new GridBagConstraints(); +// setLayout(new BorderLayout()); helpButton = new JButton(new ImageIcon(this.getClass().getResource("Help-16x16.png"))); helpButton.setBorderPainted(false); helpButton.setContentAreaFilled(false); @@ -67,15 +65,26 @@ } }); - JPanel holderPanel = new JPanel(); - holderPanel.setLayout(new BorderLayout()); - holderPanel.add(helpButton, BorderLayout.NORTH); - add(holderPanel, BorderLayout.EAST); +// JPanel holderPanel = new JPanel(); +// holderPanel.setLayout(new BorderLayout()); +// holderPanel.add(helpButton, BorderLayout.EAST); +// add(holderPanel, BorderLayout.NORTH); + c.anchor = GridBagConstraints.FIRST_LINE_END; + c.weightx = 0.0; + c.weighty = 0.0; + c.gridx = 1; + c.gridy = 0; + add(helpButton, c); } public HelpablePanel(JPanel content){ this(); - add(content, BorderLayout.CENTER); + c.gridx = 0; + c.gridy = 1; + c.weightx = 1.0; + c.weighty = 1.0; + c.fill = GridBagConstraints.BOTH; + add(content, c); } public void setHelpText(String helpText){ @@ -85,27 +94,27 @@ public static void main(String[] args){ JFrame frame = new JFrame(); - JPanel endPointHolderPanel = new JPanel(); - endPointHolderPanel.setLayout(new GridLayout(0, 1)); -// endPointHolderPanel.setBorder(new TitledBorder("SPARQL endpoint")); - JComboBox comboBox = new JComboBox(); - comboBox.setEditable(true); - comboBox.setActionCommand("endpoints"); + JPanel learnTypePanel = new JPanel(); + learnTypePanel.setLayout(new GridLayout(0, 1)); + JRadioButton equivalentClassButton = new JRadioButton("Learn equivalent class expressions", true); + equivalentClassButton.setActionCommand("equivalent"); + equivalentClassButton.setSelected(true); + JRadioButton superClassButton = new JRadioButton("Learn super class expressions"); + superClassButton.setActionCommand("super"); + + ButtonGroup learningType = new ButtonGroup(); + learningType.add(equivalentClassButton); + learningType.add(superClassButton); + learnTypePanel.add(equivalentClassButton); + learnTypePanel.add(superClassButton); + HelpablePanel learnTypeHelpPanel = new HelpablePanel(learnTypePanel); + learnTypeHelpPanel.setBorder(new TitledBorder("Learning type")); - endPointHolderPanel.add(new JLabel("URL")); - endPointHolderPanel.add(comboBox); - JTextField defaultGraphField = new JTextField(); - endPointHolderPanel.add(new JLabel("Default graph URI (optional)")); - endPointHolderPanel.add(defaultGraphField); - HelpablePanel endPointHelpPanel = new HelpablePanel(endPointHolderPanel); - endPointHelpPanel.setBorder(new TitledBorder("SPARQL endpoint")); - - - frame.add(endPointHelpPanel); - frame.setSize(600, 600); + frame.add(learnTypeHelpPanel); + frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTableModel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTableModel.java 2009-09-28 14:35:48 UTC (rev 1867) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ImpactTableModel.java 2009-09-29 08:26:40 UTC (rev 1868) @@ -160,6 +160,7 @@ @Override public void repairPlanChanged() { + TaskManager.getInstance().setTaskStarted("Computing impact..."); new LostEntailmentsComputingTask().execute(); } @@ -182,7 +183,7 @@ @Override public Void doInBackground() { - TaskManager.getInstance().setTaskStarted("Computing impact"); + impMan.computeImpactForAxiomsInRepairPlan(); return null; } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/LearningOptionsPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/LearningOptionsPanel.java 2009-09-28 14:35:48 UTC (rev 1867) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/LearningOptionsPanel.java 2009-09-29 08:26:40 UTC (rev 1868) @@ -32,7 +32,7 @@ * @author Christian Koetteritzsch * */ -public class LearningOptionsPanel extends HelpablePanel { +public class LearningOptionsPanel extends JPanel{ private static final long serialVersionUID = 2190682281812478244L; @@ -57,7 +57,6 @@ * Constructor for the Option Panel. */ public LearningOptionsPanel() { - super(); JPanel holderPanel = new JPanel(); holderPanel.setLayout(new BorderLayout()); labelPanel = new JPanel(); @@ -122,7 +121,7 @@ learnTypePanel.add(equivalentClassButton); learnTypePanel.add(superClassButton); - holderPanel.add(BorderLayout.NORTH, learnTypePanel); +// holderPanel.add(BorderLayout.NORTH, learnTypePanel); holderPanel.add(BorderLayout.WEST, labelPanel); holderPanel.add(BorderLayout.CENTER, sliderPanel); add(holderPanel, BorderLayout.CENTER); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java 2009-09-28 14:35:48 UTC (rev 1867) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/ManchesterSyntaxRenderer.java 2009-09-29 08:26:40 UTC (rev 1868) @@ -98,6 +98,12 @@ } } } +// for(OWLClass cl : ExplanationManager.getInstance(OREManager.getInstance()).getUnsatisfiableClasses()){ +// if(cl.toString().equals(token)){ +// unsatClass = true; +// break; +// } +// } String color = "black"; if(unsatClass){ color = "red"; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java 2009-09-28 14:35:48 UTC (rev 1867) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/WizardController.java 2009-09-29 08:26:40 UTC (rev 1868) @@ -29,7 +29,7 @@ import org.dllearner.tools.ore.ui.wizard.descriptors.ClassChoosePanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.InconsistencyExplanationPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.KnowledgeSourcePanelDescriptor; -import org.dllearner.tools.ore.ui.wizard.descriptors.LearningPanelDescriptor; +import org.dllearner.tools.ore.ui.wizard.descriptors.ManualLearnPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.RepairPanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.SavePanelDescriptor; import org.dllearner.tools.ore.ui.wizard.descriptors.UnsatisfiableExplanationPanelDescriptor; @@ -89,7 +89,7 @@ Object nextPanelDescriptor = currentPanelDescriptor.getNextPanelDescriptor(); WizardPanelDescriptor nextDescriptor = model.getPanelHashMap().get(nextPanelDescriptor); - + if (currentPanelDescriptor.getPanelDescriptorIdentifier().equals( KnowledgeSourcePanelDescriptor.IDENTIFIER)) { @@ -140,14 +140,21 @@ } else if (currentPanelDescriptor.getPanelDescriptorIdentifier().equals(UnsatisfiableExplanationPanelDescriptor.IDENTIFIER)) { nextPanelDescriptor = ClassChoosePanelDescriptor.IDENTIFIER; ((ClassChoosePanelDescriptor) nextDescriptor).refill(); - } else if (currentPanelDescriptor.getPanelDescriptorIdentifier().equals(ClassChoosePanelDescriptor.IDENTIFIER)) { + } +// else if (currentPanelDescriptor.getPanelDescriptorIdentifier().equals(ClassChoosePanelDescriptor.IDENTIFIER)) { // ore.makeOWAToCWA(); // ore.setLearningProblem(); - LearningPanelDescriptor learnDescriptor = ((LearningPanelDescriptor) model +// LearningPanelDescriptor learnDescriptor = ((LearningPanelDescriptor) model +// .getPanelHashMap().get(nextPanelDescriptor)); +// learnDescriptor.resetPanel(); + + else if(nextPanelDescriptor.equals(ManualLearnPanelDescriptor.IDENTIFIER)){ + ManualLearnPanelDescriptor learnDescriptor = ((ManualLearnPanelDescriptor) model .getPanelHashMap().get(nextPanelDescriptor)); learnDescriptor.resetPanel(); - - } else if(nextPanelDescriptor.equals(ClassChoosePanelDescriptor.IDENTIFIER)){ + + + } else if(nextPanelDescriptor.equals(ClassChoosePanelDescriptor.IDENTIFIER)){ ClassChoosePanelDescriptor classChoose = ((ClassChoosePanelDescriptor) model .getPanelHashMap().get(nextPanelDescriptor)); classChoose.resetPanel(); @@ -217,8 +224,8 @@ backPanelDescriptor = RepairPanelDescriptor.IDENTIFIER; } } - } else if(currentPanelDescriptor.getPanelDescriptorIdentifier().equals(LearningPanelDescriptor.IDENTIFIER)){ - LearningPanelDescriptor learnDescriptor = (LearningPanelDescriptor) currentPanelDescriptor; + } else if(currentPanelDescriptor.getPanelDescriptorIdentifier().equals(ManualLearnPanelDescriptor.IDENTIFIER)){ + ManualLearnPanelDescriptor learnDescriptor = (ManualLearnPanelDescriptor) currentPanelDescriptor; if(learnDescriptor.getLa() != null && learnDescriptor.getLa().isRunning()){ learnDescriptor.getLa().stop(); learnDescriptor.getTimer().cancel(); Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/AutoLearnPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/AutoLearnPanelDescriptor.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/AutoLearnPanelDescriptor.java 2009-09-29 08:26:40 UTC (rev 1868) @@ -0,0 +1,167 @@ +package org.dllearner.tools.ore.ui.wizard.descriptors; + +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; +import java.util.concurrent.ExecutionException; + +import javax.swing.SwingUtilities; +import javax.swing.SwingWorker; + +import org.dllearner.core.owl.NamedClass; +import org.dllearner.learningproblems.EvaluatedDescriptionClass; +import org.dllearner.tools.ore.OREManager; +import org.dllearner.tools.ore.TaskManager; +import org.dllearner.tools.ore.ui.wizard.WizardPanelDescriptor; +import org.dllearner.tools.ore.ui.wizard.panels.AutoLearnPanel; + +public class AutoLearnPanelDescriptor extends WizardPanelDescriptor { + + /** + * Identification string for class choose panel. + */ + public static final String IDENTIFIER = "AUTO_LEARN_PANEL"; + /** + * Information string for class choose panel. + */ + public static final String INFORMATION = ""; + + private AutoLearnPanel autoLearnPanel; + + /** + * Constructor creates new panel and adds listener to list. + */ + public AutoLearnPanelDescriptor() { + autoLearnPanel = new AutoLearnPanel(); + setPanelDescriptorIdentifier(IDENTIFIER); + setPanelComponent(autoLearnPanel); + } + + @Override + public Object getNextPanelDescriptor() { + return RepairPanelDescriptor.IDENTIFIER; + } + + @Override + public Object getBackPanelDescriptor() { + return ClassChoosePanelDescriptor.IDENTIFIER; + } + + @Override + public void aboutToDisplayPanel() { + getWizard().getInformationField().setText(INFORMATION); + fillClassesTable(); + } + + public void fillClassesTable(){ + new ClassRetrievingTask().execute(); + } + + + /** + * Inner class to get all atomic classes in a background thread. + * @author Lorenz Buehmann + * + */ + class ClassRetrievingTask extends SwingWorker<Set<NamedClass>, Void> { + + + @Override + public Set<NamedClass> doInBackground() { + + OREManager.getInstance().makeOWAToCWA(); + Set<NamedClass> classes = new TreeSet<NamedClass>(OREManager.getInstance().getReasoner().getNamedClasses()); + classes.remove(new NamedClass("http://www.w3.org/2002/07/owl#Thing")); + Iterator<NamedClass> iter = classes.iterator(); + while(iter.hasNext()){ + NamedClass nc = iter.next(); + int instanceCount = OREManager.getInstance().getReasoner().getIndividuals(nc).size(); + if(instanceCount < OREManager.getInstance().getMinInstanceCount()){ + iter.remove(); + } + } + return classes; + } + + @Override + public void done() { + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + Set<NamedClass> classes = Collections.emptySet(); + try { + classes = get(); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ExecutionException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + autoLearnPanel.fillClassesTable(classes); + TaskManager.getInstance().setTaskFinished(); + } + }); + } + } + + class EquivalentLearningTask extends SwingWorker<Void, Void> { + + + @Override + public Void doInBackground() { + OREManager.getInstance().setLearningType("equivalence"); + OREManager.getInstance().setLearningProblem(); + OREManager.getInstance().setLearningAlgorithm(); + OREManager.getInstance().getLa().start(); + return null; + } + + @Override + public void done() { + SwingUtilities.invokeLater(new Runnable() { + + @SuppressWarnings("unchecked") + @Override + public void run() { + + autoLearnPanel.fillEquivalentClassExpressionsTable((List<EvaluatedDescriptionClass>)OREManager.getInstance().getLa(). + getCurrentlyBestEvaluatedDescriptions(OREManager.getInstance().getMaxNrOfResults(), OREManager.getInstance().getThreshold(), true)); + TaskManager.getInstance().setTaskFinished(); + } + }); + } + } + + class SubclassLearningTask extends SwingWorker<Void, Void> { + + + @Override + public Void doInBackground() { + OREManager.getInstance().setLearningType("superClass"); + OREManager.getInstance().setLearningProblem(); + OREManager.getInstance().setLearningAlgorithm(); + OREManager.getInstance().getLa().start(); + return null; + } + + @Override + public void done() { + SwingUtilities.invokeLater(new Runnable() { + + @SuppressWarnings("unchecked") + @Override + public void run() { + + autoLearnPanel.fillSubClassExpressionsTable((List<EvaluatedDescriptionClass>)OREManager.getInstance().getLa(). + getCurrentlyBestEvaluatedDescriptions(OREManager.getInstance().getMaxNrOfResults(), OREManager.getInstance().getThreshold(), true)); + TaskManager.getInstance().setTaskFinished(); + } + }); + } + } +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java 2009-09-28 14:35:48 UTC (rev 1867) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ClassChoosePanelDescriptor.java 2009-09-29 08:26:40 UTC (rev 1868) @@ -20,6 +20,8 @@ package org.dllearner.tools.ore.ui.wizard.descriptors; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -50,7 +52,7 @@ * @author Lorenz Buehmann * */ -public class ClassChoosePanelDescriptor extends WizardPanelDescriptor implements ListSelectionListener, ChangeListener{ +public class ClassChoosePanelDescriptor extends WizardPanelDescriptor implements ListSelectionListener, ChangeListener, ActionListener{ /** * Identification string for class choose panel. @@ -73,6 +75,7 @@ classChoosePanel = new ClassChoosePanel(); classChoosePanel.addSelectionListener(this); classChoosePanel.addChangeListener(this); + classChoosePanel.addActionsListeners(this); setPanelDescriptorIdentifier(IDENTIFIER); setPanelComponent(classChoosePanel); @@ -83,7 +86,12 @@ @Override public Object getNextPanelDescriptor() { - return LearningPanelDescriptor.IDENTIFIER; + if(isAutoLearningMode()){ + return AutoLearnPanelDescriptor.IDENTIFIER; + } else { + return ManualLearnPanelDescriptor.IDENTIFIER; + } + } @Override @@ -116,7 +124,7 @@ private void setNextButtonAccordingToConceptSelected() { - if (classChoosePanel.getClassesTable().getSelectedRow() >= 0){ + if (classChoosePanel.getClassesTable().getSelectedRow() >= 0 || classChoosePanel.isAutoLearnMode()){ getWizard().setNextFinishButtonEnabled(true); }else{ getWizard().setNextFinishButtonEnabled(false); @@ -192,4 +200,19 @@ }); } } + + @Override + public void actionPerformed(ActionEvent e) { + if(e.getActionCommand().equals("auto")){ + classChoosePanel.setAutoLearningPanel(true); + } else { + classChoosePanel.setAutoLearningPanel(false); + } + setNextButtonAccordingToConceptSelected(); + + } + + public boolean isAutoLearningMode(){ + return classChoosePanel.isAutoLearnMode(); + } } Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java 2009-09-28 14:35:48 UTC (rev 1867) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java 2009-09-29 08:26:40 UTC (rev 1868) @@ -1,296 +0,0 @@ -/** - * Copyright (C) 2007-2008, 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.tools.ore.ui.wizard.descriptors; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.List; -import java.util.Timer; -import java.util.TimerTask; -import java.util.concurrent.ExecutionException; - -import javax.swing.SwingUtilities; -import javax.swing.SwingWorker; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; - -import org.dllearner.algorithms.celoe.CELOE; -import org.dllearner.core.EvaluatedDescription; -import org.dllearner.core.LearningAlgorithm; -import org.dllearner.learningproblems.EvaluatedDescriptionClass; -import org.dllearner.tools.ore.OREManager; -import org.dllearner.tools.ore.OREManagerListener; -import org.dllearner.tools.ore.TaskManager; -import org.dllearner.tools.ore.ui.wizard.WizardPanelDescriptor; -import org.dllearner.tools.ore.ui.wizard.panels.LearningPanel; - - - -/** - * Wizard panel descriptor where learned class description are shown. - * @author Lorenz Buehmann - * - */ -public class LearningPanelDescriptor extends WizardPanelDescriptor implements ActionListener, ListSelectionListener, OREManagerListener{ - - public static final String IDENTIFIER = "LEARNING_PANEL"; - public static final String INFORMATION = "Press <Start> to start learning. While it is running, " - + "temporary results are shown in the list above. Select one of them and press <Next>"; - - private LearningPanel learnPanel; - private LearningTask learningTask; - private CELOE la; - private Timer timer; - - - public LearningPanelDescriptor() { - - learnPanel = new LearningPanel(); - learnPanel.addStartButtonListener(this); - learnPanel.addStopButtonListener(this); - learnPanel.addSelectionListener(this); - - setPanelDescriptorIdentifier(IDENTIFIER); - setPanelComponent(learnPanel); - - - } - - @Override - public Object getNextPanelDescriptor() { - EvaluatedDescriptionClass newClassDesc = OREManager.getInstance().getNewClassDescription(); - if(newClassDesc != null && newClassDesc.getAccuracy() == 1.0){ - return SavePanelDescriptor.IDENTIFIER; - } else { - return RepairPanelDescriptor.IDENTIFIER; - } - } - - @Override - public Object getBackPanelDescriptor() { - return ClassChoosePanelDescriptor.IDENTIFIER; - } - - - - @Override - public void aboutToDisplayPanel() { - getWizard().getInformationField().setText(INFORMATION); - setNextButtonAccordingToConceptSelected(); - } - - - - public void valueChanged(ListSelectionEvent e) { - setNextButtonAccordingToConceptSelected(); - -// Description range = new ObjectAllRestriction(new ObjectProperty("http://example.com/father#hasChild"), -// new NamedClass("http://example.com/father#female")); -// ObjectAllRestriction role = new ObjectAllRestriction(new ObjectProperty("http://example.com/father#hasChild"), -// range); -// Description de = new NamedClass("http://example.com/father#male"); - - if (!e.getValueIsAdjusting() && learnPanel.getResultTable().getSelectedRow() >= 0 && - (learningTask.isDone() || learningTask.isCancelled())){ - EvaluatedDescriptionClass selectedClassExpression = learnPanel.getResultTable().getSelectedValue(); -// if(!selectedClassExpression.isConsistent()){ -// learnPanel.add(new JLabel("Selected class expression may lead to an inconsistent knowledgebase.")); -// } - OREManager.getInstance().setNewClassDescription(selectedClassExpression); - - learnPanel.updateCurrentGraphicalCoveragePanel(OREManager.getInstance().getNewClassDescription()); - } - - - } - - /** - * Actions for pressing start- or stop-button. - * @param event - */ - public void actionPerformed(ActionEvent event) { - if(event.getActionCommand().equals("Start")){ - String learningType = ""; - if(learnPanel.getOptionsPanel().isEquivalentClassesTypeSelected()){ - OREManager.getInstance().setLearningType("equivalence"); - learningType = "equivalent"; - } else { - learningType = "super"; - OREManager.getInstance().setLearningType("superClass"); - } - TaskManager.getInstance().setTaskStarted("Learning " + learningType + " class expressions..."); - learnPanel.getStartButton().setEnabled(false); - learnPanel.getStopButton().setEnabled(true); - OREManager.getInstance().setNoisePercentage(learnPanel.getOptionsPanel().getMinAccuracy()); - OREManager.getInstance().setMaxExecutionTimeInSeconds(learnPanel.getOptionsPanel().getMaxExecutionTime()); - OREManager.getInstance().setMaxNrOfResults(learnPanel.getOptionsPanel().getNrOfConcepts()); - OREManager.getInstance().setThreshold(learnPanel.getOptionsPanel().getThreshold()); - learnPanel.reset(); - - - learningTask = new LearningTask(); - learningTask.execute(); - } else{ - - learnPanel.getStopButton().setEnabled(false); - la.stop(); - timer.cancel(); - learnPanel.getStartButton().setEnabled(true); - getWizard().getStatusBar().showProgress(false); - getWizard().getStatusBar().setProgressTitle("Learning stopped"); - - } - - } - - private void setNextButtonAccordingToConceptSelected() { - - if (learnPanel.getResultTable().getSelectedRow() >= 0){ - getWizard().setNextFinishButtonEnabled(true); - }else{ - getWizard().setNextFinishButtonEnabled(false); - } - - } - - /** - * Returns the swing worker thread instance. - * @return swing worker - */ - public LearningTask getWorkerThread(){ - return learningTask; - } - - /** - * Returns the timer instance. - * @return timer - */ - public Timer getTimer(){ - return timer; - } - - /** - * Returns the learning algorithm instance. - * @return learning algorithm - */ - public LearningAlgorithm getLa() { - return la; - } - - /** - * Clear list and coverage panel. - */ - public void resetPanel(){ - learnPanel.reset(); - } - - - /** - * Inner class, containing the background thread for learning class descriptions. - * @author Lorenz Buehmann - * - */ - class LearningTask extends SwingWorker<List<? extends EvaluatedDescription>, List<? extends EvaluatedDescription>> { - - - @SuppressWarnings("unchecked") - @Override - public List<? extends EvaluatedDescription> doInBackground() { - - OREManager.getInstance().setLearningProblem(); - OREManager.getInstance().setLearningAlgorithm(); - - la = OREManager.getInstance().getLa(); - - - timer = new Timer(); - timer.schedule(new TimerTask(){ - - @Override - public void run() { - if(!isCancelled() && la.isRunning()){ - publish(la.getCurrentlyBestEvaluatedDescriptions(OREManager.getInstance().getMaxNrOfResults(), - OREManager.getInstance().getThreshold(), true)); - } - } - - }, 1000, 2000); - OREManager.getInstance().start(); - - List<? extends EvaluatedDescription> result = la.getCurrentlyBestEvaluatedDescriptions - (OREManager.getInstance().getMaxNrOfResults(), OREManager.getInstance().getThreshold(), true); - - return result; - } - - @Override - public void done() { - - timer.cancel(); - List<? extends EvaluatedDescription> result = null; - try { - result = get(); - } catch (InterruptedException e) { - e.printStackTrace(); - } catch (ExecutionException e) { - e.printStackTrace(); - } - getWizard().getDialog().setCursor(null); - getWizard().getStatusBar().showProgress(false); - getWizard().getStatusBar().setProgressTitle("Done"); - learnPanel.getStartButton().setEnabled(true); - learnPanel.getStopButton().setEnabled(false); - updateList(result); - TaskManager.getInstance().setTaskFinished(); - - } - - @Override - protected void process(List<List<? extends EvaluatedDescription>> resultLists) { - - for (List<? extends EvaluatedDescription> list : resultLists) { - updateList(list); - } - } - - private void updateList(final List<? extends EvaluatedDescription> result) { - - Runnable doUpdateList = new Runnable() { - - @SuppressWarnings("unchecked") - public void run() { - learnPanel.getResultTable().addResults((List<EvaluatedDescriptionClass>) result); - } - }; - SwingUtilities.invokeLater(doUpdateList); - - } - - - } - - - @Override - public void activeOntologyChanged() { - learnPanel.getResultTable().clear(); - - } -} Copied: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ManualLearnPanelDescriptor.java (from rev 1864, trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/LearningPanelDescriptor.java) =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ManualLearnPanelDescriptor.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/ManualLearnPanelDescriptor.java 2009-09-29 08:26:40 UTC (rev 1868) @@ -0,0 +1,296 @@ +/** + * Copyright (C) 2007-2008, 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.tools.ore.ui.wizard.descriptors; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.List; +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.ExecutionException; + +import javax.swing.SwingUtilities; +import javax.swing.SwingWorker; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; + +import org.dllearner.algorithms.celoe.CELOE; +import org.dllearner.core.EvaluatedDescription; +import org.dllearner.core.LearningAlgorithm; +import org.dllearner.learningproblems.EvaluatedDescriptionClass; +import org.dllearner.tools.ore.OREManager; +import org.dllearner.tools.ore.OREManagerListener; +import org.dllearner.tools.ore.TaskManager; +import org.dllearner.tools.ore.ui.wizard.WizardPanelDescriptor; +import org.dllearner.tools.ore.ui.wizard.panels.ManualLearnPanel; + + + +/** + * Wizard panel descriptor where learned class description are shown. + * @author Lorenz Buehmann + * + */ +public class ManualLearnPanelDescriptor extends WizardPanelDescriptor implements ActionListener, ListSelectionListener, OREManagerListener{ + + public static final String IDENTIFIER = "MANUAL_LEARN_PANEL"; + public static final String INFORMATION = "Press <Start> to start learning. While it is running, " + + "temporary results are shown in the list above. Select one of them and press <Next>"; + + private ManualLearnPanel learnPanel; + private LearningTask learningTask; + private CELOE la; + private Timer timer; + + + public ManualLearnPanelDescriptor() { + + learnPanel = new ManualLearnPanel(); + learnPanel.addStartButtonListener(this); + learnPanel.addStopButtonListener(this); + learnPanel.addSelectionListener(this); + + setPanelDescriptorIdentifier(IDENTIFIER); + setPanelComponent(learnPanel); + + + } + + @Override + public Object getNextPanelDescriptor() { + EvaluatedDescriptionClass newClassDesc = OREManager.getInstance().getNewClassDescription(); + if(newClassDesc != null && newClassDesc.getAccuracy() == 1.0){ + return SavePanelDescriptor.IDENTIFIER; + } else { + return RepairPanelDescriptor.IDENTIFIER; + } + } + + @Override + public Object getBackPanelDescriptor() { + return ClassChoosePanelDescriptor.IDENTIFIER; + } + + + + @Override + public void aboutToDisplayPanel() { + getWizard().getInformationField().setText(INFORMATION); + setNextButtonAccordingToConceptSelected(); + } + + + + public void valueChanged(ListSelectionEvent e) { + setNextButtonAccordingToConceptSelected(); + +// Description range = new ObjectAllRestriction(new ObjectProperty("http://example.com/father#hasChild"), +// new NamedClass("http://example.com/father#female")); +// ObjectAllRestriction role = new ObjectAllRestriction(new ObjectProperty("http://example.com/father#hasChild"), +// range); +// Description de = new NamedClass("http://example.com/father#male"); + + if (!e.getValueIsAdjusting() && learnPanel.getResultTable().getSelectedRow() >= 0 && + (learningTask.isDone() || learningTask.isCancelled())){ + EvaluatedDescriptionClass selectedClassExpression = learnPanel.getResultTable().getSelectedValue(); +// if(!selectedClassExpression.isConsistent()){ +// learnPanel.add(new JLabel("Selected class expression may lead to an inconsistent knowledgebase.")); +// } + OREManager.getInstance().setNewClassDescription(selectedClassExpression); + + learnPanel.updateCurrentGraphicalCoveragePanel(OREManager.getInstance().getNewClassDescription()); + } + + + } + + /** + * Actions for pressing start- or stop-button. + * @param event + */ + public void actionPerformed(ActionEvent event) { + if(event.getActionCommand().equals("Start")){ + String learningType = ""; + if(learnPanel.getOptionsPanel().isEquivalentClassesTypeSelected()){ + OREManager.getInstance().setLearningType("equivalence"); + learningType = "equivalent"; + } else { + learningType = "super"; + OREManager.getInstance().setLearningType("superClass"); + } + TaskManager.getInstance().setTaskStarted("Learning " + learningType + " class expressions..."); + learnPanel.getStartButton().setEnabled(false); + learnPanel.getStopButton().setEnabled(true); + OREManager.getInstance().setNoisePercentage(learnPanel.getOptionsPanel().getMinAccuracy()); + OREManager.getInstance().setMaxExecutionTimeInSeconds(learnPanel.getOptionsPanel().getMaxExecutionTime()); + OREManager.getInstance().setMaxNrOfResults(learnPanel.getOptionsPanel().getNrOfConcepts()); + OREManager.getInstance().setThreshold(learnPanel.getOptionsPanel().getThreshold()); + learnPanel.reset(); + + + learningTask = new LearningTask(); + learningTask.execute(); + } else{ + + learnPanel.getStopButton().setEnabled(false); + la.stop(); + timer.cancel(); + learnPanel.getStartButton().setEnabled(true); + getWizard().getStatusBar().showProgress(false); + getWizard().getStatusBar().setProgressTitle("Learning stopped"); + + } + + } + + private void setNextButtonAccordingToConceptSelected() { + + if (learnPanel.getResultTable().getSelectedRow() >= 0){ + getWizard().setNextFinishButtonEnabled(true); + }else{ + getWizard().setNextFinishButtonEnabled(false); + } + + } + + /** + * Returns the swing worker thread instance. + * @return swing worker + */ + public LearningTask getWorkerThread(){ + return learningTask; + } + + /** + * Returns the timer instance. + * @return timer + */ + public Timer getTimer(){ + return timer; + } + + /** + * Returns the learning algorithm instance. + * @return learning algorithm + */ + public LearningAlgorithm getLa() { + return la; + } + + /** + * Clear list and coverage panel. + */ + public void resetPanel(){ + learnPanel.reset(); + } + + + /** + * Inner class, containing the background thread for learning class descriptions. + * @author Lorenz Buehmann + * + */ + class LearningTask extends SwingWorker<List<? extends EvaluatedDescription>, List<? extends EvaluatedDescription>> { + + + @SuppressWarnings("unchecked") + @Override + public List<? extends EvaluatedDescription> doInBackground() { + + OREManager.getInstance().setLearningProblem(); + OREManager.getInstance().setLearningAlgorithm(); + + la = OREManager.getInstance().getLa(); + + + timer = new Timer(); + timer.schedule(new TimerTask(){ + + @Override + public void run() { + if(!isCancelled() && la.isRunning()){ + publish(la.getCurrentlyBestEvaluatedDescriptions(OREManager.getInstance().getMaxNrOfResults(), + OREManager.getInstance().getThreshold(), true)); + } + } + + }, 1000, 2000); + OREManager.getInstance().start(); + + List<? extends EvaluatedDescription> result = la.getCurrentlyBestEvaluatedDescriptions + (OREManager.getInstance().getMaxNrOfResults(), OREManager.getInstance().getThreshold(), true); + + return result; + } + + @Override + public void done() { + + timer.cancel(); + List<? extends EvaluatedDescription> result = null; + try { + result = get(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + getWizard().getDialog().setCursor(null); + getWizard().getStatusBar().showProgress(false); + getWizard().getStatusBar().setProgressTitle("Done"); + learnPanel.getStartButton().setEnabled(true); + learnPanel.getStopButton().setEnabled(false); + updateList(result); + TaskManager.getInstance().setTaskFinished(); + + } + + @Override + protected void process(List<List<? extends EvaluatedDescription>> resultLists) { + + for (List<? extends EvaluatedDescription> list : resultLists) { + updateList(list); + } + } + + private void updateList(final List<? extends EvaluatedDescription> result) { + + Runnable doUpdateList = new Runnable() { + + @SuppressWarnings("unchecked") + public void run() { + learnPanel.getResultTable().addResults((List<EvaluatedDescriptionClass>) result); + } + }; + SwingUtilities.invokeLater(doUpdateList); + + } + + + } + + + @Override + public void activeOntologyChanged() { + learnPanel.getResultTable().clear(); + + } +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/RepairPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/RepairPanelDescriptor.java 2009-09-28 14:35:48 UTC (rev 1867) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/RepairPanelDescriptor.java 2009-09-29 08:26:40 UTC (rev 1868) @@ -80,7 +80,7 @@ @Override public Object getBackPanelDescriptor() { - return LearningPanelDescriptor.IDENTIFIER; + return ManualLearnPanelDescriptor.IDENTIFIER; } @Override Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java 2009-09-28 14:35:48 UTC (rev 1867) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/descriptors/SavePanelDescriptor.java 2009-09-29 08:26:40 UTC (rev 1868) @@ -63,7 +63,7 @@ @Override public Object getBackPanelDescriptor() { if(OREManager.getInstance().getNewClassDescription().getAccuracy() == 1.0){ - return LearningPanelDescriptor.IDENTIFIER; + return ManualLearnPanelDescriptor.IDENTIFIER; } else { return RepairPanelDescriptor.IDENTIFIER; } Added: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/AutoLearnPanel.java 2009-09-29 08:26:40 UTC (rev 1868) @@ -0,0 +1,90 @@ +package org.dllearner.tools.ore.ui.wizard.panels; + +import java.awt.BorderLayout; +import java.util.List; +import java.util.Set; + +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSplitPane; + +import org.dllearner.core.owl.NamedClass; +import org.dllearner.learningproblems.EvaluatedDescriptionClass; +import org.dllearner.tools.ore.ui.ClassesTable; +import org.dllearner.tools.ore.ui.ResultTable; + +public class AutoLearnPanel extends JPanel { + + /** + * + */ + private static final long serialVersionUID = -5204979906041331328L; + + private ClassesTable classesTable; + + private JPanel subPanel; + private JPanel equivalentPanel; + + private ResultTable equivalentResultsTable; + private ResultTable subResultsTable; + + public AutoLearnPanel(){ + createUI(); + } + + private void createUI(){ + setLayout(new BorderLayout()); + + JSplitPane mainSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); + mainSplitPane.setOneTouchExpandable(true); + mainSplitPane.setDividerLocation(0.2); + + mainSplitPane.setLeftComponent(createClassesPanel()); + mainSplitPane.setRightComponent(createResultPanel()); + + add(mainSplitPane); + } + + private JComponent createClassesPanel(){ + classesTable = new ClassesTable(); + classesTable.setBorder(null); + classesTable.setEnabled(false); + JScrollPane classesScroll = new JScrollPane(classesTable); + return classesScroll; + } + + private JComponent createResultPanel(){ + JPanel resultPanel = new JPanel(new BorderLayout()); + JSplitPane equivSubSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); + equivSubSplitPane.setOneTouchExpandable(true); + equivSubSplitPane.setDividerLocation(0.5); + + subPanel = new JPanel(); + subResultsTable = new ResultTable(); + subPanel.add(subResultsTable); + + equivalentPanel = new JPanel(); + equivalentResultsTable = new ResultTable(); + equivalentPanel.add(equivalentResultsTable); + + equivSubSplitPane.setTopComponent(equivalentPanel); + equivSubSplitPane.setBottomComponent(subPanel); + + resultPanel.add(equivSubSplitPane); + return resultPanel; + } + + public void fillClassesTable(Set<NamedClass> classes){ + classesTable.addClasses(classes); + } + + public void fillSubClassExpressionsTable(List<EvaluatedDescriptionClass> resultList){ + subResultsTable.addResults(resultList); + } + + public void fillEquivalentClassExpressionsTable(List<EvaluatedDescriptionClass> resultList){ + equivalentResultsTable.addResults(resultList); + } + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java 2009-09-28 14:35:48 UTC (rev 1867) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/ClassChoosePanel.java 2009-09-29 08:26:40 UTC (rev 1868) @@ -23,16 +23,24 @@ import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; +import java.awt.GridLayout; +import java.awt.event.ActionListener; +import javax.swing.BorderFactory; +import javax.swing.ButtonGroup; import javax.swing.JLabel; import javax.swing.JPanel; +import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; +import javax.swing.border.EtchedBorder; import javax.swing.event.ChangeListener; import javax.swing.event.ListSelectionListener; import org.dllearner.tools.ore.ui.ClassesTable; +import org.dllearner.tools.ore.ui.HelpablePanel; +import org.dllearner.tools.ore.ui.LearningOptionsPanel; /** * Wizard panel where atomic classes are shown in list. @@ -45,7 +53,15 @@ private ClassesTable classesTable; private JSpinner minInstanceCountSpinner; + private JRadioButton autoLearnButton; + private JRadioButton manualLearnButton; + private JPanel currentPanel; + private JPanel manualLearnPanel; + private JPanel autoLearnPanel; + + private LearningOptionsPanel learningOptionsPanel; + /** * Constructor. */ @@ -55,9 +71,48 @@ private void createUI(){ setLayout(new GridBagLayout()); + JPanel optionsPanel = new JPanel(new GridLayout(0, 1)); + autoLearnButton = new JRadioButton("Automatic learning mode"); + autoLearnButton.setActionCommand("auto"); + manualLearnButton = new JRadioButton("Manual learning mode"); + manualLearnButton.setActionCommand("manual"); + ButtonGroup learningType = new ButtonGroup(); + learningType.add(manualLearnButton); + learningType.add(autoLearnButton); + autoLearnButton.setSelected(true); + optionsPanel.add(autoLearnButton); + optionsPanel.add(manualLearnButton); + HelpablePanel optionsHelpPanel = new HelpablePanel(optionsPanel); + optionsHelpPanel.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED)); + add(optionsHelpPanel); + createAutoLearnPanel(); + createManualLearnPanel(); + currentPanel = autoLearnPanel; + add(currentPanel); + + } + + private void createAutoLearnPanel(){ + JPanel panel = new JPanel(new GridBagLayout()); + JPanel minInstancesCountPanel = new JPanel(); + minInstancesCountPanel.add(new JLabel("Min. instance count per class: ")); + minInstanceCountSpinner = new JSpinner(); + minInstanceCountSpinner.setEnabled(true); + javax.swing.SpinnerModel spinnerModel = new SpinnerNumberModel(1, 1, 500, 1); + minInstanceCountSpinner.setModel(spinnerModel); + minInstancesCountPanel.add(minInstanceCountSpinner); + panel.add(minInstancesCountPanel); + learningOptionsPanel = new LearningOptionsPanel(); + panel.add(learningOptionsPanel); + + autoLearnPanel = panel; + } + + private void createManualLearnPanel(){ + JPanel panel = new JPanel(); + panel.setLayout(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); c.gridwidth = GridBagConstraints.REMAINDER; - JPanel minInstancesCountPanel = new JPanel(); minInstancesCountPanel.add(new JLabel("Showing classes with at least ")); minInstanceCountSpinner = new JSpinner(); @@ -66,7 +121,7 @@ minInstanceCountSpinner.setModel(spinnerModel); minInstancesCountPanel.add(minInstanceCountSpinner); minInstancesCountPanel.add(new JLabel(" instances")); - add(minInstancesCountPanel, c); + panel.add(minInstancesCountPanel, c); c.fill = GridBagConstraints.NONE; @@ -74,7 +129,9 @@ classesTable = new ClassesTable(); JScrollPane scroll = new JScrollPane(classesTable); scroll.setPreferredSize(new Dimension(400, 400)); - add(scroll, c); + panel.add(scroll, c); + + manualLearnPanel = panel; } /** @@ -88,6 +145,23 @@ public void addChangeListener(ChangeListener cL){ minInstanceCountSpinner.addChangeListener(cL); } + + public void addActionsListeners(ActionListener aL){ + autoLearnButton.addActionListener(aL); + manualLearnButton.addActionListener(aL); + } + + public void setAutoLearningPanel(boolean value){ + if(value){ + remove(manualLearnPanel); + add(autoLearnPanel); + } else { + remove(autoLearnPanel); + add(manualLearnPanel); + } + validate(); + repaint(); + } /** * Returns the table where atomic owl classes are the table elements. @@ -101,5 +175,9 @@ classesTable.clear(); minInstanceCountSpinner.setValue(new Integer(1)); } + + public boolean isAutoLearnMode(){ + return autoLearnButton.isSelected(); + } } \ No newline at end of file Deleted: trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LearningPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LearningPanel.java 2009-09-28 14:35:48 UTC (rev 1867) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ui/wizard/panels/LearningPanel.java 2009-09-29 08:26:40 UTC (rev 1868) @@ -1,200 +0,0 @@ -/** - * Copyright (C) 2007-2008, 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.tools.ore.ui.wizard.panels; - -import java.awt.BorderLayout; -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; -import java.awt.Insets; -import java.awt.event.ActionListener; - -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.border.TitledBorder; -import javax.swing.event.ListSelectionListener; - -import org.dllearner.core.EvaluatedDescription; -import org.dllearner.core.owl.NamedClass; -import org.dllearner.tools.ore.OREManager; -import org.dllearner.tools.ore.ui.GraphicalCoveragePanel; -import org.dllearner.tools.ore.ui.LearningOptionsPanel; -import org.dllearner.tools.ore.ui.ResultTable; - - -/** - * The wizard panel where result table and buttons for learning step are shown. - * @author Lorenz Buehmann - * - */ -public class LearningPanel extends JPanel{ - - private static final long serialVersionUID = -7411197973240429632L; - - private ResultTable resultTable; - private JScrollPane tableScrollPane; - private JPanel resultPanel; - - private JButton stopButton; - private JButton startButton; - private JPanel buttonPanel; - private JPanel buttonSliderPanel; - - private GraphicalCoveragePanel graphicPanel; - private LearningOptionsPanel optionsPanel; - - private GridBagConstraints c; - - - public LearningPanel() { - createUI(); - } - - private void createUI(){ - setLayout(new GridBagLayout()); - c = new GridBagConstraints(); - createResultPanel(); - createControlPanel(); - createCoveragePanel(); - } - - private void createResultPanel(){ - c.gridx = 0; - c.gridy = 0; - c.weightx = 1.0; - c.weighty = 1.0; - c.anchor = GridBagConstraints.NORTHWEST; - c.fill = GridBagConstraints.BOTH; - - resultTable = new ResultTable(); - tableScrollPane = new JScrollPane(resultTable); - resultPanel = new JPanel(); - resultPanel.setLayout(new BorderLayout()); - resultPanel.add(tableScrollPane); - resultPanel.setBorder(new TitledBorder("Learned class expressions")); - - add(resultPanel, c); - } - - private void createControlPanel(){ - c.gridx = GridBagConstraints.RELATIVE; - c.gridy = 0; - c.anchor = GridBagConstraints.NORTH; - c.weightx = 0.0; - c.weighty = 0.0; - c.fill = GridBagConstraints.NONE; - - buttonSliderPanel = new JPanel(); - - GridBagLayout buttonSliderPanelLayout = new GridBagLayout(); - buttonSliderPanelLayout.rowWeights = new double[] { 0.0, 0.0 }; - buttonSliderPanelLayout.rowHeights = new int[] { 126, 7 }; - buttonSliderPanelLayout.columnWeights = new double[] { 0.1 }; - buttonSliderPanelLayout.columnWidths = new int[] { 7 }; - buttonSliderPanel.setLayout(buttonSliderPanelLayout); - - buttonPanel ... [truncated message content] |