From: <lor...@us...> - 2009-06-03 16:03:12
|
Revision: 1789 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1789&view=rev Author: lorenz_b Date: 2009-06-03 16:03:06 +0000 (Wed, 03 Jun 2009) Log Message: ----------- added new step to wizard which shows explanations when ontology is inconsistent currently still for testing purpose Modified Paths: -------------- 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/ORE.java trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java trunk/src/dl-learner/org/dllearner/tools/ore/RepairPanelDescriptor.java trunk/src/dl-learner/org/dllearner/tools/ore/StatsPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/WizardController.java trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java Added Paths: ----------- trunk/src/dl-learner/org/dllearner/tools/ore/ClassificationProgressMonitor.java trunk/src/dl-learner/org/dllearner/tools/ore/InconsistencyExplanationPanel.java trunk/src/dl-learner/org/dllearner/tools/ore/InconsistencyExplanationPanelDescriptor.java Added: trunk/src/dl-learner/org/dllearner/tools/ore/ClassificationProgressMonitor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ClassificationProgressMonitor.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ClassificationProgressMonitor.java 2009-06-03 16:03:06 UTC (rev 1789) @@ -0,0 +1,117 @@ +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); + + } + + }); + } + + + +} Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-06-03 14:14:07 UTC (rev 1788) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationManager.java 2009-06-03 16:03:06 UTC (rev 1789) @@ -138,6 +138,32 @@ } + public Set<Set<OWLAxiom>> getInconsistencyExplanations(){ + Set<Set<OWLAxiom>> explanations = regularExplanationCache.get(dataFactory.getOWLThing()); + if(explanations == null){ + explanations = regularExpGen.getInconsistencyExplanations(); + regularExplanationCache.put(dataFactory.getOWLThing(), explanations); + } + return explanations; + } + + public Set<Set<OWLAxiom>> getLaconicInconsistencyExplanations(){ + OWLClass thing = dataFactory.getOWLThing(); + Set<Set<OWLAxiom>> explanations = laconicExplanationCache.get(thing); + OWLSubClassAxiom unsatAxiom; + if(explanations == null){ + unsatAxiom = dataFactory.getOWLSubClassAxiom(thing, dataFactory.getOWLNothing()); + try { + explanations = laconicExpGen.getExplanations(unsatAxiom); + } catch (ExplanationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + laconicExplanationCache.put(thing, explanations); + } + return explanations; + } + public Set<List<OWLAxiom>> getOrderedUnsatisfiableExplanations(OWLClass unsat){ return getOrderedExplanations(dataFactory.getOWLSubClassAxiom(unsat, dataFactory.getOWLNothing()), @@ -152,6 +178,18 @@ } + public Set<List<OWLAxiom>> getOrderedInconsistencyExplanations(){ + + return getOrderedExplanations(dataFactory.getOWLSubClassAxiom(dataFactory.getOWLThing(), dataFactory.getOWLNothing()), + getInconsistencyExplanations()); + + } + + public Set<List<OWLAxiom>> getOrderedLaconicInconsistencyExplanations(){ + return getOrderedExplanations(dataFactory.getOWLSubClassAxiom(dataFactory.getOWLThing(), dataFactory.getOWLNothing()), + getLaconicInconsistencyExplanations()); + } + public ArrayList<OWLAxiom> getTree2List(Tree<OWLAxiom> tree){ ArrayList<OWLAxiom> ordering = new ArrayList<OWLAxiom>(); ordering.add((OWLAxiom)tree.getUserObject()); @@ -180,7 +218,7 @@ @Override public void ontologiesChanged(List<? extends OWLOntologyChange> changes) - throws OWLException {System.out.println(changes); + throws OWLException { ontologyChanged = true; Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java 2009-06-03 14:14:07 UTC (rev 1788) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ExplanationPanel.java 2009-06-03 16:03:06 UTC (rev 1789) @@ -25,6 +25,7 @@ import javax.swing.JScrollPane; import javax.swing.JSeparator; import javax.swing.JSplitPane; +import javax.swing.ProgressMonitor; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.event.ListSelectionEvent; @@ -35,16 +36,19 @@ import org.mindswap.pellet.owlapi.PelletReasonerFactory; import org.mindswap.pellet.owlapi.Reasoner; import org.mindswap.pellet.utils.progress.SwingProgressMonitor; +import org.protege.editor.owl.ui.inference.ClassifyAction; 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.OWLException; import org.semanticweb.owl.model.OWLOntology; -import org.semanticweb.owl.model.OWLOntologyChange; -import org.semanticweb.owl.model.OWLOntologyChangeListener; import org.semanticweb.owl.model.OWLOntologyCreationException; import org.semanticweb.owl.model.OWLOntologyManager; +import com.clarkparsia.modularity.AxiomBasedModuleExtractor; +import com.clarkparsia.modularity.IncrementalClassifier; +import com.clarkparsia.modularity.ModuleExtractor; + public class ExplanationPanel extends JPanel implements ListSelectionListener, ActionListener,ImpactManagerListener{ @@ -294,23 +298,32 @@ public static void main(String[] args) { try { - String file = "file:examples/ore/miniEconomy.owl"; - PelletOptions.USE_CLASSIFICATION_MONITOR = PelletOptions.MonitorType.NONE; + String file = "file:examples/ore/tambis.owl"; + PelletOptions.USE_CLASSIFICATION_MONITOR = PelletOptions.MonitorType.SWING; OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); OWLOntology ontology = manager.loadOntologyFromPhysicalURI(URI .create(file)); org.mindswap.pellet.utils.progress.ProgressMonitor mon = new SwingProgressMonitor(); + org.mindswap.pellet.utils.progress.ProgressMonitor m = new ClassificationProgressMonitor(); + JFrame fr = new JFrame(); + fr.setSize(new Dimension(400, 400)); + fr.setLayout(new BorderLayout()); + fr.add((JPanel)m); + fr.setVisible(true); PelletReasonerFactory reasonerFactory = new PelletReasonerFactory(); Reasoner reasoner = reasonerFactory.createReasoner(manager); reasoner.loadOntologies(Collections.singleton(ontology)); -// reasoner.getKB().getTaxonomyBuilder().setProgressMonitor(mon); + reasoner.getKB().getTaxonomyBuilder().setProgressMonitor(mon); // mon.taskStarted(); + + reasoner.classify(); -// mon.taskFinished(); + + // try { // String text = "Koala SubclassOf Class: Animal"; // OWLEntityChecker checker = new EntityChecker(manager); @@ -363,7 +376,7 @@ } catch (UnsupportedLookAndFeelException e) { // TODO Auto-generated catch block e.printStackTrace(); - } + } } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2009-06-03 14:14:07 UTC (rev 1788) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ImpactManager.java 2009-06-03 16:03:06 UTC (rev 1789) @@ -64,8 +64,8 @@ imp = new HashSet<OWLAxiom>(); impact.put(ax, imp); if(ax != null){ - imp.addAll(ranker.computeImpactOnRemoval(ax)); - imp.addAll(ranker.computeImpactSOS(ax));//computeImpactSOS(actual)); +// imp.addAll(ranker.computeImpactOnRemoval(ax)); + imp.addAll(ranker.computeImpactSOS(ax)); } } return imp; Added: trunk/src/dl-learner/org/dllearner/tools/ore/InconsistencyExplanationPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/InconsistencyExplanationPanel.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/InconsistencyExplanationPanel.java 2009-06-03 16:03:06 UTC (rev 1789) @@ -0,0 +1,132 @@ +package org.dllearner.tools.ore; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.event.ActionListener; +import java.util.List; + +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.ButtonGroup; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JRadioButton; +import javax.swing.JScrollPane; +import javax.swing.JSeparator; +import javax.swing.JSplitPane; + +import org.semanticweb.owl.apibinding.OWLManager; +import org.semanticweb.owl.model.OWLAxiom; + +public class InconsistencyExplanationPanel extends JPanel{ + + /** + * + */ + private static final long serialVersionUID = 9206626647697013786L; + + private JSplitPane statsSplitPane; + + private JScrollPane explanationsScrollPane; + private JComponent explanationsPanel; + private JPanel buttonExplanationsPanel; + private JPanel buttonPanel; + private ButtonGroup explanationType; + private JRadioButton regularButton; + private JRadioButton laconicButton; + + private ImpactManager impMan; + private ExplanationManager expMan; + + + public InconsistencyExplanationPanel(ExplanationManager expMan, ImpactManager impMan) { + + this.expMan = expMan; + this.impMan = impMan; + +// impManager.addListener(this); + setLayout(new BorderLayout()); + + Dimension minimumSize = new Dimension(400, 400); + + + explanationsPanel = new Box(1); + + JPanel pan = new JPanel(new BorderLayout()); + pan.add(explanationsPanel, BorderLayout.NORTH); + explanationsScrollPane = new JScrollPane(pan); + explanationsScrollPane.setPreferredSize(minimumSize); + explanationsScrollPane.setBorder(BorderFactory + .createLineBorder(Color.LIGHT_GRAY)); + explanationsScrollPane.getViewport().setOpaque(false); + explanationsScrollPane.getViewport().setBackground(null); + explanationsScrollPane.setOpaque(false); + + regularButton = new JRadioButton("regular", true); + regularButton.setActionCommand("regular"); +// regularButton.addActionListener(this); + laconicButton = new JRadioButton("laconic"); + laconicButton.setActionCommand("laconic"); +// laconicButton.addActionListener(this); + explanationType = new ButtonGroup(); + explanationType.add(regularButton); + explanationType.add(laconicButton); + buttonPanel = new JPanel(); + buttonPanel.add(regularButton); + buttonPanel.add(laconicButton); + + buttonExplanationsPanel = new JPanel(); + buttonExplanationsPanel.setLayout(new BorderLayout()); + buttonExplanationsPanel + .add(explanationsScrollPane, BorderLayout.CENTER); + buttonExplanationsPanel.add(buttonPanel, BorderLayout.NORTH); + + statsSplitPane = new JSplitPane(0); + statsSplitPane.setResizeWeight(1.0D); + statsSplitPane.setTopComponent(buttonExplanationsPanel); + + //repair panel + JPanel repairPanelHolder = new JPanel(); + repairPanelHolder.setOpaque(false); + repairPanelHolder.setLayout(new BorderLayout()); + repairPanelHolder.add(new JLabel("Repair plan"), BorderLayout.NORTH); + RepairPlanPanel repairPanel = new RepairPlanPanel(impMan); + repairPanelHolder.add(repairPanel); + + + statsSplitPane.setBottomComponent(repairPanelHolder); + + statsSplitPane.setBorder(null); + statsSplitPane.setDividerLocation(500); + statsSplitPane.setOneTouchExpandable(true); + + add(statsSplitPane); + + } + + public void clearExplanationsPanel(){ + explanationsPanel.removeAll(); + } + + public void addExplanation(List<OWLAxiom> explanation, int counter){ + ExplanationTable expTable = new ExplanationTable(explanation, impMan, expMan, OWLManager.createOWLOntologyManager().getOWLDataFactory().getOWLThing()); + explanationsPanel.add(new ExplanationTablePanel(expTable, counter)); + + explanationsPanel.add(Box.createVerticalStrut(10)); + explanationsPanel.add(new JSeparator()); + explanationsPanel.add(Box.createVerticalStrut(10)); + this.updateUI(); + } + + public void addActionListeners(ActionListener aL){ + regularButton.addActionListener(aL); + laconicButton.addActionListener(aL); + } + + + + + +} Added: trunk/src/dl-learner/org/dllearner/tools/ore/InconsistencyExplanationPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/InconsistencyExplanationPanelDescriptor.java (rev 0) +++ trunk/src/dl-learner/org/dllearner/tools/ore/InconsistencyExplanationPanelDescriptor.java 2009-06-03 16:03:06 UTC (rev 1789) @@ -0,0 +1,90 @@ +package org.dllearner.tools.ore; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.List; + +import org.mindswap.pellet.owlapi.Reasoner; +import org.semanticweb.owl.model.OWLAxiom; + +public class InconsistencyExplanationPanelDescriptor extends WizardPanelDescriptor implements ActionListener{ + public static final String IDENTIFIER = "INCONSISTENCY_PANEL"; + public static final String INFORMATION = ""; + + private InconsistencyExplanationPanel panel; + private ExplanationManager expMan; + private ImpactManager impMan; + + public InconsistencyExplanationPanelDescriptor() { + + setPanelDescriptorIdentifier(IDENTIFIER); + + } + + public void init() { + Reasoner reasoner = getWizardModel().getOre().getPelletReasoner() + .getReasoner(); + expMan = ExplanationManager.getExplanationManager(reasoner); + impMan = ImpactManager.getImpactManager(reasoner); + panel = new InconsistencyExplanationPanel(expMan, impMan); + panel.addActionListeners(this); + setPanelComponent(panel); + + + } + + private void showLaconicExplanations() { + panel.clearExplanationsPanel(); + int counter = 1; + for (List<OWLAxiom> explanation : expMan + .getOrderedLaconicInconsistencyExplanations()) { + panel.addExplanation(explanation, counter); + counter++; + } + + } + + private void showRegularExplanations() { + panel.clearExplanationsPanel(); + int counter = 1; + for (List<OWLAxiom> explanation : expMan + .getOrderedInconsistencyExplanations()) { + panel.addExplanation(explanation, counter); + counter++; + } + } + + + + + + @Override + public Object getNextPanelDescriptor() { + return ClassPanelOWLDescriptor.IDENTIFIER; + } + + @Override + public Object getBackPanelDescriptor() { + return null; + } + + @Override + public void aboutToDisplayPanel() { + showRegularExplanations(); + getWizard().getInformationField().setText(INFORMATION); + } + + @Override + public void actionPerformed(ActionEvent e) { + if (e.getActionCommand().equals("regular")) { + showRegularExplanations(); + } else if (e.getActionCommand().equals("laconic")) { + showLaconicExplanations(); + + } + + } + + +} + \ No newline at end of file Modified: trunk/src/dl-learner/org/dllearner/tools/ore/ORE.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/ORE.java 2009-06-03 14:14:07 UTC (rev 1788) +++ trunk/src/dl-learner/org/dllearner/tools/ore/ORE.java 2009-06-03 16:03:06 UTC (rev 1789) @@ -21,7 +21,10 @@ package org.dllearner.tools.ore; import java.io.File; +import java.io.IOException; +import java.io.StringWriter; import java.net.MalformedURLException; +import java.net.URL; import java.util.Collection; import java.util.HashSet; import java.util.List; @@ -41,6 +44,7 @@ import org.dllearner.core.LearningProblem; import org.dllearner.core.LearningProblemUnsupportedException; import org.dllearner.core.ReasonerComponent; +import org.dllearner.core.configurators.ComponentFactory; import org.dllearner.core.owl.Description; import org.dllearner.core.owl.Individual; import org.dllearner.core.owl.Intersection; @@ -53,14 +57,13 @@ import org.dllearner.learningproblems.EvaluatedDescriptionClass; import org.dllearner.reasoning.FastInstanceChecker; import org.dllearner.reasoning.OWLAPIReasoner; +import org.dllearner.reasoning.PelletReasoner; import org.mindswap.pellet.exceptions.InconsistentOntologyException; -import org.mindswap.pellet.owlapi.PelletReasonerFactory; -import org.mindswap.pellet.owlapi.Reasoner; -import org.semanticweb.owl.apibinding.OWLManager; -import org.semanticweb.owl.model.OWLOntology; -import org.semanticweb.owl.model.OWLOntologyCreationException; -import org.semanticweb.owl.model.OWLOntologyManager; +import org.semanticweb.owl.model.OWLAxiom; +import org.semanticweb.owl.model.OWLException; +import com.clarkparsia.explanation.io.manchester.ManchesterSyntaxExplanationRenderer; + /** * This class contains init methods, and is used as broker between wizard and OWL-API. * @author Lorenz Buehmann @@ -69,18 +72,17 @@ public class ORE { private LearningAlgorithm la; - private ReasonerComponent rs; + private KnowledgeSource ks; private LearningProblem lp; private ComponentManager cm; private ReasonerComponent fastReasoner; - private ReasonerComponent owlReasoner; - private SortedSet<Individual> posExamples; - private SortedSet<Individual> negExamples; + private PelletReasoner pelletReasoner; - private NamedClass classToLearn; + + private NamedClass class2Learn; private EvaluatedDescriptionClass newClassDescription; @@ -116,6 +118,7 @@ // TODO Auto-generated catch block e1.printStackTrace(); } + try { ks.init(); @@ -126,24 +129,26 @@ } - public boolean consistentOntology() throws InconsistentOntologyException{ - boolean consistent = true; + public void initPelletReasoner(){ + pelletReasoner = cm.reasoner(PelletReasoner.class, ks); try { - OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); - OWLOntology ont = manager.loadOntology(owlFile.toURI()); - Reasoner reasoner = new PelletReasonerFactory().createReasoner(manager); - reasoner.loadOntology(ont); - - consistent = reasoner.isConsistent(); - } catch (OWLOntologyCreationException e) { + pelletReasoner.init(); + } catch (ComponentInitException e) { // TODO Auto-generated catch block e.printStackTrace(); } - - return consistent; + pelletReasoner.loadOntologies(); } + public boolean consistentOntology() throws InconsistentOntologyException{ + return pelletReasoner.isConsistent(); + } + public PelletReasoner getPelletReasoner(){ + return pelletReasoner; + } + + /** * Initialize the reasoners. */ @@ -156,33 +161,36 @@ // TODO Auto-generated catch block e.printStackTrace(); } + pelletReasoner.loadOntologies(); + pelletReasoner.classify(); + modifier = new OntologyModifier(pelletReasoner); + baseURI = fastReasoner.getBaseURI(); + prefixes = fastReasoner.getPrefixes(); - - - owlReasoner = cm.reasoner(OWLAPIReasoner.class, ks); + } + + public String getInconsistencyExplanationsString(){ + ManchesterSyntaxExplanationRenderer renderer = new ManchesterSyntaxExplanationRenderer(); + StringWriter buffer = new StringWriter(); + renderer.startRendering(buffer); try { - owlReasoner.init(); - } catch (ComponentInitException e) { + 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(); } - modifier = new OntologyModifier(owlReasoner, rs); - baseURI = fastReasoner.getBaseURI(); - prefixes = fastReasoner.getPrefixes(); - + renderer.endRendering(); + return buffer.toString(); } - - - - public void setPosNegExamples(){ - posExamples = owlReasoner.getIndividuals(classToLearn); - negExamples = owlReasoner.getIndividuals(); - - - for (Individual pos : posExamples){ - negExamples.remove(pos); - } + private Set<Set<OWLAxiom>> getInconsistencyExplanations(){ + return pelletReasoner.getInconsistencyReasons(); } @@ -204,17 +212,15 @@ return prefixes; } - public ReasonerComponent getOwlReasoner() { - return owlReasoner; - } public ReasonerComponent getFastReasoner() { return fastReasoner; } public void setLearningProblem(){ - lp = cm.learningProblem(ClassLearningProblem.class, fastReasoner); - cm.applyConfigEntry(lp, "classToDescribe", classToLearn.toString()); + + lp = ComponentFactory.getClassLearningProblem(fastReasoner, getClass2LearnAsURL()); + try { lp.init(); } catch (ComponentInitException e) { @@ -223,6 +229,18 @@ } } + private URL getClass2LearnAsURL(){ + URL classURL = null; + try { + classURL = new URL(class2Learn.toString()); + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return classURL; + + } + public void setNoise(double noise){ System.out.println("setze noise auf" + noise); cm.applyConfigEntry(la, "noisePercentage", noise); @@ -236,20 +254,16 @@ } public void setLearningAlgorithm(){ + try { - la = cm.learningAlgorithm(CELOE.class, lp, fastReasoner); + la = ComponentFactory.getCELOE(lp, fastReasoner); cm.applyConfigEntry(la, "useNegation", false); } catch (LearningProblemUnsupportedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } - - Set<String> t = new TreeSet<String>(); - - - t.add(classToLearn.getName()); -// cm.applyConfigEntry(la, "ignoredConcepts", t); -// cm.applyConfigEntry(la, "guaranteeXgoodDescriptions", 10); + + try { la.init(); } catch (ComponentInitException e) { @@ -261,21 +275,14 @@ /** * Sets the class that has to be learned. - * @param oldClass class that is choosen to be (re)learned + * @param oldClass class that is chosen to be (re)learned */ - public void setClassToLearn(NamedClass oldClass){ - this.classToLearn = oldClass; + public void setClassToLearn(NamedClass class2Learn){ + this.class2Learn = class2Learn; } public void init(){ -// try { -// owlReasoner.init(); -// fastReasoner.init(); -// } catch (ComponentInitException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } - this.setPosNegExamples(); + this.setLearningProblem(); this.setLearningAlgorithm(); @@ -286,10 +293,7 @@ * */ public void start(){ - Set<String> t = new TreeSet<String>(); -// t.add(classToLearn.getName()); -// cm.applyConfigEntry(la, "ignoredConcepts", t); -// cm.applyConfigEntry(la, "noisePercentage", noise); + try { la.init(); } catch (ComponentInitException e) { @@ -310,7 +314,7 @@ } public NamedClass getIgnoredConcept() { - return classToLearn; + return class2Learn; } @@ -325,7 +329,7 @@ Set<Description> criticals = new HashSet<Description>(); List<Description> children = desc.getChildren(); - if(owlReasoner.hasType(desc, ind)){ + if(pelletReasoner.hasType(desc, ind)){ if(children.size() >= 2){ @@ -335,7 +339,7 @@ } } else if(desc instanceof Union){ for(Description d: children){ - if(owlReasoner.hasType(d, ind)){ + if(pelletReasoner.hasType(d, ind)){ criticals.addAll(getNegCriticalDescriptions(ind, d)); } } @@ -468,7 +472,7 @@ */ public Set<Individual> getIndividualsInPropertyRange(ObjectQuantorRestriction objRestr, Individual ind){ - Set<Individual> individuals = owlReasoner.getIndividuals(objRestr.getChild(0)); + Set<Individual> individuals = pelletReasoner.getIndividuals(objRestr.getChild(0)); individuals.remove(ind); return individuals; @@ -484,7 +488,7 @@ Set<Individual> allIndividuals = new HashSet<Individual>(); - for(Individual i : owlReasoner.getIndividuals()){ + for(Individual i : pelletReasoner.getIndividuals()){ // try { if(!fastReasoner.hasType(objRestr.getChild(0), i)){ @@ -507,12 +511,12 @@ */ public Set<NamedClass> getpossibleClassesMoveTo(Individual ind){ Set<NamedClass> moveClasses = new HashSet<NamedClass>(); - for(NamedClass nc : owlReasoner.getNamedClasses()){ - if(!owlReasoner.hasType(nc, ind)){ + for(NamedClass nc : pelletReasoner.getNamedClasses()){ + if(!pelletReasoner.hasType(nc, ind)){ moveClasses.add(nc); } } - moveClasses.remove(classToLearn); + moveClasses.remove(class2Learn); return moveClasses; } @@ -524,12 +528,12 @@ */ public Set<NamedClass> getpossibleClassesMoveFrom(Individual ind){ Set<NamedClass> moveClasses = new HashSet<NamedClass>(); - for(NamedClass nc : owlReasoner.getNamedClasses()){ - if(owlReasoner.hasType(nc, ind)){ + for(NamedClass nc : pelletReasoner.getNamedClasses()){ + if(pelletReasoner.hasType(nc, ind)){ moveClasses.add(nc); } } - moveClasses.remove(classToLearn); + moveClasses.remove(class2Learn); return moveClasses; } @@ -545,10 +549,10 @@ // TODO Auto-generated catch block e.printStackTrace(); } - owlReasoner = cm.reasoner(OWLAPIReasoner.class, new OWLAPIOntology(modifier.getOntology())); + try { - owlReasoner.init(); + pelletReasoner.init(); } catch (ComponentInitException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -563,19 +567,20 @@ * @param ind */ public Set<NamedClass> getComplements(Description desc, Individual ind){ -// System.out.println("----------------" + desc + "---------------"); + Set<NamedClass> complements = new HashSet<NamedClass>(); - for(NamedClass nc : owlReasoner.getNamedClasses()){ + System.out.println(pelletReasoner.getComplementClasses(desc)); + for(NamedClass nc : pelletReasoner.getNamedClasses()){ if(!(nc.toString().endsWith("Thing"))){ - if(owlReasoner.hasType(nc, ind)){ + if(pelletReasoner.hasType(nc, ind)){ if(modifier.isComplement(desc, nc)){ complements.add(nc); } } } } - System.out.println("Disjunkt sind: " + complements); + return complements; } Modified: trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java 2009-06-03 14:14:07 UTC (rev 1788) +++ trunk/src/dl-learner/org/dllearner/tools/ore/OntologyModifier.java 2009-06-03 16:03:06 UTC (rev 1789) @@ -28,7 +28,6 @@ import java.util.List; import java.util.Set; -import org.dllearner.core.ReasonerComponent; import org.dllearner.core.owl.Description; import org.dllearner.core.owl.Individual; import org.dllearner.core.owl.NamedClass; @@ -37,6 +36,7 @@ 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; @@ -75,18 +75,18 @@ public class OntologyModifier { private OWLOntology ontology; - private ReasonerComponent reasoner; + private PelletReasoner reasoner; private OWLDataFactory factory; private OWLOntologyManager manager; - private ReasonerComponent rs; - public OntologyModifier(ReasonerComponent reasoner, ReasonerComponent rs){ + + public OntologyModifier(PelletReasoner reasoner){ this.reasoner = reasoner; - this.manager = OWLManager.createOWLOntologyManager(); + this.manager = reasoner.getOWLOntologyManager(); this.factory = manager.getOWLDataFactory(); - this.ontology = ((OWLAPIReasoner)reasoner).getOWLAPIOntologies().get(0); - this.rs = rs; + this.ontology = (reasoner.getOWLAPIOntologies()); + } /** @@ -595,7 +595,7 @@ } OWLDebugger debugger = new BlackBoxOWLDebugger(manager, ontology, checker); - for(OWLClass owlClass : ((OWLAPIReasoner)reasoner).getInconsistentOWLClasses()){ + for(OWLClass owlClass : reasoner.getInconsistentOWLClasses()){ /* Find the sets of support and print them */ Set<Set<OWLAxiom>> allsos = null; try { Modified: trunk/src/dl-learner/org/dllearner/tools/ore/RepairPanelDescriptor.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/RepairPanelDescriptor.java 2009-06-03 14:14:07 UTC (rev 1788) +++ trunk/src/dl-learner/org/dllearner/tools/ore/RepairPanelDescriptor.java 2009-06-03 16:03:06 UTC (rev 1789) @@ -99,7 +99,7 @@ DefaultListModel posModel = repairPanel.getPosFailureModel(); posModel.clear();System.out.println(ore.getNewClassDescription().getCoveredInstances()); - Set<Individual> posNotCovered = ore.getOwlReasoner().getIndividuals(ore.getIgnoredConcept()); + Set<Individual> posNotCovered = ore.getPelletReasoner().getIndividuals(ore.getIgnoredConcept()); posNotCovered.removeAll(ore.getNewClassDescription().getCoveredInstances()); for(Individual ind : posNotCovered){ posModel.addElement(ind); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/StatsPanel.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/StatsPanel.java 2009-06-03 14:14:07 UTC (rev 1788) +++ trunk/src/dl-learner/org/dllearner/tools/ore/StatsPanel.java 2009-06-03 16:03:06 UTC (rev 1789) @@ -100,7 +100,7 @@ classPane = new JXTaskPane(); classPane.setTitle("Classes"); - oldClasses = ore.getOwlReasoner().getTypes(ind); + oldClasses = ore.getPelletReasoner().getTypes(ind); for(NamedClass nc : oldClasses){ classPane.add(new JLabel(nc.toManchesterSyntaxString(baseURI, prefixes))); } @@ -154,7 +154,7 @@ classPane.removeAll(); Set<String> newClassesString = new HashSet<String>(); - for (NamedClass nc : ore.getOwlReasoner().getTypes(ind)){ + for (NamedClass nc : ore.getPelletReasoner().getTypes(ind)){ newClassesString.add(nc.toManchesterSyntaxString(baseURI, prefixes)); } Set<String> oldClassesString = new HashSet<String>(); Modified: trunk/src/dl-learner/org/dllearner/tools/ore/WizardController.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/WizardController.java 2009-06-03 14:14:07 UTC (rev 1788) +++ trunk/src/dl-learner/org/dllearner/tools/ore/WizardController.java 2009-06-03 16:03:06 UTC (rev 1789) @@ -21,22 +21,21 @@ package org.dllearner.tools.ore; +import java.awt.Dimension; import java.awt.event.ActionListener; import java.util.List; import java.util.Set; import java.util.concurrent.ExecutionException; -import java.util.logging.Level; import javax.swing.DefaultListModel; -import javax.swing.Icon; +import javax.swing.JDialog; import javax.swing.JOptionPane; +import javax.swing.JProgressBar; +import javax.swing.SwingUtilities; import javax.swing.SwingWorker; -import javax.swing.UIManager; import org.dllearner.core.owl.Description; import org.dllearner.core.owl.NamedClass; -import org.jdesktop.swingx.JXErrorPane; -import org.jdesktop.swingx.error.ErrorInfo; import org.semanticweb.owl.model.OWLOntologyChange; /** @@ -96,20 +95,30 @@ WizardPanelDescriptor nextDescriptor = model.getPanelHashMap().get(nextPanelDescriptor); if(nextPanelDescriptor.equals("CLASS_CHOOSE_OWL_PANEL")){ -// model.getOre().getOwlReasoner().isSatisfiable() + ore.initPelletReasoner(); + if(!ore.consistentOntology()){ - Exception e = new Exception("ff"); - ErrorInfo info = new ErrorInfo("Inconsistent ontology", "2", "3", null, e, Level.ALL, null); - JXErrorPane error = new JXErrorPane(); - Icon icon = UIManager.getIcon("JOptionPane.errorIcon"); - error.setErrorInfo(info); - error.setIcon(icon);System.out.println(icon); - JXErrorPane.showDialog(wizard.getDialog(), error); + int n = showInconsistentOntologyWarning(); + + if(n == JOptionPane.NO_OPTION){ + nextPanelDescriptor = KnowledgeSourcePanelDescriptor.IDENTIFIER; + } else { + InconsistencyExplanationPanelDescriptor incDescriptor = new InconsistencyExplanationPanelDescriptor(); + wizard.registerWizardPanel(InconsistencyExplanationPanelDescriptor.IDENTIFIER, incDescriptor); + ((InconsistencyExplanationPanelDescriptor)model.getPanelHashMap().get(InconsistencyExplanationPanelDescriptor.IDENTIFIER)).init(); + incDescriptor.init(); + wizard.registerWizardPanel(InconsistencyExplanationPanelDescriptor.IDENTIFIER, incDescriptor); + nextPanelDescriptor = InconsistencyExplanationPanelDescriptor.IDENTIFIER; + } + + + } else { + ((ClassPanelOWLDescriptor) nextDescriptor).getOwlClassPanel().getModel().clear(); + new ConceptRetriever(nextPanelDescriptor).execute(); } - ((ClassPanelOWLDescriptor) nextDescriptor).getOwlClassPanel().getModel().clear(); - new ConceptRetriever(nextPanelDescriptor).execute(); + } if(nextPanelDescriptor.equals("LEARNING_PANEL")){ @@ -229,8 +238,41 @@ } + + private int showInconsistentOntologyWarning(){ +// Exception e = new Exception("ff"); + String infoString = "<html>Can not do reasoning with inconsistent ontologies, " + + "since everything is equivalent to owl:nothing\n" + + "<ul>" + + "<li>Press 'Yes' and try to repair the ontology</li>" + + "<li>Press 'No' and choose another ontology or exit</li>" + + "</ul></html>"; +// ErrorInfo info = new ErrorInfo("Warning: Inconsistent ontology.",infoString , wizard.getModel().getOre().getInconsistencyExplanationsString(), null, e, Level.ALL, null); +// JXErrorPane error = new JXErrorPane(); +// Icon icon = UIManager.getIcon("OptionPane.warningIcon"); +// error.setErrorInfo(info); +// error.setIcon(icon); +// JXErrorPane.showDialog(wizard.getDialog(), error); + + Object[] options = {"Yes", + "No"}; + int n = JOptionPane.showOptionDialog(wizard.getDialog(), + infoString, + "Inconsistent ontology loaded!", + JOptionPane.YES_NO_OPTION, + JOptionPane.WARNING_MESSAGE, + null, //do not use a custom Icon + options, //the titles of buttons + options[0]); //default button title + + return n; + + } + + + void resetButtonsToPanelRules() { // Reset the buttons to support the original panel rules, @@ -298,10 +340,10 @@ // owlClassPanel.getList().setCellRenderer(new ColorListCellRenderer(wizard.getModel().getOre())); wizard.getModel().getOre().initReasoners(); + + Set<NamedClass> classes = wizard.getModel().getOre().getPelletReasoner().getNamedClasses(); + - Set<NamedClass> classes = wizard.getModel().getOre().getOwlReasoner().getNamedClasses(); - unsatClasses = wizard.getModel().getOre().getOwlReasoner().getInconsistentClasses(); - return classes; } @@ -336,6 +378,13 @@ } } + + + + + + + Modified: trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java =================================================================== --- trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java 2009-06-03 14:14:07 UTC (rev 1788) +++ trunk/src/dl-learner/org/dllearner/tools/ore/explanation/AxiomRanker.java 2009-06-03 16:03:06 UTC (rev 1789) @@ -212,6 +212,9 @@ } } } + for(OWLAxiom ax : result){ + System.out.println(reasoner.isEntailed(axiom)); + } return result; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |