From: <lor...@us...> - 2013-05-06 21:02:48
|
Revision: 3954 http://sourceforge.net/p/dl-learner/code/3954 Author: lorenz_b Date: 2013-05-06 21:02:45 +0000 (Mon, 06 May 2013) Log Message: ----------- Improved Latex output. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGeneratorImpl.java trunk/scripts/src/main/java/org/dllearner/scripts/pattern/OWLAxiomPatternDetectionEvaluation.java Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGeneratorImpl.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGeneratorImpl.java 2013-05-06 10:40:57 UTC (rev 3953) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGeneratorImpl.java 2013-05-06 21:02:45 UTC (rev 3954) @@ -24,7 +24,7 @@ private Model baseModel; private List<String> namespaces; - private int maxRecursionDepth = 2; + private int maxRecursionDepth = 3; public ConciseBoundedDescriptionGeneratorImpl(SparqlEndpoint endpoint, ExtractionDBCache cache) { this.endpoint = endpoint; Modified: trunk/scripts/src/main/java/org/dllearner/scripts/pattern/OWLAxiomPatternDetectionEvaluation.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/pattern/OWLAxiomPatternDetectionEvaluation.java 2013-05-06 10:40:57 UTC (rev 3953) +++ trunk/scripts/src/main/java/org/dllearner/scripts/pattern/OWLAxiomPatternDetectionEvaluation.java 2013-05-06 21:02:45 UTC (rev 3954) @@ -13,6 +13,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -67,6 +68,8 @@ private boolean fancyLatex = false; private boolean dlSyntax = false; private boolean formatNumbers = true; + + private int numberOfRowsPerTable = 25; public OWLAxiomPatternDetectionEvaluation() { initDBConnection(); @@ -107,7 +110,7 @@ makeRepositoryStatistics(repositories); //get top n TBox, RBox and ABox patterns - makePatternStatistics(repositories); + makePatternStatisticsSingleTable(repositories); } public void run(Collection<OntologyRepository> repositories){ @@ -132,7 +135,7 @@ } private void makePatternStatistics(Collection<OntologyRepository> repositories){ - int n = 10; + int n = numberOfRowsPerTable; String latex = ""; @@ -158,6 +161,26 @@ } } + private void makePatternStatisticsSingleTable(Collection<OntologyRepository> repositories){ + int n = numberOfRowsPerTable; + + String latex = ""; + + //total pattern statistics + for (AxiomTypeCategory axiomTypeCategory : AxiomTypeCategory.values()) { + Map<Integer, Map<OWLAxiom, Pair<Integer, Integer>>> topNAxiomPatterns = getTopNAxiomPatternsWithId(axiomTypeCategory, n); + latex += asLatexWithId(axiomTypeCategory, topNAxiomPatterns, repositories, n) + "\n\n"; + } + + try { + new FileOutputStream("pattern-statistics.tex").write(latex.getBytes()); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + private void makeRepositoryStatistics(Collection<OntologyRepository> repositories){ String latexTable = "\\begin{tabular}{lrr|rrr|rrr|rrr|rrr}"; latexTable += "\\toprule\n"; @@ -331,6 +354,66 @@ return latexTable; } + private String asLatexWithId(AxiomTypeCategory axiomTypeCategory, Map<Integer, Map<OWLAxiom, Pair<Integer, Integer>>> topNAxiomPatterns, Collection<OntologyRepository> repositories, int n){ + StringWriter sw = new StringWriter(); + LatexWriter w = new LatexWriter(sw); + LatexObjectVisitor renderer = new LatexObjectVisitor(w, df); + String latexTable = "\\begin{table}\n"; + latexTable += "\\begin{tabular}{rlrr"; + for (int i = 0; i < repositories.size(); i++) { + latexTable += "r"; + } + latexTable += "}\n"; + latexTable += "\\toprule\n"; + latexTable += " & Pattern & Frequency & \\#Ontologies"; + for (OntologyRepository repository : repositories) { + latexTable += " & " + repository.getName(); + } + latexTable += "\\\\\\midrule\n"; + + int i = 0; + for (Entry<Integer, Map<OWLAxiom, Pair<Integer, Integer>>> entry : topNAxiomPatterns.entrySet()) { + i++; + int patternId = entry.getKey(); + OWLAxiom axiom = entry.getValue().keySet().iterator().next(); + Integer frequency = entry.getValue().values().iterator().next().getKey(); + Integer df = entry.getValue().values().iterator().next().getValue(); + + if(axiom != null){ + String axiomColumn = axiomRenderer.render(axiom); + if(fancyLatex){ + axiomColumn = "\\begin{lstlisting}[language=manchester]" + axiomColumn + "\\end{lstlisting}"; + } + if(dlSyntax){ + axiom.accept(renderer); + axiomColumn = sw.toString();sw.getBuffer().setLength(0); + + } + if(formatNumbers){ + latexTable += i + " & " + axiomColumn + " & " + "\\num{" + frequency + "} & " + df; + for (OntologyRepository repository : repositories) { + int rank = 0; + Map<Integer, Map<OWLAxiom, Pair<Integer, Integer>>> topNAxiomPatternsWithId = getTopNAxiomPatternsWithId(repository, axiomTypeCategory, 100); + for (Entry<Integer, Map<OWLAxiom, Pair<Integer, Integer>>> entry2 : topNAxiomPatternsWithId.entrySet()) { + rank++; + if(entry2.getKey() == patternId){ + break; + } + } + latexTable += " & " + rank; + } + latexTable += "\\\\\n"; + } else { + latexTable += axiomColumn + " & " + frequency + " & " + df + "\\\\\n"; + } + } + } + latexTable += "\\bottomrule\n\\end{tabular}\n"; + latexTable += "\\caption{" + "Top " + n + " " + axiomTypeCategory.name() + " axiom patterns." + "}\n"; + latexTable += "\\end{table}\n"; + return latexTable; + } + private Map<OWLAxiom, Pair<Integer, Integer>> getTopNAxiomPatterns(AxiomTypeCategory axiomType, int n){ Map<OWLAxiom, Pair<Integer, Integer>> topN = new LinkedHashMap<OWLAxiom, Pair<Integer, Integer>>(); PreparedStatement ps; @@ -352,6 +435,53 @@ return topN; } + private Map<Integer, Map<OWLAxiom, Pair<Integer, Integer>>> getTopNAxiomPatternsWithId(AxiomTypeCategory axiomType, int n){ + Map<Integer, Map<OWLAxiom, Pair<Integer, Integer>>> topN = new LinkedHashMap<Integer, Map<OWLAxiom, Pair<Integer, Integer>>>(); + PreparedStatement ps; + ResultSet rs; + try { + ps = conn.prepareStatement("SELECT P.id, pattern,SUM(occurrences),COUNT(ontology_id) FROM " + + "Ontology_Pattern OP, Pattern P, Ontology O WHERE " + + "(P.id=OP.pattern_id AND O.id=OP.ontology_id AND P.axiom_type=?) " + + "GROUP BY P.id ORDER BY SUM(`OP`.`occurrences`) DESC LIMIT ?"); + ps.setString(1, axiomType.name()); + ps.setInt(2, n); + rs = ps.executeQuery(); + while(rs.next()){ + Map<OWLAxiom, Pair<Integer, Integer>> m = new LinkedHashMap<OWLAxiom, Pair<Integer,Integer>>(); + m.put(asOWLAxiom(rs.getString(2)), new Pair<Integer, Integer>(rs.getInt(3), rs.getInt(4))); + topN.put(rs.getInt(1), m); + } + } catch(SQLException e){ + e.printStackTrace(); + } + return topN; + } + + private Map<Integer, Map<OWLAxiom, Pair<Integer, Integer>>> getTopNAxiomPatternsWithId(OntologyRepository repository, AxiomTypeCategory axiomType, int n){ + Map<Integer, Map<OWLAxiom, Pair<Integer, Integer>>> topN = new LinkedHashMap<Integer, Map<OWLAxiom, Pair<Integer, Integer>>>(); + PreparedStatement ps; + ResultSet rs; + try { + ps = conn.prepareStatement("SELECT P.id, pattern,SUM(occurrences),COUNT(ontology_id) FROM " + + "Ontology_Pattern OP, Pattern P, Ontology O WHERE " + + "(P.id=OP.pattern_id AND O.id=OP.ontology_id AND P.axiom_type=? AND O.repository=?) " + + "GROUP BY P.id ORDER BY SUM(`OP`.`occurrences`) DESC LIMIT ?"); + ps.setString(1, axiomType.name()); + ps.setString(2, repository.getName()); + ps.setInt(3, n); + rs = ps.executeQuery(); + while(rs.next()){ + Map<OWLAxiom, Pair<Integer, Integer>> m = new LinkedHashMap<OWLAxiom, Pair<Integer,Integer>>(); + m.put(asOWLAxiom(rs.getString(2)), new Pair<Integer, Integer>(rs.getInt(3), rs.getInt(4))); + topN.put(rs.getInt(1), m); + } + } catch(SQLException e){ + e.printStackTrace(); + } + return topN; + } + private Map<OWLAxiom, Pair<Integer, Integer>> getTopNAxiomPatterns(OntologyRepository repository, AxiomTypeCategory axiomType, int n){ Map<OWLAxiom, Pair<Integer, Integer>> topN = new LinkedHashMap<OWLAxiom, Pair<Integer, Integer>>(); PreparedStatement ps; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |