/* * Created on Jan 29, 2006 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package org.mindswap.swoop.automation; import java.io.BufferedWriter; import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Set; import org.mindswap.swoop.utils.SwoopStatistics; import org.semanticweb.owl.model.OWLClass; /** * @author Dave Wang * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class StatsPrinter { /* * methods to print to screen * * */ public static void printBasicStats( Hashtable stats ) { System.out.println("Logical URI: " + stats.get( OntologyAnalyzer.LOGICAL_URI ) ); System.out.println("Physical URI: " + stats.get( OntologyAnalyzer.PHYSICAL_URI ) ); System.out.println("No. Defined Classes: " + stats.get( OntologyAnalyzer.NUM_DEFINED_CLASSES ) ); System.out.println("No. Imported Classes: " + stats.get( OntologyAnalyzer.NUM_IMPORTED_CLASSES ) ); System.out.println("No. Defined Datatype Properties: " + stats.get( OntologyAnalyzer.NUM_DEFINED_DATA_PROP ) ); System.out.println("No. Imported Datatype Properties: " + stats.get( OntologyAnalyzer.NUM_IMPORTED_DATA_PROP ) ); System.out.println("No. Defined Object Properties: " + stats.get( OntologyAnalyzer.NUM_DEFINED_OBJ_PROP ) ); System.out.println("No. Imported Object Properties: " + stats.get( OntologyAnalyzer.NUM_IMPORTED_OBJ_PROP ) ); System.out.println("No. Defined Annotation Properties: " + stats.get( OntologyAnalyzer.NUM_DEFINED_ANNO_PROP ) ); System.out.println("No. Imported Annotation Properties: " + stats.get( OntologyAnalyzer.NUM_IMPORTED_ANNO_PROP ) ); System.out.println("No. Link Properties" + stats.get( OntologyAnalyzer.NUM_LINKED_PROP ) ); System.out.println("No. Defined Individuals: " + stats.get( OntologyAnalyzer.NUM_DEFINED_IND ) ); System.out.println("No. Imported Individuals: " + stats.get( OntologyAnalyzer.NUM_IMPORTED_IND ) ); System.out.println("No. Type Assertions: " + stats.get( OntologyAnalyzer.NUM_TYPE_ASSERTIONS ) ); System.out.println("No. Individual Datatype Assertions: " + stats.get( OntologyAnalyzer.NUM_DPROP_ASSERTIONS ) ); System.out.println("No. Individual Object Assertions: " + stats.get( OntologyAnalyzer.NUM_OPROP_ASSERTIONS ) ); } public static void printAdvancedStats( HashMap advStats ) { Set unsat = (HashSet) advStats.get(SwoopStatistics.UNSATISFIABLE_CLASSES); Set gci = (HashSet) advStats.get(SwoopStatistics.NO_GCI); String subsumptions = (String) advStats.get(SwoopStatistics.NO_SUBSUMPTIONS); Set disj = (HashSet) advStats.get(SwoopStatistics.NO_DISJOINT); Set func = (HashSet) advStats.get(SwoopStatistics.NO_FUNCTIONAL); Set ifunc = (HashSet) advStats.get(SwoopStatistics.NO_INVFUNCTIONAL); Set tran = (HashSet) advStats.get(SwoopStatistics.NO_TRANSITIVE); Set symm = (HashSet) advStats.get(SwoopStatistics.NO_SYMMETRIC); Set inv = (HashSet) advStats.get(SwoopStatistics.NO_INVERSE); // class tree depth List maxCList = (List) advStats.get(SwoopStatistics.MAX_DEPTH_CLASS_TREE); List minCList = (List) advStats.get(SwoopStatistics.MIN_DEPTH_CLASS_TREE); String avgC = advStats.get(SwoopStatistics.AVG_DEPTH_CLASS_TREE).toString(); // class tree branching factor List maxBList = (List) advStats.get(SwoopStatistics.MAX_BRANCHING_FACTOR); List minBList = (List) advStats.get(SwoopStatistics.MIN_BRANCHING_FACTOR); String avgB = advStats.get(SwoopStatistics.AVG_BRANCHING_FACTOR).toString(); // prop tree depth List maxPList = (List) advStats.get(SwoopStatistics.MAX_DEPTH_PROP_TREE); List minPList = (List) advStats.get(SwoopStatistics.MIN_DEPTH_PROP_TREE); String avgP = advStats.get(SwoopStatistics.AVG_DEPTH_PROP_TREE).toString(); // multiple inheritance (class and prop) Set multC = (HashSet) advStats.get(SwoopStatistics.MULTIPLE_INHERITANCE_CLASS); Set multP = (HashSet) advStats.get(SwoopStatistics.MULTIPLE_INHERITANCE_PROP); // expressivity System.out.println("DL Expressivity: " + advStats.get( OntologyAnalyzer.EXPRESSIVITY) ); if ( unsat == null ) System.out.println("No. Unsatisfiable Classes: 0"); else System.out.println("No. Unsatisfiable Classes: " + unsat.size() ); System.out.println("No. GCI's : " + gci.size() ); System.out.println("No. Subsumptions: " + subsumptions ); System.out.println("No. Disjoint Axioms: " + disj.size() ); System.out.println("No. Functional Props: " + func.size() ); System.out.println("No. Inverse-Functional Props: " + ifunc.size() ); System.out.println("No. Transitive Props: " + tran.size() ); System.out.println("No. Symmetric Props: " + symm.size() ); System.out.println("No. Inverse Props: " + inv.size() ); System.out.println("Max Class Tree Depth: " + maxCList.get(0) ); System.out.println("Min Class Tree Depth: " + minCList.get(0) ); System.out.println("Avg Class Tree Depth: " + avgC ); System.out.println("Max Class Tree Branching Factor: " + maxBList.get(0) ); System.out.println("Min Class Tree Branching Factor: " + minBList.get(0) ); System.out.println("Avg Class Tree Branching Factor: " + avgB ); System.out.println("Max Prop Tree Depth: " + maxPList.get(0) ); System.out.println("Min Prop Tree Depth: " + minPList.get(0) ); System.out.println("Avg Prop Tree Depth: " + avgP ); System.out.println("No. Class Multiple Inheritance: " + multC.size() ); System.out.println("No. Property Multiple Inheritance: " + multP.size() ); System.out.println("Is Consistent? " + advStats.get( OntologyAnalyzer.CONSISTENCY ) ); System.out.println("Graph Morphology: " + advStats.get( OntologyAnalyzer.GRAPH_MORPHOLOGY ) ); } public static void printToFileTabDelim( BufferedWriter writer, Hashtable basicStats, HashMap toldAdvStats, HashMap pelletAdvStats ) { try { writeStaticStatsToFile( writer, basicStats, toldAdvStats ); writeToldAndReasonedDynamicStats( writer, toldAdvStats, pelletAdvStats ); } catch ( Exception e ) { e.printStackTrace(); } } /* Writing the categories of each stats. */ public static void writeFileHeader( BufferedWriter writer ) { try { writer.write("Logical URI\t"); writer.write("Physical URI\t"); writer.write("No. Defined Classes\t"); writer.write("No. Imported Classes\t"); writer.write("No. Defined Datatype Props\t"); writer.write("No. Imported Datatype Props\t"); writer.write("No. Defined Object Props\t"); writer.write("No. Imported Object Props\t"); writer.write("No. Defined Annotation Props\t"); writer.write("No. Imported Annotation Props\t"); writer.write("No. Linked Props\t"); writer.write("No. Defined Individuals\t"); writer.write("No. Imported Individuals Individuals\t"); writer.write("No. GCIs\t"); writer.write("No. Functional Props\t"); writer.write("No. Inverse Functional Props\t"); writer.write("No. Transitive Props\t"); writer.write("No. Symmetric Props\t"); writer.write("No. Inverse Props\t"); writer.write("No. Type assertions\t"); writer.write("No. Ind Data Assertions\t"); writer.write("No. Ind Obj Assertions\t"); // told ontology tree stats writer.write("DL Expressivity \t"); writer.write("No. Unsatisfiable Classes\t"); writer.write("No. Subsumptions\t"); writer.write("No. Disjoint Axioms\t"); writer.write("Max Class Tree Depth\t"); writer.write("Min Class Tree Depth\t"); writer.write("Avg Class Tree Depth\t"); writer.write("Max Class Tree Branching Factor\t"); writer.write("Min Class Tree Branching Factor\t"); writer.write("Avg Class Tree Branching Factor\t"); writer.write("Max Prop Tree Depth\t"); writer.write("Min Prop Tree Depth\t"); writer.write("Avg Prop Tree Depth\t"); writer.write("No. Class Multiple Inheritance\t"); writer.write("No. Property Multiple Inheritance\t"); writer.write("Consistent?\t"); writer.write("Graph Morphology\t"); // pellet ontology tree stats writer.write("DL Expressivity \t"); writer.write("No. Unsatisfiable Classes\t"); writer.write("No. Subsumptions\t"); writer.write("No. Disjunctions\t"); writer.write("Max Class Tree Depth\t"); writer.write("Min Class Tree Depth\t"); writer.write("Avg Class Tree Depth\t"); writer.write("Max Class Tree Branching Factor\t"); writer.write("Min Class Tree Branching Factor\t"); writer.write("Avg Class Tree Branching Factor\t"); writer.write("Max Prop Tree Depth\t"); writer.write("Min Prop Tree Depth\t"); writer.write("Avg Prop Tree Depth\t"); writer.write("No. Class Multiple Inheritance\t"); writer.write("No. Property Multiple Inheritance\t"); writer.write("Consistent?\t"); writer.write("Graph Morphology\t"); // extra stuff // writer.write("Pellet Classification Time"); writer.newLine(); writer.flush(); } catch ( Exception e ) { e.printStackTrace(); } } /* * Writes out stats that do not change when reasoner is turned on. * Takes in a basicStats hashmap and an advancedstats hashmap */ private static void writeStaticStatsToFile( BufferedWriter writer, Hashtable basicStats, HashMap advStats ) { try { writer.write( (String)basicStats.get( OntologyAnalyzer.LOGICAL_URI ) + "\t" ); writer.write( (String)basicStats.get( OntologyAnalyzer.PHYSICAL_URI ) + "\t" ); writer.write( (String)basicStats.get( OntologyAnalyzer.NUM_DEFINED_CLASSES ) + "\t" ); writer.write( (String)basicStats.get( OntologyAnalyzer.NUM_IMPORTED_CLASSES ) + "\t" ); writer.write( (String)basicStats.get( OntologyAnalyzer.NUM_DEFINED_DATA_PROP ) + "\t" ); writer.write( (String)basicStats.get( OntologyAnalyzer.NUM_IMPORTED_DATA_PROP ) + "\t" ); writer.write( (String)basicStats.get( OntologyAnalyzer.NUM_DEFINED_OBJ_PROP ) + "\t" ); writer.write( (String)basicStats.get( OntologyAnalyzer.NUM_IMPORTED_OBJ_PROP ) + "\t" ); writer.write( (String)basicStats.get( OntologyAnalyzer.NUM_DEFINED_ANNO_PROP ) + "\t" ); writer.write( (String)basicStats.get( OntologyAnalyzer.NUM_IMPORTED_ANNO_PROP ) + "\t" ); writer.write( (String)basicStats.get( OntologyAnalyzer.NUM_LINKED_PROP ) + "\t" ); writer.write( (String)basicStats.get( OntologyAnalyzer.NUM_DEFINED_IND ) + "\t" ); writer.write( (String)basicStats.get( OntologyAnalyzer.NUM_IMPORTED_IND ) + "\t" ); writer.write( ((HashSet) advStats.get(SwoopStatistics.NO_GCI)).size() + "\t" ); writer.write( ((HashSet) advStats.get(SwoopStatistics.NO_FUNCTIONAL)).size() + "\t" ); writer.write( ((HashSet) advStats.get(SwoopStatistics.NO_INVFUNCTIONAL)).size() + "\t" ); writer.write( ((HashSet) advStats.get(SwoopStatistics.NO_TRANSITIVE)).size() + "\t" ); writer.write( ((HashSet) advStats.get(SwoopStatistics.NO_SYMMETRIC)).size() + "\t" ); writer.write( ((HashSet) advStats.get(SwoopStatistics.NO_INVERSE)).size() + "\t" ); writer.write( (String)basicStats.get( OntologyAnalyzer.NUM_TYPE_ASSERTIONS ) + "\t"); writer.write( (String)basicStats.get( OntologyAnalyzer.NUM_DPROP_ASSERTIONS ) + "\t"); writer.write( (String)basicStats.get( OntologyAnalyzer.NUM_OPROP_ASSERTIONS ) + "\t"); writer.flush(); } catch ( Exception e ) { e.printStackTrace(); } } private static void writeToldAndReasonedDynamicStats( BufferedWriter writer, HashMap toldAdvStats, HashMap pelletAdvStats ) { try { writeDynamicStats( writer, toldAdvStats ); if ( pelletAdvStats != null) writeDynamicStats( writer, pelletAdvStats ); writer.newLine(); writer.flush(); } catch ( Exception e ) { e.printStackTrace(); } } /* * write out the dynamic portions of just one advanced stats * */ private static void writeDynamicStats( BufferedWriter writer, HashMap advStats ) { try { Set unsat = (HashSet) advStats.get(SwoopStatistics.UNSATISFIABLE_CLASSES); Set gci = (HashSet) advStats.get(SwoopStatistics.NO_GCI); String subsumptions = (String) advStats.get(SwoopStatistics.NO_SUBSUMPTIONS); Set disj = (HashSet) advStats.get(SwoopStatistics.NO_DISJOINT); Set func = (HashSet) advStats.get(SwoopStatistics.NO_FUNCTIONAL); Set ifunc = (HashSet) advStats.get(SwoopStatistics.NO_INVFUNCTIONAL); Set tran = (HashSet) advStats.get(SwoopStatistics.NO_TRANSITIVE); Set symm = (HashSet) advStats.get(SwoopStatistics.NO_SYMMETRIC); Set inv = (HashSet) advStats.get(SwoopStatistics.NO_INVERSE); // class tree depth List maxCList = (List) advStats.get(SwoopStatistics.MAX_DEPTH_CLASS_TREE); List minCList = (List) advStats.get(SwoopStatistics.MIN_DEPTH_CLASS_TREE); String avgC = advStats.get(SwoopStatistics.AVG_DEPTH_CLASS_TREE).toString(); // class tree branching factor List maxBList = (List) advStats.get(SwoopStatistics.MAX_BRANCHING_FACTOR); List minBList = (List) advStats.get(SwoopStatistics.MIN_BRANCHING_FACTOR); String avgB = advStats.get(SwoopStatistics.AVG_BRANCHING_FACTOR).toString(); // prop tree depth List maxPList = (List) advStats.get(SwoopStatistics.MAX_DEPTH_PROP_TREE); List minPList = (List) advStats.get(SwoopStatistics.MIN_DEPTH_PROP_TREE); String avgP = advStats.get(SwoopStatistics.AVG_DEPTH_PROP_TREE).toString(); // multiple inheritance (class and prop) Set multC = (HashSet) advStats.get(SwoopStatistics.MULTIPLE_INHERITANCE_CLASS); Set multP = (HashSet) advStats.get(SwoopStatistics.MULTIPLE_INHERITANCE_PROP); String exprShort = (String)advStats.get( OntologyAnalyzer.EXPRESSIVITY ); writer.write( exprShort + "\t"); if ( unsat == null ) writer.write("0\t"); else writer.write( unsat.size() + "\t" ); writer.write( subsumptions + "\t" ); writer.write( disj.size() + "\t" ); writer.write( maxCList.get(0) + "\t" ); writer.write( minCList.get(0) + "\t" ); writer.write( avgC + "\t" ); writer.write( maxBList.get(0) + "\t" ); writer.write( minBList.get(0) + "\t" ); writer.write( avgB + "\t" ); writer.write( maxPList.get(0) + "\t"); writer.write( minPList.get(0) + "\t"); writer.write( avgP + "\t"); writer.write( multC.size() + "\t"); writer.write( multP.size() + "\t"); writer.write( (String)advStats.get( OntologyAnalyzer.CONSISTENCY) + "\t"); writer.write( (String)advStats.get( OntologyAnalyzer.GRAPH_MORPHOLOGY ) + "\t"); writer.flush(); } catch ( Exception e ) { e.printStackTrace(); } } }