001package org.dllearner.cli; 002 003import org.apache.log4j.Level; 004import org.dllearner.core.*; 005import org.dllearner.learningproblems.EvaluatedDescriptionPosNeg; 006import org.dllearner.utilities.OWLAPIUtils; 007import org.semanticweb.owlapi.model.OWLClassExpression; 008import org.semanticweb.owlapi.model.OWLDataFactory; 009import org.slf4j.Logger; 010import org.slf4j.LoggerFactory; 011import uk.ac.manchester.cs.owl.owlapi.OWLDataFactoryImpl; 012 013import java.io.IOException; 014 015/** 016 * Evaluate a class expression on a PosNegLP 017 */ 018@ComponentAnn(name = "Expression validator", version = 0, shortName = "") 019public class ExpressionValidation extends CLIBase2 { 020 021 private static Logger logger = LoggerFactory.getLogger(ExpressionValidation.class); 022 023 private KnowledgeSource knowledgeSource; 024 private AbstractReasonerComponent rs; 025 private AbstractClassExpressionLearningProblem lp; 026 private OWLDataFactory dataFactory = new OWLDataFactoryImpl(); 027 028 public OWLClassExpression getExpression() { 029 return expression; 030 } 031 032 public void setExpression(OWLClassExpression expression) { 033 this.expression = expression; 034 } 035 036 private OWLClassExpression expression; 037 038 @Override 039 public void init() throws IOException { 040 if (context == null) { 041 super.init(); 042 043 knowledgeSource = context.getBean(KnowledgeSource.class); 044 rs = getMainReasonerComponent(); 045 lp = context.getBean(AbstractClassExpressionLearningProblem.class); 046 } 047 } 048 049 @Override 050 public void run() { 051 try { 052 org.apache.log4j.Logger.getLogger("org.dllearner").setLevel(Level.toLevel(logLevel.toUpperCase())); 053 } catch (Exception e) { 054 logger.warn("Error setting log level to " + logLevel); 055 } 056 lp = context.getBean(AbstractClassExpressionLearningProblem.class); 057 rs = lp.getReasoner(); 058 059 expression = OWLAPIUtils.classExpressionPropertyExpanderChecked(this.expression, rs, dataFactory, true, logger); 060 if (expression != null) { 061 EvaluatedHypothesis ev = lp.evaluate(expression); 062 if (ev instanceof EvaluatedDescriptionPosNeg) { 063 logger.info("#EVAL# tp: " + ((EvaluatedDescriptionPosNeg) ev).getCoveredPositives().size()); 064 logger.info("#EVAL# fp: " + ((EvaluatedDescriptionPosNeg) ev).getCoveredNegatives().size()); 065 logger.info("#EVAL# tn: " + ((EvaluatedDescriptionPosNeg) ev).getNotCoveredNegatives().size()); 066 logger.info("#EVAL# fn: " + ((EvaluatedDescriptionPosNeg) ev).getNotCoveredPositives().size()); 067 } 068 } else { 069 logger.error("Expression is empty."); 070 throw new RuntimeException("Expression is empty."); 071 } 072 } 073}