From: <lor...@us...> - 2013-05-04 05:50:52
|
Revision: 3941 http://sourceforge.net/p/dl-learner/code/3941 Author: lorenz_b Date: 2013-05-04 05:50:47 +0000 (Sat, 04 May 2013) Log Message: ----------- Some modifications in pattern detection script. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java trunk/components-core/src/main/java/org/dllearner/kb/repository/tones/TONESRepository.java trunk/interfaces/src/main/java/org/dllearner/cli/Enrichment.java trunk/pom.xml trunk/scripts/pom.xml trunk/scripts/src/main/java/org/dllearner/scripts/OWLAxiomPatternDetectionEvaluation.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java 2013-05-03 08:49:17 UTC (rev 3940) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomPatternFinder.java 2013-05-04 05:50:47 UTC (rev 3941) @@ -21,6 +21,7 @@ import java.util.Set; import java.util.prefs.Preferences; +import org.coode.owlapi.functionalparser.OWLFunctionalSyntaxOWLParser; import org.dllearner.kb.dataset.OWLOntologyDataset; import org.dllearner.kb.repository.OntologyRepository; import org.dllearner.kb.repository.OntologyRepositoryEntry; @@ -28,6 +29,7 @@ import org.ini4j.InvalidFileFormatException; import org.semanticweb.owlapi.apibinding.OWLManager; import org.semanticweb.owlapi.io.OWLObjectRenderer; +import org.semanticweb.owlapi.io.StringDocumentSource; import org.semanticweb.owlapi.io.UnparsableOntologyException; import org.semanticweb.owlapi.model.AxiomType; import org.semanticweb.owlapi.model.IRI; @@ -359,7 +361,9 @@ entries = entryList; } Multiset<OWLAxiom> allAxiomPatterns = HashMultiset.create(); + int i = 1; for (OntologyRepositoryEntry entry : entries) { + System.out.print(i + ": "); URI uri = entry.getPhysicalURI(); // if(uri.toString().startsWith("http://rest.bioontology.org/bioportal/ontologies/download/42764")){ if (!ontologyProcessed(uri)) { @@ -368,15 +372,19 @@ manager = OWLManager.createOWLOntologyManager(); OWLOntology ontology = manager.loadOntology(IRI.create(uri)); Multiset<OWLAxiom> axiomPatterns = HashMultiset.create(); - for (OWLLogicalAxiom axiom : ontology.getLogicalAxioms()) { + Set<OWLAxiom> logicalAxioms = new HashSet<OWLAxiom>(); + for (AxiomType<?> type : AxiomType.AXIOM_TYPES) { + logicalAxioms.addAll(ontology.getAxioms(type, true)); + } + for (OWLAxiom axiom : logicalAxioms) { OWLAxiom renamedAxiom = renamer.rename(axiom); axiomPatterns.add(renamedAxiom); } allAxiomPatterns.addAll(axiomPatterns); addOntologyPatterns(uri, ontology, axiomPatterns); - for (OWLAxiom owlAxiom : Multisets.copyHighestCountFirst(allAxiomPatterns).elementSet()) { +// for (OWLAxiom owlAxiom : Multisets.copyHighestCountFirst(allAxiomPatterns).elementSet()) { // System.out.println(owlAxiom + ": " + allAxiomPatterns.count(owlAxiom)); - } +// } manager.removeOntology(ontology); } catch (OWLOntologyAlreadyExistsException e) { e.printStackTrace(); @@ -384,6 +392,8 @@ e.printStackTrace(); addOntologyError(uri, e); } + } else { + System.out.println("Already processed."); } } @@ -401,5 +411,11 @@ org.coode.owlapi.functionalrenderer.OWLObjectRenderer r = new org.coode.owlapi.functionalrenderer.OWLObjectRenderer(man, ontology, sw); axiom.accept(r); System.out.println(sw.toString()); + StringDocumentSource s = new StringDocumentSource("Ontology(<http://www.pattern.org>" + sw.toString() + ")"); + OWLFunctionalSyntaxOWLParser p = new OWLFunctionalSyntaxOWLParser(); + OWLOntology newOntology = man.createOntology(); + p.parse(s, newOntology); + System.out.println(newOntology.getLogicalAxioms()); + } } Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java 2013-05-03 08:49:17 UTC (rev 3940) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/pattern/OWLAxiomRenamer.java 2013-05-04 05:50:47 UTC (rev 3941) @@ -341,14 +341,13 @@ @Override public void visit(OWLSubPropertyChainOfAxiom axiom) { + List<OWLObjectPropertyExpression> renamedSubPropertyChain = new ArrayList<OWLObjectPropertyExpression>(); + for (OWLObjectPropertyExpression owlObjectPropertyExpression : axiom.getPropertyChain()) { + renamedSubPropertyChain.add(expressionRenamer.rename(owlObjectPropertyExpression)); + } OWLObjectPropertyExpression superProperty = axiom.getSuperProperty(); superProperty = expressionRenamer.rename(superProperty); - List<OWLObjectPropertyExpression> subPropertyChain = axiom.getPropertyChain(); - List<OWLObjectPropertyExpression> renamedSubPropertyChain = axiom.getPropertyChain(); - for (OWLObjectPropertyExpression owlObjectPropertyExpression : subPropertyChain) { - renamedSubPropertyChain.add(expressionRenamer.rename(owlObjectPropertyExpression)); - } - renamedAxiom = df.getOWLSubPropertyChainOfAxiom(subPropertyChain, superProperty); + renamedAxiom = df.getOWLSubPropertyChainOfAxiom(renamedSubPropertyChain, superProperty); } @Override Modified: trunk/components-core/src/main/java/org/dllearner/kb/repository/tones/TONESRepository.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/repository/tones/TONESRepository.java 2013-05-03 08:49:17 UTC (rev 3940) +++ trunk/components-core/src/main/java/org/dllearner/kb/repository/tones/TONESRepository.java 2013-05-04 05:50:47 UTC (rev 3941) @@ -10,14 +10,18 @@ import java.util.Collections; import java.util.List; +import org.apache.log4j.Logger; import org.dllearner.kb.repository.OntologyRepository; import org.dllearner.kb.repository.OntologyRepositoryEntry; +import org.dllearner.kb.repository.bioportal.BioPortalRepository; import org.semanticweb.owlapi.model.IRI; import org.semanticweb.owlapi.model.OWLOntologyIRIMapper; import org.semanticweb.owlapi.util.OntologyIRIShortFormProvider; public class TONESRepository implements OntologyRepository{ + private static final Logger log = Logger.getLogger(TONESRepository.class); + private final String repositoryName = "TONES"; private final URI repositoryLocation = URI.create("http://owl.cs.manchester.ac.uk/repository"); @@ -91,6 +95,7 @@ catch (IOException e) { e.printStackTrace(); } + log.info("Loaded " + entries.size() + " ontology entries from TONES."); } private class RepositoryEntry implements OntologyRepositoryEntry { Modified: trunk/interfaces/src/main/java/org/dllearner/cli/Enrichment.java =================================================================== --- trunk/interfaces/src/main/java/org/dllearner/cli/Enrichment.java 2013-05-03 08:49:17 UTC (rev 3940) +++ trunk/interfaces/src/main/java/org/dllearner/cli/Enrichment.java 2013-05-04 05:50:47 UTC (rev 3941) @@ -61,11 +61,14 @@ import joptsimple.OptionSpec; import org.aksw.commons.jena_owlapi.Conversion; +import org.apache.jena.riot.checker.CheckerLiterals; +import org.apache.jena.riot.system.ErrorHandlerFactory; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.SimpleLayout; import org.coode.owlapi.manchesterowlsyntax.ManchesterOWLSyntaxOntologyFormat; +import org.coode.owlapi.turtle.TurtleOntologyFormat; import org.dllearner.algorithms.celoe.CELOE; import org.dllearner.algorithms.properties.AsymmetricObjectPropertyAxiomLearner; import org.dllearner.algorithms.properties.DataPropertyDomainAxiomLearner; @@ -127,6 +130,7 @@ import org.dllearner.utilities.datastructures.SortedSetTuple; import org.dllearner.utilities.examples.AutomaticNegativeExampleFinderSPARQL2; import org.dllearner.utilities.owl.OWLAPIAxiomConvertVisitor; +import org.dllearner.utilities.owl.OWLEntityTypeAdder; import org.semanticweb.owlapi.apibinding.OWLManager; import org.semanticweb.owlapi.io.RDFXMLOntologyFormat; import org.semanticweb.owlapi.io.SystemOutDocumentTarget; @@ -212,7 +216,7 @@ // restrict tested number of entities per type (only for testing purposes); // should be set to -1 in production mode - int maxEntitiesPerType = -1; + int maxEntitiesPerType = 5; // number of axioms which will be learned/considered (only applies to // some learners) @@ -462,7 +466,7 @@ ksFragment = ksCached; rc = rcCached; } else { - System.out.print("extracting fragment ... "); + System.out.print("extracting fragment ... ");//com.hp.hpl.jena.shared.impl.JenaParameters.enableEagerLiteralValidation = true; startTime = System.currentTimeMillis(); ConciseBoundedDescriptionGenerator cbdGen = new ConciseBoundedDescriptionGeneratorImpl(ks.getEndpoint(), cache, 2); Model model = ModelFactory.createDefaultModel(); @@ -471,6 +475,7 @@ model.add(cbd); } filter(model); + OWLEntityTypeAdder.addEntityTypes(model); runTime = System.currentTimeMillis() - startTime; System.out.println("done (" + model.size()+ " triples found in " + runTime + " ms)"); OWLOntology ontology = asOWLOntology(model); @@ -768,6 +773,13 @@ model.write(fos, "TURTLE", null); OWLOntologyManager man = OWLManager.createOWLOntologyManager(); OWLOntology ontology = man.loadOntologyFromOntologyDocument(new ByteArrayInputStream(baos.toByteArray())); + try { + man.saveOntology(ontology, new TurtleOntologyFormat(), new FileOutputStream("error.owl")); + } catch (OWLOntologyStorageException e) { + e.printStackTrace(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } return ontology; } catch (OWLOntologyCreationException e) { e.printStackTrace(); @@ -797,6 +809,7 @@ // fix URIs with spaces Resource newSubject = (Resource) subject; RDFNode newObject = object; + boolean validTriple = true; if (subject.isURIResource()) { String uri = subject.asResource().getURI(); if (uri.contains(" ")) { @@ -814,8 +827,11 @@ if (lit.getDatatype() == null || lit.getDatatype().equals(XSD.STRING)) { newObject = model.createLiteral("shortened", "en"); } + validTriple = CheckerLiterals.checkLiteral(object.asNode(), ErrorHandlerFactory.errorHandlerNoLogging, 1l, 1l); } - statementsToAdd.add(model.createStatement(newSubject, st.getPredicate(), newObject)); + if(validTriple){ + statementsToAdd.add(model.createStatement(newSubject, st.getPredicate(), newObject)); + } statementsToRemove.add(st); } Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-05-03 08:49:17 UTC (rev 3940) +++ trunk/pom.xml 2013-05-04 05:50:47 UTC (rev 3941) @@ -123,7 +123,8 @@ <dependency> <groupId>net.sourceforge.owlapi</groupId> <artifactId>owlapi-distribution</artifactId> - <version>3.4.4</version> + <version>3.4.3</version> + <type>pom</type> </dependency> <dependency> <groupId>net.sourceforge.owlapi</groupId> @@ -379,7 +380,7 @@ <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> - <version>5.1.13</version> + <version>5.1.24</version> </dependency> <!--GWT Dependencies --> Modified: trunk/scripts/pom.xml =================================================================== --- trunk/scripts/pom.xml 2013-05-03 08:49:17 UTC (rev 3940) +++ trunk/scripts/pom.xml 2013-05-04 05:50:47 UTC (rev 3941) @@ -116,6 +116,7 @@ <dependency> <groupId>net.sourceforge.owlapi</groupId> <artifactId>owlapi-distribution</artifactId> + <type>pom</type> </dependency> <dependency> <groupId>net.sourceforge.owlapi</groupId> Modified: trunk/scripts/src/main/java/org/dllearner/scripts/OWLAxiomPatternDetectionEvaluation.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/OWLAxiomPatternDetectionEvaluation.java 2013-05-03 08:49:17 UTC (rev 3940) +++ trunk/scripts/src/main/java/org/dllearner/scripts/OWLAxiomPatternDetectionEvaluation.java 2013-05-04 05:50:47 UTC (rev 3941) @@ -11,17 +11,34 @@ import java.sql.SQLException; import java.util.Arrays; import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Map.Entry; import java.util.prefs.Preferences; +import org.coode.owlapi.functionalparser.OWLFunctionalSyntaxOWLParser; import org.dllearner.algorithms.pattern.OWLAxiomPatternFinder; import org.dllearner.kb.repository.OntologyRepository; import org.dllearner.kb.repository.bioportal.BioPortalRepository; import org.dllearner.kb.repository.tones.TONESRepository; import org.ini4j.IniPreferences; import org.ini4j.InvalidFileFormatException; +import org.semanticweb.owlapi.apibinding.OWLManager; +import org.semanticweb.owlapi.io.OWLObjectRenderer; +import org.semanticweb.owlapi.io.OWLParserException; +import org.semanticweb.owlapi.io.StringDocumentSource; +import org.semanticweb.owlapi.io.ToStringRenderer; +import org.semanticweb.owlapi.model.OWLAxiom; +import org.semanticweb.owlapi.model.OWLOntology; +import org.semanticweb.owlapi.model.OWLOntologyCreationException; +import org.semanticweb.owlapi.model.UnloadableImportException; +import uk.ac.manchester.cs.owl.owlapi.mansyntaxrenderer.ManchesterOWLSyntaxOWLObjectRendererImpl; +import uk.ac.manchester.cs.owlapi.dlsyntax.DLSyntaxObjectRenderer; + public class OWLAxiomPatternDetectionEvaluation { + private OWLObjectRenderer axiomRenderer = new ManchesterOWLSyntaxOWLObjectRendererImpl(); private Connection conn; public OWLAxiomPatternDetectionEvaluation() { @@ -59,6 +76,9 @@ //create statistics for the repositories makeRepositoryStatistics(repositories); + + //get top n TBox, RBox and ABox patterns + makePatternStatistics(repositories); } private void analyze(Collection<OntologyRepository> repositories){ @@ -69,6 +89,35 @@ } } + private void makePatternStatistics(Collection<OntologyRepository> repositories){ + int n = 10; + String latex = ""; + Map<OWLAxiom, Integer> topNTBoxAxiomPatterns = getTopNTBoxAxiomPatterns(n); + latex += asLatex("Total TBox", topNTBoxAxiomPatterns) + "\n\n"; + Map<OWLAxiom, Integer> topNRBoxAxiomPatterns = getTopNRBoxAxiomPatterns(n); + latex += asLatex("Total RBox", topNRBoxAxiomPatterns) + "\n\n"; + Map<OWLAxiom, Integer> topNABoxAxiomPatterns = getTopNABoxAxiomPatterns(n); + latex += asLatex("Total ABox", topNABoxAxiomPatterns) + "\n\n"; + + //get top n TBox, RBox and ABox patterns by repository + + Map<OntologyRepository, Map<OWLAxiom, Integer>> topNTBoxAxiomPatternsByRepository = getTopNTBoxAxiomPatterns(repositories, n); + Map<OntologyRepository, Map<OWLAxiom, Integer>> topNRBoxAxiomPatternsByRepository = getTopNRBoxAxiomPatterns(repositories, n); + Map<OntologyRepository, Map<OWLAxiom, Integer>> topNABoxAxiomPatternsByRepository = getTopNABoxAxiomPatterns(repositories, n); + for (OntologyRepository repository : repositories) { + latex += asLatex(repository.getName() + " TBox", topNTBoxAxiomPatternsByRepository.get(repository)) + "\n\n"; + latex += asLatex(repository.getName() + " RBox", topNRBoxAxiomPatternsByRepository.get(repository)) + "\n\n"; + latex += asLatex(repository.getName() + " ABox", topNABoxAxiomPatternsByRepository.get(repository)) + "\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"; @@ -147,7 +196,7 @@ ps.setString(1, repository.getName()); minNumberOfAboxAxioms = count(ps); //get max number of abox axioms - ps = conn.prepareStatement("SELECT MAX(tbox_axioms) FROM Ontology WHERE repository=? AND iri NOT LIKE 'ERROR%'"); + ps = conn.prepareStatement("SELECT MAX(abox_axioms) FROM Ontology WHERE repository=? AND iri NOT LIKE 'ERROR%'"); ps.setString(1, repository.getName()); maxNumberOfAboxAxioms = count(ps); //get avg number of abox axioms @@ -186,6 +235,193 @@ } } + private String asLatex(String title, Map<OWLAxiom, Integer> topN){ + String latexTable = "\\begin{table}\n"; + latexTable += "\\begin{tabular}{lr}\n"; + latexTable += "\\toprule\n"; + latexTable += "Pattern & Frequency\\\\\\midrule\n"; + + for (Entry<OWLAxiom, Integer> entry : topN.entrySet()) { + OWLAxiom axiom = entry.getKey(); + Integer frequency = entry.getValue(); + + latexTable += axiomRenderer.render(axiom) + " & " + frequency + "\\\\\n"; + + } + latexTable += "\\bottomrule\\end{tabular}\n"; + latexTable += "\\caption{" + title + "}\n"; + latexTable += "\\end{table}\n"; + return latexTable; + } + + private Map<OWLAxiom, Integer> getTopNTBoxAxiomPatterns(int n){ + Map<OWLAxiom, Integer> topN = new LinkedHashMap<OWLAxiom, Integer>(); + PreparedStatement ps; + ResultSet rs; + try { + ps = conn.prepareStatement("SELECT pattern,SUM(occurrences) 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, "TBox"); + ps.setInt(2, n); + rs = ps.executeQuery(); + while(rs.next()){ + topN.put(asOWLAxiom(rs.getString(1)), rs.getInt(2)); + } + } catch(SQLException e){ + e.printStackTrace(); + } + return topN; + } + + private Map<OntologyRepository, Map<OWLAxiom, Integer>> getTopNTBoxAxiomPatterns(Collection<OntologyRepository> repositories, int n){ + Map<OntologyRepository, Map<OWLAxiom, Integer>> topNByRepository = new LinkedHashMap<OntologyRepository, Map<OWLAxiom,Integer>>(); + PreparedStatement ps; + ResultSet rs; + //for each repository + for (OntologyRepository repository : repositories) { + Map<OWLAxiom, Integer> topN = new LinkedHashMap<OWLAxiom, Integer>(); + try { + //get number of ontologies + ps = conn.prepareStatement("SELECT pattern,SUM(occurrences) FROM " + + "Ontology_Pattern OP, Pattern P, Ontology O WHERE " + + "(P.id=OP.pattern_id AND O.id=OP.ontology_id AND O.repository=? AND P.axiom_type=?) " + + "GROUP BY P.id ORDER BY SUM(`OP`.`occurrences`) DESC LIMIT ?"); + ps.setString(1, repository.getName()); + ps.setString(2, "TBox"); + ps.setInt(3, n); + rs = ps.executeQuery(); + while(rs.next()){ + topN.put(asOWLAxiom(rs.getString(1)), rs.getInt(2)); + } + } catch(SQLException e){ + e.printStackTrace(); + } + topNByRepository.put(repository, topN); + } + return topNByRepository; + } + + private Map<OWLAxiom, Integer> getTopNRBoxAxiomPatterns(int n){ + Map<OWLAxiom, Integer> topN = new LinkedHashMap<OWLAxiom, Integer>(); + PreparedStatement ps; + ResultSet rs; + try { + ps = conn.prepareStatement("SELECT pattern,SUM(occurrences) 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, "RBox"); + ps.setInt(2, n); + rs = ps.executeQuery(); + while(rs.next()){ + topN.put(asOWLAxiom(rs.getString(1)), rs.getInt(2)); + } + } catch(SQLException e){ + e.printStackTrace(); + } + return topN; + } + + private Map<OntologyRepository, Map<OWLAxiom, Integer>> getTopNRBoxAxiomPatterns(Collection<OntologyRepository> repositories, int n){ + Map<OntologyRepository, Map<OWLAxiom, Integer>> topNByRepository = new LinkedHashMap<OntologyRepository, Map<OWLAxiom,Integer>>(); + PreparedStatement ps; + ResultSet rs; + //for each repository + for (OntologyRepository repository : repositories) { + Map<OWLAxiom, Integer> topN = new LinkedHashMap<OWLAxiom, Integer>(); + try { + //get number of ontologies + ps = conn.prepareStatement("SELECT pattern,SUM(occurrences) FROM " + + "Ontology_Pattern OP, Pattern P, Ontology O WHERE " + + "(P.id=OP.pattern_id AND O.id=OP.ontology_id AND O.repository=? AND P.axiom_type=?) " + + "GROUP BY P.id ORDER BY SUM(`OP`.`occurrences`) DESC LIMIT ?"); + ps.setString(1, repository.getName()); + ps.setString(2, "RBox"); + ps.setInt(3, n); + rs = ps.executeQuery(); + while(rs.next()){ + topN.put(asOWLAxiom(rs.getString(1)), rs.getInt(2)); + } + } catch(SQLException e){ + e.printStackTrace(); + } + topNByRepository.put(repository, topN); + } + return topNByRepository; + } + + private Map<OWLAxiom, Integer> getTopNABoxAxiomPatterns(int n){ + Map<OWLAxiom, Integer> topN = new LinkedHashMap<OWLAxiom, Integer>(); + PreparedStatement ps; + ResultSet rs; + try { + ps = conn.prepareStatement("SELECT pattern,SUM(occurrences) 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, "ABox"); + ps.setInt(2, n); + rs = ps.executeQuery(); + while(rs.next()){ + topN.put(asOWLAxiom(rs.getString(1)), rs.getInt(2)); + } + } catch(SQLException e){ + e.printStackTrace(); + } + return topN; + } + + private Map<OntologyRepository, Map<OWLAxiom, Integer>> getTopNABoxAxiomPatterns(Collection<OntologyRepository> repositories, int n){ + Map<OntologyRepository, Map<OWLAxiom, Integer>> topNByRepository = new LinkedHashMap<OntologyRepository, Map<OWLAxiom,Integer>>(); + PreparedStatement ps; + ResultSet rs; + //for each repository + for (OntologyRepository repository : repositories) { + Map<OWLAxiom, Integer> topN = new LinkedHashMap<OWLAxiom, Integer>(); + try { + //get number of ontologies + ps = conn.prepareStatement("SELECT pattern,SUM(occurrences) FROM " + + "Ontology_Pattern OP, Pattern P, Ontology O WHERE " + + "(P.id=OP.pattern_id AND O.id=OP.ontology_id AND O.repository=? AND P.axiom_type=?) " + + "GROUP BY P.id ORDER BY SUM(`OP`.`occurrences`) DESC LIMIT ?"); + ps.setString(1, repository.getName()); + ps.setString(2, "ABox"); + ps.setInt(3, n); + rs = ps.executeQuery(); + while(rs.next()){ + topN.put(asOWLAxiom(rs.getString(1)), rs.getInt(2)); + } + } catch(SQLException e){ + e.printStackTrace(); + } + topNByRepository.put(repository, topN); + } + return topNByRepository; + } + + private OWLAxiom asOWLAxiom(String functionalSyntaxAxiomString){ + try { + StringDocumentSource s = new StringDocumentSource("Ontology(<http://www.pattern.org>" + functionalSyntaxAxiomString + ")"); + OWLFunctionalSyntaxOWLParser p = new OWLFunctionalSyntaxOWLParser(); + OWLOntology newOntology = OWLManager.createOWLOntologyManager().createOntology(); + p.parse(s, newOntology); + if(!newOntology.getLogicalAxioms().isEmpty()){ + return newOntology.getLogicalAxioms().iterator().next(); + } + } catch (UnloadableImportException e) { + e.printStackTrace(); + } catch (OWLOntologyCreationException e) { + e.printStackTrace(); + } catch (OWLParserException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + private int count(PreparedStatement ps) throws SQLException{ ResultSet rs = ps.executeQuery(); rs.next(); @@ -193,6 +429,7 @@ } public static void main(String[] args) throws Exception { +// ToStringRenderer.getInstance().setRenderer(new DLSyntaxObjectRenderer()); new OWLAxiomPatternDetectionEvaluation().run(Arrays.asList( new TONESRepository(), new BioPortalRepository())); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |