You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(120) |
Sep
(36) |
Oct
(116) |
Nov
(17) |
Dec
(44) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(143) |
Feb
(192) |
Mar
(74) |
Apr
(84) |
May
(105) |
Jun
(64) |
Jul
(49) |
Aug
(120) |
Sep
(159) |
Oct
(156) |
Nov
(51) |
Dec
(28) |
2009 |
Jan
(17) |
Feb
(55) |
Mar
(33) |
Apr
(57) |
May
(54) |
Jun
(28) |
Jul
(6) |
Aug
(16) |
Sep
(38) |
Oct
(30) |
Nov
(26) |
Dec
(52) |
2010 |
Jan
(7) |
Feb
(91) |
Mar
(65) |
Apr
(2) |
May
(14) |
Jun
(25) |
Jul
(38) |
Aug
(48) |
Sep
(80) |
Oct
(70) |
Nov
(75) |
Dec
(77) |
2011 |
Jan
(68) |
Feb
(53) |
Mar
(51) |
Apr
(35) |
May
(65) |
Jun
(101) |
Jul
(29) |
Aug
(230) |
Sep
(95) |
Oct
(49) |
Nov
(110) |
Dec
(63) |
2012 |
Jan
(41) |
Feb
(42) |
Mar
(25) |
Apr
(46) |
May
(51) |
Jun
(44) |
Jul
(45) |
Aug
(29) |
Sep
(12) |
Oct
(9) |
Nov
(17) |
Dec
(2) |
2013 |
Jan
(12) |
Feb
(14) |
Mar
(7) |
Apr
(16) |
May
(54) |
Jun
(27) |
Jul
(11) |
Aug
(5) |
Sep
(85) |
Oct
(27) |
Nov
(37) |
Dec
(32) |
2014 |
Jan
(8) |
Feb
(29) |
Mar
(5) |
Apr
(3) |
May
(22) |
Jun
(3) |
Jul
(4) |
Aug
(3) |
Sep
|
Oct
|
Nov
|
Dec
|
From: <lor...@us...> - 2013-03-04 15:00:44
|
Revision: 3910 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3910&view=rev Author: lorenz_b Date: 2013-03-04 15:00:36 +0000 (Mon, 04 Mar 2013) Log Message: ----------- Changed OWL API version. Modified Paths: -------------- trunk/scripts/pom.xml Modified: trunk/scripts/pom.xml =================================================================== --- trunk/scripts/pom.xml 2013-03-04 10:48:54 UTC (rev 3909) +++ trunk/scripts/pom.xml 2013-03-04 15:00:36 UTC (rev 3910) @@ -116,7 +116,7 @@ <dependency> <groupId>net.sourceforge.owlapi</groupId> <artifactId>owlapi-distribution</artifactId> - <version>3.4.4-SNAPSHOT</version> +<!-- <version>3.4.4-SNAPSHOT</version> --> </dependency> <dependency> <groupId>net.sourceforge.owlapi</groupId> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-03-04 10:49:01
|
Revision: 3909 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3909&view=rev Author: lorenz_b Date: 2013-03-04 10:48:54 +0000 (Mon, 04 Mar 2013) Log Message: ----------- Updated SOLR lib. Modified Paths: -------------- trunk/components-ext/src/main/java/org/dllearner/common/index/SOLRIndex.java trunk/pom.xml Modified: trunk/components-ext/src/main/java/org/dllearner/common/index/SOLRIndex.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/common/index/SOLRIndex.java 2013-03-02 09:41:31 UTC (rev 3908) +++ trunk/components-ext/src/main/java/org/dllearner/common/index/SOLRIndex.java 2013-03-04 10:48:54 UTC (rev 3909) @@ -1,6 +1,5 @@ package org.dllearner.common.index; -import java.net.MalformedURLException; import java.util.ArrayList; import java.util.List; @@ -8,7 +7,7 @@ import org.apache.solr.client.solrj.SolrQuery.ORDER; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.BinaryRequestWriter; -import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer; +import org.apache.solr.client.solrj.impl.HttpSolrServer; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; @@ -16,7 +15,7 @@ public class SOLRIndex implements Index{ -private CommonsHttpSolrServer server; +private HttpSolrServer server; private static final int DEFAULT_LIMIT = 10; private static final int DEFAULT_OFFSET = 0; @@ -29,12 +28,8 @@ private boolean restrictiveSearch = true; public SOLRIndex(String solrServerURL){ - try { - server = new CommonsHttpSolrServer(solrServerURL); - server.setRequestWriter(new BinaryRequestWriter()); - } catch (MalformedURLException e) { - e.printStackTrace(); - } + server = new HttpSolrServer(solrServerURL); + server.setRequestWriter(new BinaryRequestWriter()); } public void setSearchFields(String primarySearchField, String secondarySearchField){ Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-03-02 09:41:31 UTC (rev 3908) +++ trunk/pom.xml 2013-03-04 10:48:54 UTC (rev 3909) @@ -20,6 +20,7 @@ <slf4j.version>1.6.4</slf4j.version> <log4j.version>1.2.16</log4j.version> + <solr.version>4.1.0</solr.version> </properties> <modules> @@ -164,7 +165,7 @@ <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-core</artifactId> - <version>3.5.0</version> + <version>${solr.version}</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dc...@us...> - 2013-03-02 09:41:38
|
Revision: 3908 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3908&view=rev Author: dcherix Date: 2013-03-02 09:41:31 +0000 (Sat, 02 Mar 2013) Log Message: ----------- Removed magic strings from scripts Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/DBpediaClassLearnerCELOE.java trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/NewSparqlCompDBpediaClassLearnerCELOE.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/DBpediaClassLearnerCELOE.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/DBpediaClassLearnerCELOE.java 2013-02-27 15:25:49 UTC (rev 3907) +++ trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/DBpediaClassLearnerCELOE.java 2013-03-02 09:41:31 UTC (rev 3908) @@ -453,4 +453,4 @@ } } -} +} \ No newline at end of file Modified: trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/NewSparqlCompDBpediaClassLearnerCELOE.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/NewSparqlCompDBpediaClassLearnerCELOE.java 2013-02-27 15:25:49 UTC (rev 3907) +++ trunk/scripts/src/main/java/org/dllearner/scripts/improveWikipedia/NewSparqlCompDBpediaClassLearnerCELOE.java 2013-03-02 09:41:31 UTC (rev 3908) @@ -433,4 +433,4 @@ return results; } -} +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-02-27 15:25:56
|
Revision: 3907 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3907&view=rev Author: lorenz_b Date: 2013-02-27 15:25:49 +0000 (Wed, 27 Feb 2013) Log Message: ----------- Small fix. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java 2013-02-27 13:48:57 UTC (rev 3906) +++ trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java 2013-02-27 15:25:49 UTC (rev 3907) @@ -19,18 +19,15 @@ import org.apache.log4j.Logger; import org.dllearner.algorithms.celoe.CELOE; -import org.dllearner.algorithms.qtl.QTL; import org.dllearner.core.AbstractLearningProblem; import org.dllearner.core.AbstractReasonerComponent; import org.dllearner.core.ComponentInitException; import org.dllearner.core.EvaluatedDescription; import org.dllearner.core.KnowledgeSource; -import org.dllearner.core.LearningProblemUnsupportedException; import org.dllearner.core.owl.Description; import org.dllearner.core.owl.Individual; import org.dllearner.core.owl.NamedClass; import org.dllearner.core.owl.ObjectProperty; -import org.dllearner.kb.LocalModelBasedSparqlEndpointKS; import org.dllearner.kb.OWLAPIOntology; import org.dllearner.kb.SparqlEndpointKS; import org.dllearner.kb.sparql.ConciseBoundedDescriptionGenerator; @@ -44,12 +41,10 @@ import org.dllearner.learningproblems.PosOnlyLP; import org.dllearner.reasoning.FastInstanceChecker; import org.dllearner.reasoning.SPARQLReasoner; -import org.dllearner.utilities.CrossValidation; import org.dllearner.utilities.LabelShortFormProvider; import org.dllearner.utilities.datastructures.Datastructures; import org.dllearner.utilities.datastructures.SetManipulation; import org.dllearner.utilities.datastructures.SortedSetTuple; -import org.dllearner.utilities.examples.AutomaticNegativeExampleFinderSPARQL2; import org.dllearner.utilities.owl.OWLAPIDescriptionConvertVisitor; import org.semanticweb.owlapi.apibinding.OWLManager; import org.semanticweb.owlapi.model.OWLOntology; @@ -320,7 +315,7 @@ logger.info("Done."); if(performCrossValidation){ - CrossValidation cv = new CrossValidation(la, lp, rc, 5, false); + org.dllearner.cli.CrossValidation cv = new org.dllearner.cli.CrossValidation(la, lp, rc, 5, false); } else { //apply the learning algorithm logger.info("Running learning algorithm..."); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-02-27 13:49:04
|
Revision: 3906 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3906&view=rev Author: lorenz_b Date: 2013-02-27 13:48:57 +0000 (Wed, 27 Feb 2013) Log Message: ----------- Added cross validation to matching tests. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/kb/sparql/SparqlEndpoint.java trunk/interfaces/src/main/java/org/dllearner/cli/CrossValidation.java trunk/scripts/pom.xml trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java trunk/scripts/src/test/java/org/dllearner/junit/OntologyMatchingTest.java Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/SparqlEndpoint.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/SparqlEndpoint.java 2013-02-25 12:24:29 UTC (rev 3905) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/SparqlEndpoint.java 2013-02-27 13:48:57 UTC (rev 3906) @@ -210,6 +210,18 @@ return new SparqlEndpoint(u, defaultGraphURIs, new LinkedList<String>()); } + public static SparqlEndpoint getEndpointLOD2Cloud() { + URL u = null; + try { + u = new URL("http://lod.openlinksw.com/sparql/"); + } catch (Exception e) { + e.printStackTrace(); + } + LinkedList<String> defaultGraphURIs=new LinkedList<String>(); +// defaultGraphURIs.add("http://dbpedia.org"); + return new SparqlEndpoint(u, defaultGraphURIs, new LinkedList<String>()); + } + public static SparqlEndpoint getEndpointLinkedGeoData() { URL u = null; try { Modified: trunk/interfaces/src/main/java/org/dllearner/cli/CrossValidation.java =================================================================== --- trunk/interfaces/src/main/java/org/dllearner/cli/CrossValidation.java 2013-02-25 12:24:29 UTC (rev 3905) +++ trunk/interfaces/src/main/java/org/dllearner/cli/CrossValidation.java 2013-02-27 13:48:57 UTC (rev 3906) @@ -27,7 +27,9 @@ import java.util.List; import java.util.Random; import java.util.Set; +import java.util.TreeSet; +import org.dllearner.core.AbstractLearningProblem; import org.dllearner.core.ComponentInitException; import org.dllearner.core.AbstractCELA; import org.dllearner.core.AbstractReasonerComponent; @@ -35,6 +37,7 @@ import org.dllearner.core.owl.Individual; import org.dllearner.learningproblems.Heuristics; import org.dllearner.learningproblems.PosNegLP; +import org.dllearner.learningproblems.PosOnlyLP; import org.dllearner.utilities.Helper; import org.dllearner.utilities.datastructures.Datastructures; import org.dllearner.utilities.statistics.Stat; @@ -70,7 +73,7 @@ } - public CrossValidation(AbstractCELA la, PosNegLP lp, AbstractReasonerComponent rs, int folds, boolean leaveOneOut) { + public CrossValidation(AbstractCELA la, AbstractLearningProblem lp, AbstractReasonerComponent rs, int folds, boolean leaveOneOut) { DecimalFormat df = new DecimalFormat(); @@ -81,11 +84,20 @@ List<Set<Individual>> testSetsNeg = new LinkedList<Set<Individual>>(); // get examples and shuffle them too - Set<Individual> posExamples = ((PosNegLP)lp).getPositiveExamples(); + Set<Individual> posExamples; + Set<Individual> negExamples; + if(lp instanceof PosNegLP){ + posExamples = ((PosNegLP)lp).getPositiveExamples(); + negExamples = ((PosNegLP)lp).getNegativeExamples(); + } else if(lp instanceof PosOnlyLP){ + posExamples = ((PosNegLP)lp).getPositiveExamples(); + negExamples = new HashSet<Individual>(); + } else { + throw new IllegalArgumentException("Only PosNeg and PosOnly learning problems are supported"); + } List<Individual> posExamplesList = new LinkedList<Individual>(posExamples); + List<Individual> negExamplesList = new LinkedList<Individual>(negExamples); Collections.shuffle(posExamplesList, new Random(1)); - Set<Individual> negExamples = ((PosNegLP)lp).getNegativeExamples(); - List<Individual> negExamplesList = new LinkedList<Individual>(negExamples); Collections.shuffle(negExamplesList, new Random(2)); // sanity check whether nr. of folds makes sense for this benchmark @@ -137,8 +149,13 @@ Set<String> pos = Datastructures.individualSetToStringSet(trainingSetsPos.get(currFold)); Set<String> neg = Datastructures.individualSetToStringSet(trainingSetsNeg.get(currFold)); - lp.setPositiveExamples(trainingSetsPos.get(currFold)); - lp.setNegativeExamples(trainingSetsNeg.get(currFold)); + if(lp instanceof PosNegLP){ + ((PosNegLP)lp).setPositiveExamples(trainingSetsPos.get(currFold)); + ((PosNegLP)lp).setNegativeExamples(trainingSetsNeg.get(currFold)); + } else if(lp instanceof PosOnlyLP){ + ((PosOnlyLP)lp).setPositiveExamples(new TreeSet<Individual>(trainingSetsPos.get(currFold))); + } + try { lp.init(); Modified: trunk/scripts/pom.xml =================================================================== --- trunk/scripts/pom.xml 2013-02-25 12:24:29 UTC (rev 3905) +++ trunk/scripts/pom.xml 2013-02-27 13:48:57 UTC (rev 3906) @@ -116,7 +116,7 @@ <dependency> <groupId>net.sourceforge.owlapi</groupId> <artifactId>owlapi-distribution</artifactId> - <version>3.4</version> + <version>3.4.4-SNAPSHOT</version> </dependency> <dependency> <groupId>net.sourceforge.owlapi</groupId> Modified: trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java 2013-02-25 12:24:29 UTC (rev 3905) +++ trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java 2013-02-27 13:48:57 UTC (rev 3906) @@ -44,6 +44,7 @@ import org.dllearner.learningproblems.PosOnlyLP; import org.dllearner.reasoning.FastInstanceChecker; import org.dllearner.reasoning.SPARQLReasoner; +import org.dllearner.utilities.CrossValidation; import org.dllearner.utilities.LabelShortFormProvider; import org.dllearner.utilities.datastructures.Datastructures; import org.dllearner.utilities.datastructures.SetManipulation; @@ -75,6 +76,8 @@ import com.hp.hpl.jena.rdf.model.Statement; import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; import com.hp.hpl.jena.vocabulary.OWL; +import com.hp.hpl.jena.vocabulary.RDF; +import com.hp.hpl.jena.vocabulary.RDFS; import com.jamonapi.Monitor; import com.jamonapi.MonitorFactory; @@ -95,6 +98,8 @@ private Map<Description, List<? extends EvaluatedDescription>> mappingKB2KB1; private boolean posNegLearning = true; + private final boolean performCrossValidation = true; + private int fragmentDepth = 2; /** * The maximum number of positive examples, used for the SPARQL extraction and learning algorithm @@ -118,6 +123,10 @@ this(new KnowledgeBase(endpoint1), new KnowledgeBase(endpoint2)); } + public void setFragmentDepth(int fragmentDepth) { + this.fragmentDepth = fragmentDepth; + } + public void start(){ mappingKB1KB2 = computeAlignment(kb1, kb2); printMappingPretty(mappingKB1KB2); @@ -283,14 +292,16 @@ fullFragment.add(positiveFragment); fullFragment.add(negativeFragment); - //here is the most difficult task, i.e. find a 'good' fragment of the KB on which we can learn KnowledgeSource ks = convert(fullFragment); //initialize the reasoner + logger.info("Initializing reasoner..."); AbstractReasonerComponent rc = new FastInstanceChecker(ks); rc.init(); + logger.info("Done."); //initialize the learning problem + logger.info("Initializing learning problem..."); AbstractLearningProblem lp; if(posNeg){ lp = new PosNegLPStandard(rc, positiveExamplesSample, negativeExamplesSample); @@ -298,26 +309,34 @@ lp = new PosOnlyLP(rc, positiveExamplesSample); } lp.init(); + logger.info("Done."); - //apply the learning algorithm - logger.info("Running learning algorithm..."); + //initialize the learning algorithm + logger.info("Initializing learning algorithm..."); CELOE la = new CELOE(lp, rc); la.setMaxExecutionTimeInSeconds(10); la.setNoisePercentage(25); la.init(); - la.start(); + logger.info("Done."); - try { - QTL qtl = new QTL(lp, new LocalModelBasedSparqlEndpointKS(fullFragment)); - qtl.init(); - qtl.start(); - System.out.println(qtl.getSPARQLQuery()); - } catch (LearningProblemUnsupportedException e) { - e.printStackTrace(); + if(performCrossValidation){ + CrossValidation cv = new CrossValidation(la, lp, rc, 5, false); + } else { + //apply the learning algorithm + logger.info("Running learning algorithm..."); + la.start(); + logger.info(la.getCurrentlyBestEvaluatedDescription()); } - - logger.info(la.getCurrentlyBestEvaluatedDescription()); +// try { +// QTL qtl = new QTL(lp, new LocalModelBasedSparqlEndpointKS(fullFragment)); +// qtl.init(); +// qtl.start(); +// System.out.println(qtl.getSPARQLQuery()); +// } catch (LearningProblemUnsupportedException e) { +// e.printStackTrace(); +// } + return la.getCurrentlyBestEvaluatedDescriptions(10); } catch (ComponentInitException e) { e.printStackTrace(); @@ -382,21 +401,32 @@ logger.info(i++ + "/" + size); fullFragment.add(getFragment(ind, kb)); } - //filter out triples with String literals, as there often occur are some syntax errors and they are not relevant for learning + filter(fullFragment); + return fullFragment; + } + + private void filter(Model model) { + // filter out triples with String literals, as there often occur are + // some syntax errors and they are not relevant for learning List<Statement> statementsToRemove = new ArrayList<Statement>(); - for(Iterator<Statement> iter = fullFragment.listStatements().toList().iterator(); iter.hasNext();){ + for (Iterator<Statement> iter = model.listStatements().toList().iterator(); iter.hasNext();) { Statement st = iter.next(); RDFNode object = st.getObject(); - if(object.isLiteral()){ -// statementsToRemove.add(st); + if (object.isLiteral()) { + // statementsToRemove.add(st); Literal lit = object.asLiteral(); - if(lit.getDatatype() == null || lit.getDatatype().equals(XSD.STRING)){ + if (lit.getDatatype() == null || lit.getDatatype().equals(XSD.STRING)) { st.changeObject("shortened", "en"); - } + } } + //remove statements like <x a owl:Class> + if(st.getPredicate().equals(RDF.type)){ + if(object.equals(RDFS.Class.asNode()) || object.equals(OWL.Class.asNode()) || object.equals(RDFS.Literal.asNode())){ + statementsToRemove.add(st); + } + } } - fullFragment.remove(statementsToRemove); - return fullFragment; + model.remove(statementsToRemove); } /** @@ -414,7 +444,7 @@ private Model getFragment(Individual ind, KnowledgeBase kb){ logger.debug("Loading fragment for " + ind.getName()); ConciseBoundedDescriptionGenerator cbdGen = new ConciseBoundedDescriptionGeneratorImpl(kb.getEndpoint(), kb.getCache()); - Model cbd = cbdGen.getConciseBoundedDescription(ind.getName(), 2); + Model cbd = cbdGen.getConciseBoundedDescription(ind.getName(), fragmentDepth); logger.debug("Got " + cbd.size() + " triples."); return cbd; } Modified: trunk/scripts/src/test/java/org/dllearner/junit/OntologyMatchingTest.java =================================================================== --- trunk/scripts/src/test/java/org/dllearner/junit/OntologyMatchingTest.java 2013-02-25 12:24:29 UTC (rev 3905) +++ trunk/scripts/src/test/java/org/dllearner/junit/OntologyMatchingTest.java 2013-02-27 13:48:57 UTC (rev 3906) @@ -33,6 +33,8 @@ private KnowledgeBase worldFactBook; private KnowledgeBase openCyc; private KnowledgeBase linkedGeoData; + + private final int fragmentDepth = 3; @Before public void setUp() throws Exception { @@ -112,6 +114,7 @@ @Test public void testSingleClassLinkedGeoDataToDBpedia() { OntologyMatching matcher = new OntologyMatching(linkedGeoData, dbpedia); + matcher.setFragmentDepth(fragmentDepth); NamedClass nc = new NamedClass("http://linkedgeodata.org/ontology/Aerodrome"); List<? extends EvaluatedDescription> mapping = matcher.computeMapping(nc, linkedGeoData, dbpedia); Map<Description, List<? extends EvaluatedDescription>> alignment = new HashMap<Description, List<? extends EvaluatedDescription>>(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-02-25 12:24:35
|
Revision: 3905 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3905&view=rev Author: lorenz_b Date: 2013-02-25 12:24:29 +0000 (Mon, 25 Feb 2013) Log Message: ----------- Changed OWL API version. Modified Paths: -------------- trunk/scripts/pom.xml Modified: trunk/scripts/pom.xml =================================================================== --- trunk/scripts/pom.xml 2013-02-25 11:56:42 UTC (rev 3904) +++ trunk/scripts/pom.xml 2013-02-25 12:24:29 UTC (rev 3905) @@ -116,7 +116,7 @@ <dependency> <groupId>net.sourceforge.owlapi</groupId> <artifactId>owlapi-distribution</artifactId> - <version>3.4.4-SNAPSHOT</version> + <version>3.4</version> </dependency> <dependency> <groupId>net.sourceforge.owlapi</groupId> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-02-25 11:56:48
|
Revision: 3904 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3904&view=rev Author: lorenz_b Date: 2013-02-25 11:56:42 +0000 (Mon, 25 Feb 2013) Log Message: ----------- Cleaned up POM. Modified Paths: -------------- trunk/components-ext/pom.xml Modified: trunk/components-ext/pom.xml =================================================================== --- trunk/components-ext/pom.xml 2013-02-25 11:55:05 UTC (rev 3903) +++ trunk/components-ext/pom.xml 2013-02-25 11:56:42 UTC (rev 3904) @@ -91,17 +91,6 @@ <!--END Logging Dependencies--> - <dependency> - <groupId>edu.stanford.nlp</groupId> - <artifactId>stanford-corenlp</artifactId> - <version>1.3.3</version> - </dependency> - <dependency> - <groupId>edu.stanford.nlp</groupId> - <artifactId>stanford-corenlp</artifactId> - <version>1.3.3</version> - <classifier>models</classifier> - </dependency> <dependency> <groupId>lbj</groupId> <artifactId>library</artifactId> @@ -123,11 +112,6 @@ <version>1.0</version> </dependency> <dependency> - <groupId>uk.ac.shef.wit</groupId> - <artifactId>simmetrics</artifactId> - <version>1.6.2</version> - </dependency> - <dependency> <groupId>stax</groupId> <artifactId>stax-api</artifactId> <version>1.0.1</version> @@ -138,42 +122,10 @@ <scope>test</scope> </dependency> <dependency> - <groupId>org.apache.opennlp</groupId> - <artifactId>opennlp-tools</artifactId> - <version>1.5.1-incubating</version> - </dependency> - <dependency> - <groupId>org.apache.opennlp</groupId> - <artifactId>opennlp-maxent</artifactId> - <version>3.0.1-incubating</version> - </dependency> - <dependency> - <groupId>com.aliasi</groupId> - <artifactId>lingpipe</artifactId> - <version>4.0.1</version> - </dependency> - <dependency> - <groupId>org.annolab.tt4j</groupId> - <artifactId>org.annolab.tt4j</artifactId> - <version>1.0.16</version> - </dependency> - <dependency> <groupId>org.ini4j</groupId> <artifactId>ini4j</artifactId> </dependency> <dependency> - <groupId>net.didion.jwnl</groupId> - <artifactId>jwnl</artifactId> - <version>1.4.1.RC2</version> - </dependency> - <!-- - <dependency> - <groupId>org.nlp2rdf</groupId> - <artifactId>nif</artifactId> - <version>1.1</version> - </dependency> - --> - <dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version>3.7.2</version> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-02-25 11:55:12
|
Revision: 3903 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3903&view=rev Author: lorenz_b Date: 2013-02-25 11:55:05 +0000 (Mon, 25 Feb 2013) Log Message: ----------- Removed TBSL algorithm. Removed Paths: ------------- trunk/components-ext/src/main/java/org/dllearner/algorithm/ trunk/components-ext/src/main/java/org/dllearner/common/index/IndexResultItemComparator.java trunk/components-ext/src/test/java/org/dllearner/algorithm/ Deleted: trunk/components-ext/src/main/java/org/dllearner/common/index/IndexResultItemComparator.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/common/index/IndexResultItemComparator.java 2013-02-25 11:47:56 UTC (rev 3902) +++ trunk/components-ext/src/main/java/org/dllearner/common/index/IndexResultItemComparator.java 2013-02-25 11:55:05 UTC (rev 3903) @@ -1,48 +0,0 @@ -package org.dllearner.common.index; - -import java.util.Comparator; -import java.util.HashMap; -import java.util.Map; - -import org.dllearner.algorithm.tbsl.util.Similarity; - -public class IndexResultItemComparator implements Comparator<IndexResultItem>{ - private String s; - private Map<String, Double> cache; - - public IndexResultItemComparator(String s) { - this.s = s; - cache = new HashMap<String, Double>(); - } - - @Override - public int compare(IndexResultItem item1, IndexResultItem item2) { - - double sim1 = 0; - if(cache.containsKey(item1.getLabel())){ - sim1 = cache.get(item1.getLabel()); - } else { - sim1 = Similarity.getSimilarity(s, item1.getLabel()); - cache.put(item1.getLabel(), sim1); - } - double sim2 = 0; - if(cache.containsKey(item2.getLabel())){ - sim2 = cache.get(item2.getLabel()); - } else { - sim2 = Similarity.getSimilarity(s, item2.getLabel()); - cache.put(item2.getLabel(), sim2); - } - - if(sim1 < sim2){ - return 1; - } else if(sim1 > sim2){ - return -1; - } else { - int val = item1.getLabel().compareTo(item2.getLabel()); - if(val == 0){ - return item1.getUri().compareTo(item2.getUri()); - } - return val; - } - } -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-02-25 11:48:03
|
Revision: 3902 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3902&view=rev Author: lorenz_b Date: 2013-02-25 11:47:56 +0000 (Mon, 25 Feb 2013) Log Message: ----------- Updated Staford model loading. Modified Paths: -------------- trunk/components-ext/pom.xml trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/StanfordLemmatizer.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/StanfordPartOfSpeechTagger.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/SPARQLEndpointMetrics.java trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TBSLTest.java Modified: trunk/components-ext/pom.xml =================================================================== --- trunk/components-ext/pom.xml 2013-02-18 14:16:54 UTC (rev 3901) +++ trunk/components-ext/pom.xml 2013-02-25 11:47:56 UTC (rev 3902) @@ -91,12 +91,18 @@ <!--END Logging Dependencies--> + <dependency> + <groupId>edu.stanford.nlp</groupId> + <artifactId>stanford-corenlp</artifactId> + <version>1.3.3</version> + </dependency> + <dependency> + <groupId>edu.stanford.nlp</groupId> + <artifactId>stanford-corenlp</artifactId> + <version>1.3.3</version> + <classifier>models</classifier> + </dependency> <dependency> - <groupId>edu.stanford</groupId> - <artifactId>postagger</artifactId> - <version>3.0.2</version> - </dependency> - <dependency> <groupId>lbj</groupId> <artifactId>library</artifactId> <version>1.0</version> Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/StanfordLemmatizer.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/StanfordLemmatizer.java 2013-02-18 14:16:54 UTC (rev 3901) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/StanfordLemmatizer.java 2013-02-25 11:47:56 UTC (rev 3902) @@ -26,7 +26,7 @@ @Override public String stem(String word, String tag) { - return stemmer.stem(word, tag).word(); + return stemmer.lemma(word, tag); } @Override Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/StanfordPartOfSpeechTagger.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/StanfordPartOfSpeechTagger.java 2013-02-18 14:16:54 UTC (rev 3901) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/StanfordPartOfSpeechTagger.java 2013-02-25 11:47:56 UTC (rev 3902) @@ -1,36 +1,29 @@ package org.dllearner.algorithm.tbsl.nlp; -import java.io.IOException; -import java.io.StringReader; -import java.net.URISyntaxException; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Properties; import com.aliasi.tag.Tagging; -import edu.stanford.nlp.ling.HasWord; -import edu.stanford.nlp.ling.TaggedWord; -import edu.stanford.nlp.tagger.maxent.MaxentTagger; +import edu.stanford.nlp.ling.CoreAnnotations.PartOfSpeechAnnotation; +import edu.stanford.nlp.ling.CoreAnnotations.SentencesAnnotation; +import edu.stanford.nlp.ling.CoreAnnotations.TextAnnotation; +import edu.stanford.nlp.ling.CoreAnnotations.TokensAnnotation; +import edu.stanford.nlp.ling.CoreLabel; +import edu.stanford.nlp.pipeline.Annotation; +import edu.stanford.nlp.pipeline.StanfordCoreNLP; +import edu.stanford.nlp.util.CoreMap; public class StanfordPartOfSpeechTagger implements PartOfSpeechTagger{ - private static final String MODEL = "tbsl/models/bidirectional-distsim-wsj-0-18.tagger"; + private StanfordCoreNLP pipeline; - private MaxentTagger tagger; - public StanfordPartOfSpeechTagger(){ - try { -// String modelPath = this.getClass().getClassLoader().getResource(MODEL).getPath(); - String modelPath = getClass().getResource("/tbsl/models/bidirectional-distsim-wsj-0-18.tagger").getPath(); -// String modelPath = Thread.currentThread().getContextClassLoader().getResource(MODEL).getFile(); - tagger = new MaxentTagger(modelPath); - } catch (IOException e) { - e.printStackTrace(); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } + Properties props = new Properties(); + props.put("annotators", "tokenize, ssplit, pos"); + pipeline = new StanfordCoreNLP(props); } @Override @@ -39,68 +32,94 @@ } @Override - public String tag(String sentence) { + public String tag(String text) { String out = ""; - ArrayList<TaggedWord> tagged = new ArrayList<TaggedWord>(); + // create an empty Annotation just with the given text + Annotation document = new Annotation(text); + + // run all Annotators on this text + pipeline.annotate(document); + + // these are all the sentences in this document + // a CoreMap is essentially a Map that uses class objects as keys and has values with custom types + List<CoreMap> sentences = document.get(SentencesAnnotation.class); + + for(CoreMap sentence: sentences) { + for (CoreLabel token: sentence.get(TokensAnnotation.class)) { + // this is the text of the token + String word = token.get(TextAnnotation.class); + // this is the POS tag of the token + String pos = token.get(PartOfSpeechAnnotation.class); + + out += " " + word + "/" + pos; + } + } - StringReader reader = new StringReader(sentence); - List<List<HasWord>> text = MaxentTagger.tokenizeText(reader); - - if (text.size() == 1) { - tagged = tagger.tagSentence(text.get(0)); - } - - for (TaggedWord t : tagged) { - out += " " + t.toString(); - } return out.trim(); } + + @Override public List<String> tagTopK(String sentence) { return Collections.singletonList(tag(sentence)); } - public List<String> getTags(String sentence){ + public List<String> getTags(String text){ List<String> tags = new ArrayList<String>(); - ArrayList<TaggedWord> tagged = new ArrayList<TaggedWord>(); + // create an empty Annotation just with the given text + Annotation document = new Annotation(text); + + // run all Annotators on this text + pipeline.annotate(document); + + // these are all the sentences in this document + // a CoreMap is essentially a Map that uses class objects as keys and has values with custom types + List<CoreMap> sentences = document.get(SentencesAnnotation.class); + + for(CoreMap sentence: sentences) { + for (CoreLabel token: sentence.get(TokensAnnotation.class)) { + // this is the text of the token + String word = token.get(TextAnnotation.class); + // this is the POS tag of the token + String pos = token.get(PartOfSpeechAnnotation.class); + + tags.add(pos); + } + } - StringReader reader = new StringReader(sentence); - List<List<HasWord>> text = MaxentTagger.tokenizeText(reader); - - if (text.size() == 1) { - tagged = tagger.tagSentence(text.get(0)); - } - - for(TaggedWord tW : tagged){ - tags.add(tW.tag()); - } - return tags; } @Override - public Tagging<String> getTagging(String sentence){ - ArrayList<TaggedWord> tagged = new ArrayList<TaggedWord>(); - - StringReader reader = new StringReader(sentence); - List<List<HasWord>> text = MaxentTagger.tokenizeText(reader); - - if (text.size() == 1) { - tagged = tagger.tagSentence(text.get(0)); - } - + public Tagging<String> getTagging(String text){ List<String> tokenList = new ArrayList<String>(); List<String> tagList = new ArrayList<String>(); - for(TaggedWord tW : tagged){ - tokenList.add(tW.word()); - tagList.add(tW.tag()); - } + // create an empty Annotation just with the given text + Annotation document = new Annotation(text); + + // run all Annotators on this text + pipeline.annotate(document); + + // these are all the sentences in this document + // a CoreMap is essentially a Map that uses class objects as keys and has values with custom types + List<CoreMap> sentences = document.get(SentencesAnnotation.class); + + for(CoreMap sentence: sentences) { + for (CoreLabel token: sentence.get(TokensAnnotation.class)) { + // this is the text of the token + String word = token.get(TextAnnotation.class); + // this is the POS tag of the token + String pos = token.get(PartOfSpeechAnnotation.class); + + tokenList.add(word); + tagList.add(pos); + } + } return new Tagging<String>(tokenList, tagList); } - } Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/SPARQLEndpointMetrics.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/SPARQLEndpointMetrics.java 2013-02-18 14:16:54 UTC (rev 3901) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/SPARQLEndpointMetrics.java 2013-02-25 11:47:56 UTC (rev 3902) @@ -9,6 +9,7 @@ import java.util.SortedSet; import java.util.TreeSet; +import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.dllearner.core.owl.Individual; import org.dllearner.core.owl.NamedClass; @@ -34,8 +35,8 @@ public SPARQLEndpointMetrics(SparqlEndpoint endpoint, ExtractionDBCache cache) { this.endpoint = endpoint; this.cache = cache; - cache.setFreshnessInMilliseconds(31536000000l); - cache.setMaxExecutionTimeInSeconds(30); + cache.setFreshnessInMilliseconds(Long.MAX_VALUE);//31536000000l); + cache.setMaxExecutionTimeInSeconds(300); this.reasoner = new SPARQLReasoner(new SparqlEndpointKS(endpoint), cache); } @@ -214,6 +215,32 @@ } /** + * Returns the number of triples where the given individual is in subject position(out-going links). + * @param cls + * @return + */ + public int getOccurencesInSubjectPosition(Individual ind){ + log.trace(String.format("Computing number of occurences in subject position for %s", ind.getName())); + String query = String.format("SELECT (COUNT(*) AS ?cnt) WHERE {<%s> ?p ?o.}", ind.getName()); + ResultSet rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query)); + int classOccurenceCnt = rs.next().getLiteral("cnt").getInt(); + return classOccurenceCnt; + } + + /** + * Returns the number of triples where the given individual is in object position(in-going links). + * @param cls + * @return + */ + public int getOccurencesInObjectPosition(Individual ind){ + log.trace(String.format("Computing number of occurences in object position for %s", ind.getName())); + String query = String.format("SELECT (COUNT(*) AS ?cnt) WHERE {?s ?p <%s>.}", ind.getName()); + ResultSet rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query)); + int classOccurenceCnt = rs.next().getLiteral("cnt").getInt(); + return classOccurenceCnt; + } + + /** * Returns the number triples with the given property as predicate. * @param prop * @return @@ -394,8 +421,9 @@ } public static void main(String[] args) { - SparqlEndpoint endpoint = SparqlEndpoint.getEndpointDBpedia(); - ExtractionDBCache cache = new ExtractionDBCache("/opt/tbsl/dbpedia_pmi_cache"); + Logger.getLogger(SPARQLEndpointMetrics.class).setLevel(Level.DEBUG); + SparqlEndpoint endpoint = SparqlEndpoint.getEndpointDBpediaLiveOpenLink(); + ExtractionDBCache cache = new ExtractionDBCache("/opt/tbsl/dbpedia_pmi_cache_v2"); String NS = "http://dbpedia.org/ontology/"; String NS_Res = "http://dbpedia.org/resource/"; Modified: trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TBSLTest.java =================================================================== --- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TBSLTest.java 2013-02-18 14:16:54 UTC (rev 3901) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TBSLTest.java 2013-02-25 11:47:56 UTC (rev 3902) @@ -3,6 +3,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.net.URL; import java.util.Collections; @@ -38,9 +39,9 @@ @Override protected void setUp() throws Exception { super.setUp(); - endpoint = new SparqlEndpoint(new URL("http://lgd.aksw.org:8900/sparql"), Collections.singletonList("http://diadem.cs.ox.ac.uk"), Collections.<String>emptyList()); -// model = ModelFactory.createOntologyModel(); -// File dir = new File("/home/lorenz/arbeit/papers/question-answering-iswc-2012/examples/data"); + endpoint = new SparqlEndpoint(new URL("http://[2001:638:902:2010:0:168:35:138]/sparql"), Collections.singletonList("http://diadem.cs.ox.ac.uk"), Collections.<String>emptyList()); + model = ModelFactory.createOntologyModel(); +// File dir = new File("/home/me/work/papers/question-answering-iswc-2012/data_v2"); // try { // for(File f : dir.listFiles()){ // if(f.isFile()){ @@ -53,6 +54,7 @@ // } // } // } +// model.write(new FileOutputStream(dir.getAbsolutePath() + "/oxford-data.ttl"), "TURTLE", null); // model.read(new FileInputStream(new File("/home/lorenz/arbeit/papers/question-answering-iswc-2012/examples/ontology.ttl")), null, "TURTLE"); // } catch (FileNotFoundException e) { // e.printStackTrace(); @@ -88,6 +90,7 @@ SPARQLTemplateBasedLearner2 learner = new SPARQLTemplateBasedLearner2(model, resourcesIndex, classesIndex, propertiesIndex); learner.init(); + learner.setGrammarFiles(new String[]{"tbsl/lexicon/english.lex","tbsl/lexicon/english_oxford.lex"}); String question = "Give me all houses with more than 3 bathrooms and more than 2 bedrooms."; @@ -117,9 +120,10 @@ learner.setGrammarFiles(new String[]{"tbsl/lexicon/english.lex","tbsl/lexicon/english_oxford.lex"}); String question = "Give me all houses near a school."; - question = "Give me all houses with more than 3 bathrooms and more than 2 bedrooms."; - question = "Give me all Victorian houses in Oxfordshire"; - question = "Edwardian houses close to supermarket for less than 1,000,000 in Oxfordshire"; + question = "Give me all houses with more than 3 bathrooms."; + question = "houses at walking distance from a pharmacy"; +// question = "Give me all Victorian houses in Oxfordshire"; +// question = "Edwardian houses close to supermarket for less than 1,000,000 in Oxfordshire"; // question = "Give me all family houses with more than 2 bathrooms and more than 4 bedrooms"; learner.setQuestion(question); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-02-18 14:17:03
|
Revision: 3901 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3901&view=rev Author: lorenz_b Date: 2013-02-18 14:16:54 +0000 (Mon, 18 Feb 2013) Log Message: ----------- Removed Stanford models because they can be loaded via Maven now. Removed Paths: ------------- trunk/components-ext/src/main/resources/tbsl/models/README-Models.txt trunk/components-ext/src/main/resources/tbsl/models/bidirectional-distsim-wsj-0-18.tagger trunk/components-ext/src/main/resources/tbsl/models/bidirectional-distsim-wsj-0-18.tagger.props trunk/components-ext/src/main/resources/tbsl/models/left3words-wsj-0-18.tagger trunk/components-ext/src/main/resources/tbsl/models/left3words-wsj-0-18.tagger.props Deleted: trunk/components-ext/src/main/resources/tbsl/models/README-Models.txt =================================================================== --- trunk/components-ext/src/main/resources/tbsl/models/README-Models.txt 2013-02-18 14:14:10 UTC (rev 3900) +++ trunk/components-ext/src/main/resources/tbsl/models/README-Models.txt 2013-02-18 14:16:54 UTC (rev 3901) @@ -1,90 +0,0 @@ -Stanford POS Tagger, v. 3.0.2 - 2011-05-15. -Copyright (c) 2002-2011 The Board of Trustees of -The Leland Stanford Junior University. All Rights Reserved. - -This document contains (some) information about the models included in -this release and that may be downloaded for the POS tagger website at -http://nlp.stanford.edu/software/tagger.shtml . If you have downloaded -the full tagger, all of the models mentioned in this document are in the -downloaded package in the same directory as this readme. Otherwise, -included in the download are two -English taggers, and the other taggers may be downloaded from the -website. All taggers are accompanied by the props files used to create -them; please examine these files for more detailed information about the -creation of the taggers. - -For English, the bidirectional taggers are slightly more accurate, but -tag much more slowly; choose the appropriate tagger based on your -speed/performance needs. - -English taggers ---------------------------- -bidirectional-distsim-wsj-0-18.tagger -Trained on WSJ sections 0-18 using a bidirectional architecture and -including word shape and distributional similarity features. -Penn Treebank tagset. -Performance: -97.28% correct on WSJ 19-21 -(90.46% correct on unknown words) - -left3words-wsj-0-18.tagger -Trained on WSJ sections 0-18 using the left3words architecture and -includes word shape features. Penn tagset. -Performance: -96.97% correct on WSJ 19-21 -(88.85% correct on unknown words) - -left3words-distsim-wsj-0-18.tagger -Trained on WSJ sections 0-18 using the left3words architecture and -includes word shape and distributional similarity features. Penn tagset. -Performance: -97.01% correct on WSJ 19-21 -(89.81% correct on unknown words) - - -Chinese tagger ---------------------------- -chinese.tagger -Trained on a combination of Chinese Treebank texts from Chinese and Hong -Kong sources. -LDC Chinese Treebank POS tag set. -Performance: -94.13% on a combination of Chinese and Hong Kong texts -(78.92% on unknown words) - -Arabic tagger ---------------------------- -arabic-accurate.tagger -Trained on the *entire* ATB p1-3. -When trained on the train part of the ATB p1-3 split done for the 2005 -JHU Summer Workshop (Diab split), using (augmented) Bies tags, it gets -the following performance: -Performance: -96.50% on dev portion according to Diab split -(80.59% on unknown words) - -arabic-fast.tagger -4x speed improvement over "accurate". -Performance: -96.34% on dev portion according to Diab split -(80.28% on unknown words) - - -German tagger ---------------------------- -german-accurate.tagger -Trained on the first 80% of the Negra corpus, which uses the STTS tagset. -The Stuttgart-Tübingen Tagset (STTS) is a set of 54 tags for annotating -German text corpora with part-of-speech labels, which was jointly -developed by the Institut für maschinelle Sprachverarbeitung of the -University of Stuttgart and the Seminar für Sprachwissenschaft of the -University of Tübingen. See: -http://www.ims.uni-stuttgart.de/projekte/CQPDemos/Bundestag/help-tagset.html -Performance: -96.90% on the first half of the remaining 20% of the Negra corpus (dev set) -(90.33% on unknown words) - -german-fast.tagger -8x speed improvement over "accurate". -Performance: -96.61% overall / 86.72% unknown. Deleted: trunk/components-ext/src/main/resources/tbsl/models/bidirectional-distsim-wsj-0-18.tagger =================================================================== (Binary files differ) Deleted: trunk/components-ext/src/main/resources/tbsl/models/bidirectional-distsim-wsj-0-18.tagger.props =================================================================== --- trunk/components-ext/src/main/resources/tbsl/models/bidirectional-distsim-wsj-0-18.tagger.props 2013-02-18 14:14:10 UTC (rev 3900) +++ trunk/components-ext/src/main/resources/tbsl/models/bidirectional-distsim-wsj-0-18.tagger.props 2013-02-18 14:16:54 UTC (rev 3901) @@ -1,33 +0,0 @@ -## tagger training invoked at Fri Apr 15 01:00:51 PDT 2011 with arguments: - model = bidirectional-distsim-wsj-0-18.tagger - arch = bidirectional5words,naacl2003unknowns,wordshapes(-1,1),distsim(../data/pos-tagger/training/english/egw.bnc.200.pruned,-1,1),distsimconjunction(../data/pos-tagger/training/english/egw.bnc.200.pruned,-1,1) - trainFile = ../data/pos-tagger/training/english/train-wsj-0-18 - closedClassTags = - closedClassTagThreshold = 40 - curWordMinFeatureThresh = 2 - debug = false - debugPrefix = - tagSeparator = _ - encoding = UTF-8 - iterations = 100 - lang = english - learnClosedClassTags = false - minFeatureThresh = 2 - openClassTags = -rareWordMinFeatureThresh = 5 - rareWordThresh = 5 - search = owlqn - sgml = false - sigmaSquared = 0.5 - regL1 = 0.75 - tagInside = - tokenize = true - tokenizerFactory = - tokenizerOptions = - verbose = false - verboseResults = true - veryCommonWordThresh = 250 - xmlInput = - outputFile = - outputFormat = slashTags - outputFormatOptions = Deleted: trunk/components-ext/src/main/resources/tbsl/models/left3words-wsj-0-18.tagger =================================================================== (Binary files differ) Deleted: trunk/components-ext/src/main/resources/tbsl/models/left3words-wsj-0-18.tagger.props =================================================================== --- trunk/components-ext/src/main/resources/tbsl/models/left3words-wsj-0-18.tagger.props 2013-02-18 14:14:10 UTC (rev 3900) +++ trunk/components-ext/src/main/resources/tbsl/models/left3words-wsj-0-18.tagger.props 2013-02-18 14:16:54 UTC (rev 3901) @@ -1,33 +0,0 @@ -## tagger training invoked at Fri Apr 15 07:35:09 PDT 2011 with arguments: - model = left3words-wsj-0-18.tagger - arch = left3words,naacl2003unknowns,wordshapes(-1,1) - trainFile = ../data/pos-tagger/training/english/train-wsj-0-18 - closedClassTags = - closedClassTagThreshold = 40 - curWordMinFeatureThresh = 2 - debug = false - debugPrefix = - tagSeparator = _ - encoding = UTF-8 - iterations = 100 - lang = english - learnClosedClassTags = false - minFeatureThresh = 2 - openClassTags = -rareWordMinFeatureThresh = 10 - rareWordThresh = 5 - search = owlqn - sgml = false - sigmaSquared = 0.0 - regL1 = 0.75 - tagInside = - tokenize = true - tokenizerFactory = - tokenizerOptions = - verbose = false - verboseResults = true - veryCommonWordThresh = 250 - xmlInput = - outputFile = - outputFormat = slashTags - outputFormatOptions = This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-02-18 14:14:18
|
Revision: 3900 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3900&view=rev Author: lorenz_b Date: 2013-02-18 14:14:10 +0000 (Mon, 18 Feb 2013) Log Message: ----------- Updated index queries. Modified Paths: -------------- trunk/components-ext/src/main/java/org/dllearner/common/index/SPARQLClassesIndex.java trunk/components-ext/src/main/java/org/dllearner/common/index/SPARQLDatatypePropertiesIndex.java trunk/components-ext/src/main/java/org/dllearner/common/index/SPARQLIndex.java trunk/components-ext/src/main/java/org/dllearner/common/index/SPARQLObjectPropertiesIndex.java trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoClassesIndex.java trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoDatatypePropertiesIndex.java trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoObjectPropertiesIndex.java trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoPropertiesIndex.java trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoResourcesIndex.java Modified: trunk/components-ext/src/main/java/org/dllearner/common/index/SPARQLClassesIndex.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/common/index/SPARQLClassesIndex.java 2013-02-16 13:03:00 UTC (rev 3899) +++ trunk/components-ext/src/main/java/org/dllearner/common/index/SPARQLClassesIndex.java 2013-02-18 14:14:10 UTC (rev 3900) @@ -29,7 +29,7 @@ "FILTER(REGEX(STR(?label), '%s'))}\n" + "LIMIT %d OFFSET %d"; - super.queryWithLabelTemplate = "SELECT DISTINCT * WHERE {\n" + + super.queryWithLabelTemplate = "SELECT DISTINCT ?uri ?label WHERE {\n" + "?s a ?uri.\n" + "?uri <http://www.w3.org/2000/01/rdf-schema#label> ?label\n" + "FILTER(REGEX(STR(?label), '%s'))}\n" + Modified: trunk/components-ext/src/main/java/org/dllearner/common/index/SPARQLDatatypePropertiesIndex.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/common/index/SPARQLDatatypePropertiesIndex.java 2013-02-16 13:03:00 UTC (rev 3899) +++ trunk/components-ext/src/main/java/org/dllearner/common/index/SPARQLDatatypePropertiesIndex.java 2013-02-18 14:14:10 UTC (rev 3900) @@ -23,14 +23,14 @@ private void init(){ super.queryTemplate = "SELECT ?uri WHERE {\n" + - "?s ?uri ?o.\n" + +// "?s ?uri ?o.\n" + "?uri a owl:DatatypeProperty." + "?uri <http://www.w3.org/2000/01/rdf-schema#label> ?label\n" + "FILTER(REGEX(STR(?label), '%s', 'i'))}\n" + "LIMIT %d OFFSET %d"; - super.queryWithLabelTemplate = "PREFIX owl:<http://www.w3.org/2002/07/owl#> SELECT DISTINCT * WHERE {\n" + - "?s ?uri ?o.\n" + + super.queryWithLabelTemplate = "PREFIX owl:<http://www.w3.org/2002/07/owl#> SELECT DISTINCT ?uri ?label WHERE {\n" + +// "?s ?uri ?o.\n" + "?uri a owl:DatatypeProperty." + "?uri <http://www.w3.org/2000/01/rdf-schema#label> ?label\n" + "FILTER(REGEX(STR(?label), '%s', 'i'))}\n" + Modified: trunk/components-ext/src/main/java/org/dllearner/common/index/SPARQLIndex.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/common/index/SPARQLIndex.java 2013-02-16 13:03:00 UTC (rev 3899) +++ trunk/components-ext/src/main/java/org/dllearner/common/index/SPARQLIndex.java 2013-02-18 14:14:10 UTC (rev 3900) @@ -32,7 +32,7 @@ "FILTER(REGEX(STR(?label), '%s'))}\n" + "LIMIT %d OFFSET %d"; - protected String queryWithLabelTemplate = "SELECT DISTINCT * WHERE {\n" + + protected String queryWithLabelTemplate = "SELECT DISTINCT ?uri ?label WHERE {\n" + "?uri a ?type.\n" + "?uri <http://www.w3.org/2000/01/rdf-schema#label> ?label\n" + "FILTER(REGEX(STR(?label), '%s'))}\n" + @@ -139,7 +139,7 @@ } } else { rs = QueryExecutionFactory.create(QueryFactory.create(query, Syntax.syntaxARQ), model).execSelect(); - } + }System.out.println("Done"); return rs; } Modified: trunk/components-ext/src/main/java/org/dllearner/common/index/SPARQLObjectPropertiesIndex.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/common/index/SPARQLObjectPropertiesIndex.java 2013-02-16 13:03:00 UTC (rev 3899) +++ trunk/components-ext/src/main/java/org/dllearner/common/index/SPARQLObjectPropertiesIndex.java 2013-02-18 14:14:10 UTC (rev 3900) @@ -23,14 +23,14 @@ private void init(){ super.queryTemplate = "SELECT ?uri WHERE {\n" + - "?s ?uri ?o.\n" + +// "?s ?uri ?o.\n" + "?uri a owl:ObjectProperty." + "?uri <http://www.w3.org/2000/01/rdf-schema#label> ?label\n" + "FILTER(REGEX(STR(?label), '%s', 'i'))}\n" + "LIMIT %d OFFSET %d"; - super.queryWithLabelTemplate = "PREFIX owl:<http://www.w3.org/2002/07/owl#> SELECT DISTINCT * WHERE {\n" + - "?s ?uri ?o.\n" + + super.queryWithLabelTemplate = "PREFIX owl:<http://www.w3.org/2002/07/owl#> SELECT DISTINCT ?uri ?label WHERE {\n" + +// "?s ?uri ?o.\n" + "?uri a owl:ObjectProperty." + "?uri <http://www.w3.org/2000/01/rdf-schema#label> ?label\n" + "FILTER(REGEX(STR(?label), '%s', 'i'))}\n" + Modified: trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoClassesIndex.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoClassesIndex.java 2013-02-16 13:03:00 UTC (rev 3899) +++ trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoClassesIndex.java 2013-02-18 14:14:10 UTC (rev 3900) @@ -24,13 +24,15 @@ private void init(){ super.queryTemplate = "SELECT DISTINCT ?uri WHERE {\n" + - "?s a ?uri.\n" + + "{?s a ?uri} UNION {?uri a owl:Class}.\n" + +// "?s a ?uri.\n" + "?uri <http://www.w3.org/2000/01/rdf-schema#label> ?label.\n" + "?label bif:contains '\"%s\"'}\n" + "LIMIT %d OFFSET %d"; - super.queryWithLabelTemplate = "SELECT DISTINCT * WHERE {\n" + - "?s a ?uri.\n" + + super.queryWithLabelTemplate = "SELECT DISTINCT ?uri ?label WHERE {\n" + + "{?s a ?uri} UNION {?uri a owl:Class}.\n" + +// "?s a ?uri.\n" + "?uri <http://www.w3.org/2000/01/rdf-schema#label> ?label.\n" + "?label bif:contains '\"%s\"'}\n" + "LIMIT %d OFFSET %d"; Modified: trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoDatatypePropertiesIndex.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoDatatypePropertiesIndex.java 2013-02-16 13:03:00 UTC (rev 3899) +++ trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoDatatypePropertiesIndex.java 2013-02-18 14:14:10 UTC (rev 3900) @@ -23,14 +23,14 @@ private void init(){ super.queryTemplate = "SELECT ?uri WHERE {\n" + - "?s ?uri ?o.\n" + +// "?s ?uri ?o.\n" + "?uri a owl:DatatypeProperty.\n" + "?uri <http://www.w3.org/2000/01/rdf-schema#label> ?label.\n" + "?label bif:contains '\"%s\"'}\n" + "LIMIT %d OFFSET %d"; - super.queryWithLabelTemplate = "PREFIX owl:<http://www.w3.org/2002/07/owl#> SELECT DISTINCT * WHERE {\n" + - "?s ?uri ?o.\n" + + super.queryWithLabelTemplate = "PREFIX owl:<http://www.w3.org/2002/07/owl#> SELECT DISTINCT ?uri ?label WHERE {\n" + +// "?s ?uri ?o.\n" + "?uri a owl:DatatypeProperty.\n" + "?uri <http://www.w3.org/2000/01/rdf-schema#label> ?label.\n" + "?label bif:contains '\"%s\"'}\n" + Modified: trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoObjectPropertiesIndex.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoObjectPropertiesIndex.java 2013-02-16 13:03:00 UTC (rev 3899) +++ trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoObjectPropertiesIndex.java 2013-02-18 14:14:10 UTC (rev 3900) @@ -23,14 +23,14 @@ private void init(){ super.queryTemplate = "SELECT ?uri WHERE {\n" + - "?s ?uri ?o.\n" + +// "?s ?uri ?o.\n" + "?uri a owl:ObjectProperty.\n" + "?uri <http://www.w3.org/2000/01/rdf-schema#label> ?label." + "?label bif:contains '\"%s\"'}\n" + "LIMIT %d OFFSET %d"; - super.queryWithLabelTemplate = "PREFIX owl:<http://www.w3.org/2002/07/owl#> SELECT DISTINCT * WHERE {\n" + - "?s ?uri ?o.\n" + + super.queryWithLabelTemplate = "PREFIX owl:<http://www.w3.org/2002/07/owl#> SELECT DISTINCT ?uri ?label WHERE {\n" + +// "?s ?uri ?o.\n" + "?uri a owl:ObjectProperty.\n" + "?uri <http://www.w3.org/2000/01/rdf-schema#label> ?label.\n" + "?label bif:contains '\"%s\"'}\n" + Modified: trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoPropertiesIndex.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoPropertiesIndex.java 2013-02-16 13:03:00 UTC (rev 3899) +++ trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoPropertiesIndex.java 2013-02-18 14:14:10 UTC (rev 3900) @@ -29,13 +29,15 @@ private void init(){ super.queryTemplate = "SELECT DISTINCT ?uri WHERE {\n" + - "?s ?uri ?o.\n" + +// "?s ?uri ?o.\n" + + "{SELECT DISTINCT ?uri WHERE {?s ?uri ?o.}}\n" + "?uri <http://www.w3.org/2000/01/rdf-schema#label> ?label.\n" + "?label bif:contains '\"%s\"'}\n" + "LIMIT %d OFFSET %d"; super.queryWithLabelTemplate = "PREFIX owl:<http://www.w3.org/2002/07/owl#> SELECT DISTINCT ?uri ?label WHERE {\n" + - "?s ?uri ?o.\n" + +// "?s ?uri ?o.\n" + + "{SELECT DISTINCT ?uri WHERE {?s ?uri ?o.}}\n" + // "{?uri a owl:DatatypeProperty.} UNION {?uri a owl:ObjectProperty.} " + "?uri <http://www.w3.org/2000/01/rdf-schema#label> ?label.\n" + "?label bif:contains '\"%s\"'}\n" + Modified: trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoResourcesIndex.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoResourcesIndex.java 2013-02-16 13:03:00 UTC (rev 3899) +++ trunk/components-ext/src/main/java/org/dllearner/common/index/VirtuosoResourcesIndex.java 2013-02-18 14:14:10 UTC (rev 3900) @@ -32,7 +32,7 @@ "?label bif:contains '\"%s\"'}\n" + "LIMIT %d OFFSET %d"; - super.queryWithLabelTemplate = "SELECT DISTINCT * WHERE {\n" + + super.queryWithLabelTemplate = "SELECT DISTINCT ?uri ?label WHERE {\n" + "?uri a ?type.\n" + "?uri <http://www.w3.org/2000/01/rdf-schema#label> ?label.\n" + "?label bif:contains '\"%s\"'}\n" + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-02-16 13:03:08
|
Revision: 3899 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3899&view=rev Author: lorenz_b Date: 2013-02-16 13:03:00 +0000 (Sat, 16 Feb 2013) Log Message: ----------- Added option to work on JENA model. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/cli/CLI.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/Knowledgebase.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/PopularityMap.java trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/Evaluation.java trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java Added Paths: ----------- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/LocalKnowledgebase.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/RemoteKnowledgebase.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java 2013-02-11 12:18:04 UTC (rev 3898) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java 2013-02-16 13:03:00 UTC (rev 3899) @@ -68,7 +68,9 @@ import org.dllearner.utilities.Helper; import org.springframework.beans.factory.annotation.Autowired; +import com.hp.hpl.jena.query.QueryExecutionFactory; import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.query.ResultSetRewindable; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.Statement; @@ -94,6 +96,7 @@ // private QTLConfigurator configurator; private SparqlEndpoint endpoint; + private Model model; private ExtractionDBCache cache; private QueryTreeCache treeCache; @@ -157,6 +160,21 @@ negExampleTrees = new ArrayList<QueryTree<String>>(); } + public QTL(Model model) { + this.model = model; + + treeCache = new QueryTreeCache(); + cbdGenerator = new CachingConciseBoundedDescriptionGenerator(new ConciseBoundedDescriptionGeneratorImpl(model)); + cbdGenerator.setRecursionDepth(maxQueryTreeDepth); + + lggGenerator = new LGGGeneratorImpl<String>(); + nbr = new NBR<String>(model); + nbr.setMaxExecutionTimeInSeconds(maxExecutionTimeInSeconds); + + posExampleTrees = new ArrayList<QueryTree<String>>(); + negExampleTrees = new ArrayList<QueryTree<String>>(); + } + public String getQuestion(List<String> posExamples, List<String> negExamples) throws EmptyLGGException, NegativeTreeCoverageExecption, TimeOutException { this.posExamples = posExamples; this.negExamples = negExamples; @@ -312,8 +330,13 @@ private SortedSet<String> getResources(QueryTree<String> tree){ SortedSet<String> resources = new TreeSet<String>(); String query = getDistinctSPARQLQuery(tree); - String result = cache.executeSelectQuery(endpoint, query); - ResultSetRewindable rs = SparqlQuery.convertJSONtoResultSet(result); + ResultSet rs; + if(endpoint != null){ + rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query)); + } else { + rs = QueryExecutionFactory.create(query, model).execSelect(); + } + String uri; QuerySolution qs; while(rs.hasNext()){ Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/cli/CLI.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/cli/CLI.java 2013-02-11 12:18:04 UTC (rev 3898) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/cli/CLI.java 2013-02-16 13:03:00 UTC (rev 3899) @@ -10,6 +10,7 @@ import org.dllearner.algorithm.tbsl.learning.NoTemplateFoundException; import org.dllearner.algorithm.tbsl.learning.SPARQLTemplateBasedLearner2; import org.dllearner.algorithm.tbsl.util.Knowledgebase; +import org.dllearner.algorithm.tbsl.util.RemoteKnowledgebase; import org.dllearner.common.index.Index; import org.dllearner.common.index.SOLRIndex; import org.dllearner.kb.sparql.SparqlEndpoint; @@ -30,7 +31,7 @@ Index propertiesIndex = new SOLRIndex("http://dbpedia.aksw.org:8080/solr/dbpedia_properties"); - Knowledgebase kb = new Knowledgebase(endpoint, "DBpedia Live", "TODO", resourcesIndex, propertiesIndex, classesIndex, null); + Knowledgebase kb = new RemoteKnowledgebase(endpoint, "DBpedia Live", "TODO", resourcesIndex, propertiesIndex, classesIndex, null); SPARQLTemplateBasedLearner2 learner = new SPARQLTemplateBasedLearner2(kb); System.out.println("======= TBSL v0.1 ============="); Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java 2013-02-11 12:18:04 UTC (rev 3898) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner2.java 2013-02-16 13:03:00 UTC (rev 3899) @@ -44,7 +44,9 @@ import org.dllearner.algorithm.tbsl.sparql.WeightedQuery; import org.dllearner.algorithm.tbsl.templator.Templator; import org.dllearner.algorithm.tbsl.util.Knowledgebase; +import org.dllearner.algorithm.tbsl.util.LocalKnowledgebase; import org.dllearner.algorithm.tbsl.util.PopularityMap; +import org.dllearner.algorithm.tbsl.util.RemoteKnowledgebase; import org.dllearner.algorithm.tbsl.util.PopularityMap.EntityType; import org.dllearner.algorithm.tbsl.util.Similarity; import org.dllearner.algorithm.tbsl.util.UnknownPropertyHelper.SymPropertyDirection; @@ -163,12 +165,44 @@ } public SPARQLTemplateBasedLearner2(Knowledgebase knowledgebase, PartOfSpeechTagger posTagger, WordNet wordNet, Options options){ - this(knowledgebase.getEndpoint(), knowledgebase.getResourceIndex(), knowledgebase.getClassIndex(),knowledgebase.getPropertyIndex(), posTagger, wordNet, options); + this(knowledgebase, posTagger, wordNet, options, null); } public SPARQLTemplateBasedLearner2(Knowledgebase knowledgebase){ - this(knowledgebase.getEndpoint(), knowledgebase.getResourceIndex(), knowledgebase.getClassIndex(),knowledgebase.getPropertyIndex(), new StanfordPartOfSpeechTagger(), new WordNet(), new Options()); + this(knowledgebase, new StanfordPartOfSpeechTagger(), new WordNet(), new Options()); } + + public SPARQLTemplateBasedLearner2(Knowledgebase knowledgebase, PartOfSpeechTagger posTagger, WordNet wordNet, Options options, ExtractionDBCache cache){ + if(knowledgebase instanceof LocalKnowledgebase){ + this.model = ((LocalKnowledgebase) knowledgebase).getModel(); + } else { + this.endpoint = ((RemoteKnowledgebase) knowledgebase).getEndpoint(); + } + this.resourcesIndex = knowledgebase.getResourceIndex(); + this.classesIndex = knowledgebase.getClassIndex(); + this.propertiesIndex = knowledgebase.getPropertyIndex(); + this.mappingIndex = knowledgebase.getMappingIndex(); + if(propertiesIndex instanceof SPARQLPropertiesIndex){ + if(propertiesIndex instanceof VirtuosoPropertiesIndex){ + datatypePropertiesIndex = new VirtuosoDatatypePropertiesIndex((SPARQLPropertiesIndex)propertiesIndex); + objectPropertiesIndex = new VirtuosoObjectPropertiesIndex((SPARQLPropertiesIndex)propertiesIndex); + } else { + datatypePropertiesIndex = new SPARQLDatatypePropertiesIndex((SPARQLPropertiesIndex)propertiesIndex); + objectPropertiesIndex = new SPARQLObjectPropertiesIndex((SPARQLPropertiesIndex)propertiesIndex); + } + } else { + datatypePropertiesIndex = propertiesIndex; + objectPropertiesIndex = propertiesIndex; + } + this.posTagger = posTagger; + this.wordNet = wordNet; + this.cache = cache; + + reasoner = new SPARQLReasoner(new SparqlEndpointKS(endpoint)); + setOptions(options); + + setMappingIndex(knowledgebase.getMappingIndex()); + } public SPARQLTemplateBasedLearner2(SparqlEndpoint endpoint, Index index){ this(endpoint, index, new StanfordPartOfSpeechTagger()); @@ -301,7 +335,11 @@ } public void setKnowledgebase(Knowledgebase knowledgebase){ - this.endpoint = knowledgebase.getEndpoint(); + if(knowledgebase instanceof LocalKnowledgebase){ + this.model = ((LocalKnowledgebase) knowledgebase).getModel(); + } else { + this.endpoint = ((RemoteKnowledgebase) knowledgebase).getEndpoint(); + } this.resourcesIndex = knowledgebase.getResourceIndex(); this.classesIndex = knowledgebase.getClassIndex(); this.propertiesIndex = knowledgebase.getPropertyIndex(); Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3.java 2013-02-11 12:18:04 UTC (rev 3898) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3.java 2013-02-16 13:03:00 UTC (rev 3899) @@ -46,7 +46,9 @@ import org.dllearner.algorithm.tbsl.sparql.WeightedQuery; import org.dllearner.algorithm.tbsl.templator.Templator; import org.dllearner.algorithm.tbsl.util.Knowledgebase; +import org.dllearner.algorithm.tbsl.util.LocalKnowledgebase; import org.dllearner.algorithm.tbsl.util.PopularityMap; +import org.dllearner.algorithm.tbsl.util.RemoteKnowledgebase; import org.dllearner.algorithm.tbsl.util.PopularityMap.EntityType; import org.dllearner.algorithm.tbsl.util.SPARQLEndpointMetrics; import org.dllearner.algorithm.tbsl.util.Similarity; @@ -171,17 +173,44 @@ } public SPARQLTemplateBasedLearner3(Knowledgebase knowledgebase, PartOfSpeechTagger posTagger, WordNet wordNet, Options options){ - this(knowledgebase.getEndpoint(), knowledgebase.getResourceIndex(), knowledgebase.getClassIndex(),knowledgebase.getPropertyIndex(), posTagger, wordNet, options); + this(knowledgebase, posTagger, wordNet, options, null); setMappingIndex(knowledgebase.getMappingIndex()); } public SPARQLTemplateBasedLearner3(Knowledgebase knowledgebase, PartOfSpeechTagger posTagger, WordNet wordNet, Options options, ExtractionDBCache cache){ - this(knowledgebase.getEndpoint(), knowledgebase.getResourceIndex(), knowledgebase.getClassIndex(),knowledgebase.getPropertyIndex(), posTagger, wordNet, options, cache); + if(knowledgebase instanceof LocalKnowledgebase){ + this.model = ((LocalKnowledgebase) knowledgebase).getModel(); + } else { + this.endpoint = ((RemoteKnowledgebase) knowledgebase).getEndpoint(); + } + this.resourcesIndex = knowledgebase.getResourceIndex(); + this.classesIndex = knowledgebase.getClassIndex(); + this.propertiesIndex = knowledgebase.getPropertyIndex(); + this.mappingIndex = knowledgebase.getMappingIndex(); + if(propertiesIndex instanceof SPARQLPropertiesIndex){ + if(propertiesIndex instanceof VirtuosoPropertiesIndex){ + datatypePropertiesIndex = new VirtuosoDatatypePropertiesIndex((SPARQLPropertiesIndex)propertiesIndex); + objectPropertiesIndex = new VirtuosoObjectPropertiesIndex((SPARQLPropertiesIndex)propertiesIndex); + } else { + datatypePropertiesIndex = new SPARQLDatatypePropertiesIndex((SPARQLPropertiesIndex)propertiesIndex); + objectPropertiesIndex = new SPARQLObjectPropertiesIndex((SPARQLPropertiesIndex)propertiesIndex); + } + } else { + datatypePropertiesIndex = propertiesIndex; + objectPropertiesIndex = propertiesIndex; + } + this.posTagger = posTagger; + this.wordNet = wordNet; + this.cache = cache; + + reasoner = new SPARQLReasoner(new SparqlEndpointKS(endpoint)); + setOptions(options); + setMappingIndex(knowledgebase.getMappingIndex()); } public SPARQLTemplateBasedLearner3(Knowledgebase knowledgebase){ - this(knowledgebase.getEndpoint(), knowledgebase.getResourceIndex(), knowledgebase.getClassIndex(),knowledgebase.getPropertyIndex(), new StanfordPartOfSpeechTagger(), new WordNet(), new Options()); + this(knowledgebase, new StanfordPartOfSpeechTagger(), new WordNet(), new Options()); setMappingIndex(knowledgebase.getMappingIndex()); } @@ -303,7 +332,11 @@ } public void setKnowledgebase(Knowledgebase knowledgebase){ - this.endpoint = knowledgebase.getEndpoint(); + if(knowledgebase instanceof LocalKnowledgebase){ + this.model = ((LocalKnowledgebase) knowledgebase).getModel(); + } else { + this.endpoint = ((RemoteKnowledgebase) knowledgebase).getEndpoint(); + } this.resourcesIndex = knowledgebase.getResourceIndex(); this.classesIndex = knowledgebase.getClassIndex(); this.propertiesIndex = knowledgebase.getPropertyIndex(); Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/Knowledgebase.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/Knowledgebase.java 2013-02-11 12:18:04 UTC (rev 3898) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/Knowledgebase.java 2013-02-16 13:03:00 UTC (rev 3899) @@ -2,12 +2,10 @@ import org.dllearner.common.index.Index; import org.dllearner.common.index.MappingBasedIndex; -import org.dllearner.kb.sparql.SparqlEndpoint; -public class Knowledgebase { +public abstract class Knowledgebase { private String label; - private SparqlEndpoint endpoint; private String description; private Index resourceIndex; @@ -16,30 +14,25 @@ private MappingBasedIndex mappingIndex; - public Knowledgebase(SparqlEndpoint endpoint, String label, String description, + public Knowledgebase(String label, String description, Index resourceIndex, Index propertyIndex, Index classIndex) { - this(endpoint, label, description, resourceIndex, propertyIndex, classIndex, null); + this(label, description, resourceIndex, propertyIndex, classIndex, null); } - public Knowledgebase(SparqlEndpoint endpoint, String label, String description, + public Knowledgebase(String label, String description, Index resourceIndex, Index propertyIndex, Index classIndex, MappingBasedIndex mappingIndex) { this.label = label; - this.endpoint = endpoint; this.description = description; this.resourceIndex = resourceIndex; this.propertyIndex = propertyIndex; this.classIndex = classIndex; this.mappingIndex = mappingIndex; } - + public String getLabel() { return label; } - public SparqlEndpoint getEndpoint() { - return endpoint; - } - public String getDescription() { return description; } Added: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/LocalKnowledgebase.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/LocalKnowledgebase.java (rev 0) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/LocalKnowledgebase.java 2013-02-16 13:03:00 UTC (rev 3899) @@ -0,0 +1,22 @@ +package org.dllearner.algorithm.tbsl.util; + +import org.dllearner.common.index.Index; +import org.dllearner.common.index.MappingBasedIndex; + +import com.hp.hpl.jena.rdf.model.Model; + +public class LocalKnowledgebase extends Knowledgebase{ + + private Model model; + + public LocalKnowledgebase(Model model, String label, String description, Index resourceIndex, Index propertyIndex, + Index classIndex, MappingBasedIndex mappingIndex) { + super(label, description, resourceIndex, propertyIndex, classIndex, mappingIndex); + this.model = model; + } + + public Model getModel() { + return model; + } + +} Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/PopularityMap.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/PopularityMap.java 2013-02-11 12:18:04 UTC (rev 3898) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/PopularityMap.java 2013-02-16 13:03:00 UTC (rev 3899) @@ -20,8 +20,10 @@ import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlQuery; +import com.hp.hpl.jena.query.QueryExecutionFactory; import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.ResultSet; +import com.hp.hpl.jena.rdf.model.Model; public class PopularityMap { @@ -30,6 +32,7 @@ } private SparqlEndpoint endpoint; + private Model model; private ExtractionDBCache cache; private String file; @@ -41,9 +44,13 @@ this.file = file; this.endpoint = endpoint; this.cache = cache; - } + public PopularityMap(String file, Model model) { + this.file = file; + this.model = model; + } + public void init() { boolean deserialized = deserialize(); if(!deserialized){ @@ -137,7 +144,12 @@ query = String.format("SELECT COUNT(*) WHERE {?s ?p <%s>}", uri); } int pop = 0; - ResultSet rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query)); + ResultSet rs; + if(endpoint != null){ + rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query)); + } else { + rs = QueryExecutionFactory.create(query, model).execSelect(); + } QuerySolution qs; String projectionVar; while(rs.hasNext()){ Added: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/RemoteKnowledgebase.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/RemoteKnowledgebase.java (rev 0) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/RemoteKnowledgebase.java 2013-02-16 13:03:00 UTC (rev 3899) @@ -0,0 +1,22 @@ +package org.dllearner.algorithm.tbsl.util; + +import org.dllearner.common.index.Index; +import org.dllearner.common.index.MappingBasedIndex; +import org.dllearner.kb.sparql.SparqlEndpoint; + +public class RemoteKnowledgebase extends Knowledgebase{ + + private SparqlEndpoint endpoint; + + public RemoteKnowledgebase(SparqlEndpoint endpoint, String label, String description, Index resourceIndex, Index propertyIndex, + Index classIndex, MappingBasedIndex mappingIndex) { + super(label, description, resourceIndex, propertyIndex, classIndex, mappingIndex); + this.endpoint = endpoint; + } + + public SparqlEndpoint getEndpoint() { + return endpoint; + } + + +} Modified: trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/Evaluation.java =================================================================== --- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/Evaluation.java 2013-02-11 12:18:04 UTC (rev 3898) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/Evaluation.java 2013-02-16 13:03:00 UTC (rev 3899) @@ -42,6 +42,7 @@ import org.dllearner.algorithm.tbsl.sparql.WeightedQuery; import org.dllearner.algorithm.tbsl.util.Knowledgebase; import org.dllearner.algorithm.tbsl.util.LatexWriter; +import org.dllearner.algorithm.tbsl.util.RemoteKnowledgebase; import org.dllearner.common.index.Index; import org.dllearner.common.index.SOLRIndex; import org.dllearner.kb.sparql.ExtractionDBCache; @@ -99,7 +100,7 @@ Index propertiesIndex = new SOLRIndex("http://dbpedia.aksw.org:8080/solr/dbpedia_properties"); - Knowledgebase kb = new Knowledgebase(endpoint, "DBpedia Live", "TODO", resourcesIndex, propertiesIndex, classesIndex, null); + Knowledgebase kb = new RemoteKnowledgebase(endpoint, "DBpedia Live", "TODO", resourcesIndex, propertiesIndex, classesIndex, null); stbl = new SPARQLTemplateBasedLearner2(kb); stbl.setUseIdealTagger(USE_IDEAL_TAGGER); Modified: trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java =================================================================== --- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 2013-02-11 12:18:04 UTC (rev 3898) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 2013-02-16 13:03:00 UTC (rev 3899) @@ -55,6 +55,7 @@ import org.dllearner.algorithm.tbsl.nlp.WordNet; import org.dllearner.algorithm.tbsl.templator.Templator; import org.dllearner.algorithm.tbsl.util.Knowledgebase; +import org.dllearner.algorithm.tbsl.util.RemoteKnowledgebase; import org.dllearner.common.index.HierarchicalIndex; import org.dllearner.common.index.Index; import org.dllearner.common.index.MappingBasedIndex; @@ -794,7 +795,7 @@ SPARQLTemplateBasedLearner2.class.getClassLoader().getResource("test/dbpedia_objectproperty_mappings.txt").getPath() ); - Knowledgebase kb = new Knowledgebase(dbpediaLiveEndpoint, "DBpedia Live", "TODO", resourcesIndex, propertiesIndex, classesIndex, mappingIndex); + Knowledgebase kb = new RemoteKnowledgebase(dbpediaLiveEndpoint, "DBpedia Live", "TODO", resourcesIndex, propertiesIndex, classesIndex, mappingIndex); return kb; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-02-11 12:18:12
|
Revision: 3898 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3898&view=rev Author: lorenz_b Date: 2013-02-11 12:18:04 +0000 (Mon, 11 Feb 2013) Log Message: ----------- Changed datatype URI to IRI to avoid problems with special chars. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/core/owl/Datatype.java trunk/components-core/src/main/java/org/dllearner/core/owl/OWL2Datatype.java trunk/components-core/src/main/java/org/dllearner/core/owl/TypedConstant.java trunk/components-core/src/main/java/org/dllearner/reasoning/OWLAPIReasoner.java trunk/components-core/src/main/java/org/dllearner/reasoning/PelletReasoner.java trunk/components-core/src/main/java/org/dllearner/reasoning/fuzzydll/FuzzyOWLAPIReasoner.java trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIAxiomConvertVisitor.java trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIConverter.java trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIDescriptionConvertVisitor.java Modified: trunk/components-core/src/main/java/org/dllearner/core/owl/Datatype.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/core/owl/Datatype.java 2013-02-07 14:03:54 UTC (rev 3897) +++ trunk/components-core/src/main/java/org/dllearner/core/owl/Datatype.java 2013-02-11 12:18:04 UTC (rev 3898) @@ -19,7 +19,6 @@ package org.dllearner.core.owl; -import java.net.URI; import java.util.Map; import org.semanticweb.owlapi.model.IRI; @@ -31,19 +30,19 @@ */ public class Datatype implements DataRange, Comparable<Datatype> { - private URI uri; + private IRI iri; - public Datatype(String uriString) { - uri = URI.create(uriString); + public Datatype(String iriString) { + iri = IRI.create(iriString); } - public URI getURI() { - return uri; + public IRI getIRI() { + return iri; } @Override public String toString() { - return uri.toString(); + return iri.toString(); } public int getLength() { @@ -55,11 +54,11 @@ } public String toString(String baseURI, Map<String, String> prefixes) { - return uri.toString(); + return iri.toString(); } public String toKBSyntaxString(String baseURI, Map<String, String> prefixes) { - return uri.toString(); + return iri.toString(); } /* (non-Javadoc) @@ -67,14 +66,14 @@ */ @Override public String toManchesterSyntaxString(String baseURI, Map<String, String> prefixes) { - return uri.toString(); + return iri.toString(); } @Override public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((uri == null) ? 0 : uri.hashCode()); + result = prime * result + ((iri == null) ? 0 : iri.hashCode()); return result; } @@ -87,16 +86,16 @@ if (getClass() != obj.getClass()) return false; Datatype other = (Datatype) obj; - if (uri == null) { - if (other.uri != null) + if (iri == null) { + if (other.iri != null) return false; - } else if (!uri.equals(other.uri)) + } else if (!iri.equals(other.iri)) return false; return true; } @Override public int compareTo(Datatype o) { - return this.getURI().compareTo(o.getURI()); + return this.getIRI().compareTo(o.getIRI()); } } Modified: trunk/components-core/src/main/java/org/dllearner/core/owl/OWL2Datatype.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/core/owl/OWL2Datatype.java 2013-02-07 14:03:54 UTC (rev 3897) +++ trunk/components-core/src/main/java/org/dllearner/core/owl/OWL2Datatype.java 2013-02-11 12:18:04 UTC (rev 3898) @@ -19,7 +19,7 @@ package org.dllearner.core.owl; -import java.net.URI; +import org.semanticweb.owlapi.model.IRI; public enum OWL2Datatype { @@ -41,8 +41,8 @@ return datatype; } - public URI getURI() { - return datatype.getURI(); + public IRI getIRI() { + return datatype.getIRI(); } } Modified: trunk/components-core/src/main/java/org/dllearner/core/owl/TypedConstant.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/core/owl/TypedConstant.java 2013-02-07 14:03:54 UTC (rev 3897) +++ trunk/components-core/src/main/java/org/dllearner/core/owl/TypedConstant.java 2013-02-11 12:18:04 UTC (rev 3898) @@ -99,7 +99,7 @@ */ public int compareTo(TypedConstant o) { // the first criteria is the datatype - int datatypeComparision = datatype.getURI().compareTo(datatype.getURI()); + int datatypeComparision = datatype.getIRI().compareTo(datatype.getIRI()); if(datatypeComparision == 0) { // the second criterion is the literal value return literal.compareTo(o.literal); Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/OWLAPIReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/OWLAPIReasoner.java 2013-02-07 14:03:54 UTC (rev 3897) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/OWLAPIReasoner.java 2013-02-11 12:18:04 UTC (rev 3898) @@ -20,7 +20,6 @@ package org.dllearner.reasoning; import java.io.File; -import java.net.URI; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; @@ -379,19 +378,23 @@ for (OWLDataProperty owlProperty : owlDatatypeProperties) { DatatypeProperty dtp = new DatatypeProperty(owlProperty.toStringID()); Set<OWLDataRange> ranges = owlProperty.getRanges(allImports); - Iterator<OWLDataRange> it = ranges.iterator(); - if (it.hasNext()) { - OWLDataRange range = it.next(); - if (range.isDatatype()) { - URI uri = ((OWLDatatype) range).getIRI().toURI(); - if (uri.equals(OWL2Datatype.BOOLEAN.getURI())) booleanDatatypeProperties.add(dtp); - else if (uri.equals(OWL2Datatype.DOUBLE.getURI())) doubleDatatypeProperties.add(dtp); - else if (uri.equals(OWL2Datatype.INT.getURI())) intDatatypeProperties.add(dtp); - else if (uri.equals(OWL2Datatype.STRING.getURI())) stringDatatypeProperties.add(dtp); - } - } else { - stringDatatypeProperties.add(dtp); - } + Iterator<OWLDataRange> it = ranges.iterator(); + if (it.hasNext()) { + OWLDataRange range = it.next(); + if (range.isDatatype()) { + IRI iri = ((OWLDatatype) range).getIRI(); + if (iri.equals(OWL2Datatype.BOOLEAN.getIRI())) + booleanDatatypeProperties.add(dtp); + else if (iri.equals(OWL2Datatype.DOUBLE.getIRI())) + doubleDatatypeProperties.add(dtp); + else if (iri.equals(OWL2Datatype.INT.getIRI())) + intDatatypeProperties.add(dtp); + else if (iri.equals(OWL2Datatype.STRING.getIRI())) + stringDatatypeProperties.add(dtp); + } + } else { + stringDatatypeProperties.add(dtp); + } datatypeProperties.add(dtp); } for (OWLNamedIndividual owlIndividual : owlIndividuals) { Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/PelletReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/PelletReasoner.java 2013-02-07 14:03:54 UTC (rev 3897) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/PelletReasoner.java 2013-02-11 12:18:04 UTC (rev 3898) @@ -20,7 +20,6 @@ package org.dllearner.reasoning; import java.io.File; -import java.net.URI; import java.net.URISyntaxException; import java.util.Collection; import java.util.Collections; @@ -255,14 +254,14 @@ if(it.hasNext()) { OWLDataRange range = it.next(); if(range.isDatatype()) { - URI uri = ((OWLDatatype)range).getIRI().toURI(); - if(uri.equals(OWL2Datatype.BOOLEAN.getURI())) + IRI iri = ((OWLDatatype)range).getIRI(); + if(iri.equals(OWL2Datatype.BOOLEAN.getIRI())) booleanDatatypeProperties.add(dtp); - else if(uri.equals(OWL2Datatype.DOUBLE.getURI())) + else if(iri.equals(OWL2Datatype.DOUBLE.getIRI())) doubleDatatypeProperties.add(dtp); - else if(uri.equals(OWL2Datatype.INT.getURI())) + else if(iri.equals(OWL2Datatype.INT.getIRI())) intDatatypeProperties.add(dtp); - else if(uri.equals(OWL2Datatype.STRING.getURI())) + else if(iri.equals(OWL2Datatype.STRING.getIRI())) stringDatatypeProperties.add(dtp); } } Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/fuzzydll/FuzzyOWLAPIReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/fuzzydll/FuzzyOWLAPIReasoner.java 2013-02-07 14:03:54 UTC (rev 3897) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/fuzzydll/FuzzyOWLAPIReasoner.java 2013-02-11 12:18:04 UTC (rev 3898) @@ -21,7 +21,6 @@ import java.io.File; import java.net.MalformedURLException; -import java.net.URI; import java.net.URL; import java.util.Collection; import java.util.Collections; @@ -116,8 +115,6 @@ import org.semanticweb.owlapi.util.SimpleIRIMapper; import org.semanticweb.owlapi.vocab.PrefixOWLOntologyFormat; -import uk.ac.manchester.cs.factplusplus.owlapiv3.FaCTPlusPlusReasonerFactory; - import com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory; /** @@ -385,14 +382,14 @@ if(it.hasNext()) { OWLDataRange range = it.next(); if(range.isDatatype()) { - URI uri = ((OWLDatatype)range).getIRI().toURI(); - if(uri.equals(OWL2Datatype.BOOLEAN.getURI())) + IRI iri = ((OWLDatatype)range).getIRI(); + if(iri.equals(OWL2Datatype.BOOLEAN.getIRI())) booleanDatatypeProperties.add(dtp); - else if(uri.equals(OWL2Datatype.DOUBLE.getURI())) + else if(iri.equals(OWL2Datatype.DOUBLE.getIRI())) doubleDatatypeProperties.add(dtp); - else if(uri.equals(OWL2Datatype.INT.getURI())) + else if(iri.equals(OWL2Datatype.INT.getIRI())) intDatatypeProperties.add(dtp); - else if(uri.equals(OWL2Datatype.STRING.getURI())) + else if(iri.equals(OWL2Datatype.STRING.getIRI())) stringDatatypeProperties.add(dtp); } } else { Modified: trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIAxiomConvertVisitor.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIAxiomConvertVisitor.java 2013-02-07 14:03:54 UTC (rev 3897) +++ trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIAxiomConvertVisitor.java 2013-02-11 12:18:04 UTC (rev 3898) @@ -346,7 +346,7 @@ public void visit(DatatypePropertyRangeAxiom axiom) { DataRange dr = axiom.getRange(); Datatype dt = (Datatype) dr; - OWLDatatype odt = factory.getOWLDatatype(IRI.create(dt.getURI())); + OWLDatatype odt = factory.getOWLDatatype(dt.getIRI()); OWLDataProperty dp = factory.getOWLDataProperty(IRI.create(axiom.getProperty().getName())); OWLAxiom axiomOWLAPI = factory.getOWLDataPropertyRangeAxiom(dp, odt); addAxiom(axiomOWLAPI); Modified: trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIConverter.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIConverter.java 2013-02-07 14:03:54 UTC (rev 3897) +++ trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIConverter.java 2013-02-11 12:18:04 UTC (rev 3898) @@ -19,7 +19,6 @@ package org.dllearner.utilities.owl; -import java.net.URI; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; @@ -177,20 +176,20 @@ } public static Datatype convertDatatype(OWLDatatype dataType) { - URI uri = dataType.getIRI().toURI(); - if(uri.equals(OWL2Datatype.BOOLEAN.getURI())) + IRI iri = dataType.getIRI(); + if(iri.equals(OWL2Datatype.BOOLEAN.getIRI())) return OWL2Datatype.BOOLEAN.getDatatype(); - else if(uri.equals(OWL2Datatype.DOUBLE.getURI())) + else if(iri.equals(OWL2Datatype.DOUBLE.getIRI())) return OWL2Datatype.DOUBLE.getDatatype(); - else if(uri.equals(OWL2Datatype.INT.getURI())) + else if(iri.equals(OWL2Datatype.INT.getIRI())) return OWL2Datatype.INT.getDatatype(); - else if(uri.equals(OWL2Datatype.INTEGER.getURI())) + else if(iri.equals(OWL2Datatype.INTEGER.getIRI())) return OWL2Datatype.INTEGER.getDatatype(); - else if(uri.equals(OWL2Datatype.STRING.getURI())) + else if(iri.equals(OWL2Datatype.STRING.getIRI())) return OWL2Datatype.STRING.getDatatype(); - else if(uri.equals(OWL2Datatype.DATE.getURI())) + else if(iri.equals(OWL2Datatype.DATE.getIRI())) return OWL2Datatype.DATE.getDatatype(); - else if(uri.equals(OWL2Datatype.DATETIME.getURI())) + else if(iri.equals(OWL2Datatype.DATETIME.getIRI())) return OWL2Datatype.DATETIME.getDatatype(); throw new Error("Unsupported datatype " + dataType + ". Please inform a DL-Learner developer to add it."); } Modified: trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIDescriptionConvertVisitor.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIDescriptionConvertVisitor.java 2013-02-07 14:03:54 UTC (rev 3897) +++ trunk/components-core/src/main/java/org/dllearner/utilities/owl/OWLAPIDescriptionConvertVisitor.java 2013-02-11 12:18:04 UTC (rev 3898) @@ -340,7 +340,7 @@ else if(datatype.equals(OWL2Datatype.DOUBLE.getDatatype())) return factory.getDoubleOWLDatatype(); else if(datatype.equals(OWL2Datatype.STRING.getDatatype())) - return factory.getOWLDatatype(IRI.create(OWL2Datatype.STRING.getURI())); + return factory.getOWLDatatype(OWL2Datatype.STRING.getIRI()); throw new Error("OWLAPIDescriptionConverter: datatype "+datatype+" not implemented"); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-02-07 14:04:07
|
Revision: 3897 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3897&view=rev Author: lorenz_b Date: 2013-02-07 14:03:54 +0000 (Thu, 07 Feb 2013) Log Message: ----------- Cont. matching. Modified Paths: -------------- trunk/scripts/pom.xml trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java trunk/scripts/src/test/java/org/dllearner/junit/OntologyMatchingTest.java Modified: trunk/scripts/pom.xml =================================================================== --- trunk/scripts/pom.xml 2013-02-06 18:17:28 UTC (rev 3896) +++ trunk/scripts/pom.xml 2013-02-07 14:03:54 UTC (rev 3897) @@ -116,6 +116,7 @@ <dependency> <groupId>net.sourceforge.owlapi</groupId> <artifactId>owlapi-distribution</artifactId> + <version>3.4.4-SNAPSHOT</version> </dependency> <dependency> <groupId>net.sourceforge.owlapi</groupId> Modified: trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java 2013-02-06 18:17:28 UTC (rev 3896) +++ trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java 2013-02-07 14:03:54 UTC (rev 3897) @@ -19,15 +19,18 @@ import org.apache.log4j.Logger; import org.dllearner.algorithms.celoe.CELOE; +import org.dllearner.algorithms.qtl.QTL; import org.dllearner.core.AbstractLearningProblem; import org.dllearner.core.AbstractReasonerComponent; import org.dllearner.core.ComponentInitException; import org.dllearner.core.EvaluatedDescription; import org.dllearner.core.KnowledgeSource; +import org.dllearner.core.LearningProblemUnsupportedException; import org.dllearner.core.owl.Description; import org.dllearner.core.owl.Individual; import org.dllearner.core.owl.NamedClass; import org.dllearner.core.owl.ObjectProperty; +import org.dllearner.kb.LocalModelBasedSparqlEndpointKS; import org.dllearner.kb.OWLAPIOntology; import org.dllearner.kb.SparqlEndpointKS; import org.dllearner.kb.sparql.ConciseBoundedDescriptionGenerator; @@ -48,15 +51,16 @@ import org.dllearner.utilities.examples.AutomaticNegativeExampleFinderSPARQL2; import org.dllearner.utilities.owl.OWLAPIDescriptionConvertVisitor; import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.io.UnparsableOntologyException; import org.semanticweb.owlapi.model.OWLOntology; import org.semanticweb.owlapi.model.OWLOntologyCreationException; import org.semanticweb.owlapi.model.OWLOntologyManager; import uk.ac.manchester.cs.owl.owlapi.mansyntaxrenderer.ManchesterOWLSyntaxOWLObjectRendererImpl; +import com.clarkparsia.owlapiv3.XSD; import com.google.common.collect.Sets; import com.hp.hpl.jena.ontology.OntModel; +import com.hp.hpl.jena.ontology.OntModelSpec; import com.hp.hpl.jena.query.ParameterizedSparqlString; import com.hp.hpl.jena.query.Query; import com.hp.hpl.jena.query.QueryExecutionFactory; @@ -64,6 +68,7 @@ import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.query.Syntax; +import com.hp.hpl.jena.rdf.model.Literal; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.rdf.model.RDFNode; @@ -190,7 +195,7 @@ List<? extends EvaluatedDescription> learnedClassExpressions = computeMapping(nc, source, target); if(learnedClassExpressions != null){ mapping.put(nc, learnedClassExpressions); - //break; +// break; } } catch (Exception e) { logger.error("Failed for " + nc.getName(), e); @@ -217,7 +222,7 @@ } private List<? extends EvaluatedDescription> learnClassExpressions(KnowledgeBase kb, SortedSet<Individual> positiveExamples, boolean posNeg){ - Model fullFragment = null; + OntModel fullFragment = null; try { //get a sample of the positive examples @@ -258,8 +263,6 @@ } } - AutomaticNegativeExampleFinderSPARQL2 finder = new AutomaticNegativeExampleFinderSPARQL2(kb.getEndpoint()); - //TODO find negative examples mon.stop(); logger.info("Found " + negativeExamples.size() + " negative examples in " + mon.getLastValue() + "ms."); } @@ -276,7 +279,7 @@ logger.info("...done."); //create fragment consisting of both - fullFragment = ModelFactory.createDefaultModel(); + fullFragment = ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM); fullFragment.add(positiveFragment); fullFragment.add(negativeFragment); @@ -303,6 +306,15 @@ la.setNoisePercentage(25); la.init(); la.start(); + + try { + QTL qtl = new QTL(lp, new LocalModelBasedSparqlEndpointKS(fullFragment)); + qtl.init(); + qtl.start(); + System.out.println(qtl.getSPARQLQuery()); + } catch (LearningProblemUnsupportedException e) { + e.printStackTrace(); + } logger.info(la.getCurrentlyBestEvaluatedDescription()); @@ -311,7 +323,7 @@ e.printStackTrace(); try { new File("errors").mkdir(); - fullFragment.write(new FileOutputStream("errors/" + prettyPrint(currentClass) + ".ttl"), "TURTLE", null); + fullFragment.write(new FileOutputStream("errors/" + prettyPrint(currentClass) + "_inconsistent.ttl"), "TURTLE", null); } catch (FileNotFoundException e1) { e1.printStackTrace(); } @@ -329,7 +341,7 @@ } catch (OWLOntologyCreationException e) { e.printStackTrace(); try { - model.write(new FileOutputStream(prettyPrint(currentClass) + "_conversion_error.ttl"), "TURTLE", null); + model.write(new FileOutputStream("errors/" + prettyPrint(currentClass) + "_conversion_error.ttl"), "TURTLE", null); } catch (FileNotFoundException e1) { e.printStackTrace(); } @@ -376,11 +388,11 @@ Statement st = iter.next(); RDFNode object = st.getObject(); if(object.isLiteral()){ - statementsToRemove.add(st); -// Literal lit = object.asLiteral(); -// if(lit.getDatatype() == null || lit.getDatatype().equals(XSD.STRING)){ -// iter.remove(); -// } +// statementsToRemove.add(st); + Literal lit = object.asLiteral(); + if(lit.getDatatype() == null || lit.getDatatype().equals(XSD.STRING)){ + st.changeObject("shortened", "en"); + } } } fullFragment.remove(statementsToRemove); Modified: trunk/scripts/src/test/java/org/dllearner/junit/OntologyMatchingTest.java =================================================================== --- trunk/scripts/src/test/java/org/dllearner/junit/OntologyMatchingTest.java 2013-02-06 18:17:28 UTC (rev 3896) +++ trunk/scripts/src/test/java/org/dllearner/junit/OntologyMatchingTest.java 2013-02-07 14:03:54 UTC (rev 3897) @@ -100,7 +100,7 @@ } @Test - public void testSingleClass() { + public void testSingleClassOpenCycToDBpedia() { OntologyMatching matcher = new OntologyMatching(openCyc, dbpedia); NamedClass nc = new NamedClass("http://sw.opencyc.org/concept/Mx4r4fYeXvbPQdiKtoNafhmOew"); List<? extends EvaluatedDescription> mapping = matcher.computeMapping(nc, openCyc, dbpedia); @@ -109,6 +109,26 @@ System.out.println(OntologyMatching.toHTMLWithLabels(alignment, openCyc, dbpedia)); } + @Test + public void testSingleClassLinkedGeoDataToDBpedia() { + OntologyMatching matcher = new OntologyMatching(linkedGeoData, dbpedia); + NamedClass nc = new NamedClass("http://linkedgeodata.org/ontology/Aerodrome"); + List<? extends EvaluatedDescription> mapping = matcher.computeMapping(nc, linkedGeoData, dbpedia); + Map<Description, List<? extends EvaluatedDescription>> alignment = new HashMap<Description, List<? extends EvaluatedDescription>>(); + alignment.put(nc, mapping); + System.out.println(OntologyMatching.toHTMLWithLabels(alignment, linkedGeoData, dbpedia)); + } + + @Test + public void testSingleClassDBpediaToLinkedGeoData() { + OntologyMatching matcher = new OntologyMatching(dbpedia, linkedGeoData); + NamedClass nc = new NamedClass("http://dbpedia.org/ontology/AdministrativeRegion"); + List<? extends EvaluatedDescription> mapping = matcher.computeMapping(nc, dbpedia, linkedGeoData); + Map<Description, List<? extends EvaluatedDescription>> alignment = new HashMap<Description, List<? extends EvaluatedDescription>>(); + alignment.put(nc, mapping); + System.out.println(OntologyMatching.toHTMLWithLabels(alignment, dbpedia, linkedGeoData)); + } + private void save(String filename, Map<Description, List<? extends EvaluatedDescription>> mapping, KnowledgeBase source, KnowledgeBase target){ BufferedWriter out = null; try { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-02-06 18:17:36
|
Revision: 3896 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3896&view=rev Author: lorenz_b Date: 2013-02-06 18:17:28 +0000 (Wed, 06 Feb 2013) Log Message: ----------- Moved to Unit test folder. Added Paths: ----------- trunk/scripts/src/test/java/org/dllearner/junit/OntologyMatchingTest.java Removed Paths: ------------- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java Deleted: trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java 2013-02-06 18:01:42 UTC (rev 3895) +++ trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java 2013-02-06 18:17:28 UTC (rev 3896) @@ -1,147 +0,0 @@ -package org.dllearner.scripts; - -import java.io.BufferedWriter; -import java.io.FileWriter; -import java.io.IOException; -import java.net.URL; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.log4j.ConsoleAppender; -import org.apache.log4j.Level; -import org.apache.log4j.Logger; -import org.apache.log4j.PatternLayout; -import org.dllearner.core.EvaluatedDescription; -import org.dllearner.core.owl.Description; -import org.dllearner.core.owl.NamedClass; -import org.dllearner.kb.extraction.ExtractionAlgorithm; -import org.dllearner.kb.sparql.ExtractionDBCache; -import org.dllearner.kb.sparql.SparqlEndpoint; -import org.dllearner.kb.sparql.SparqlKnowledgeSource; -import org.dllearner.scripts.OntologyMatching.KnowledgeBase; -import org.junit.Before; -import org.junit.Test; -import org.semanticweb.owlapi.io.ToStringRenderer; - -import uk.ac.manchester.cs.owl.owlapi.mansyntaxrenderer.ManchesterOWLSyntaxOWLObjectRendererImpl; - -public class OntologyMatchingTest { - - private KnowledgeBase dbpedia; - private KnowledgeBase worldFactBook; - private KnowledgeBase openCyc; - private KnowledgeBase linkedGeoData; - - @Before - public void setUp() throws Exception { - // render output - ToStringRenderer.getInstance().setRenderer(new ManchesterOWLSyntaxOWLObjectRendererImpl()); - // set logging properties - Logger.getLogger(SparqlKnowledgeSource.class).setLevel(Level.WARN); - Logger.getLogger(ExtractionAlgorithm.class).setLevel(Level.WARN); - Logger.getLogger(org.dllearner.kb.extraction.Manager.class).setLevel(Level.WARN); - Logger.getRootLogger().removeAllAppenders(); - Logger.getRootLogger().addAppender(new ConsoleAppender(new PatternLayout("%m%n"))); -// Logger.getRootLogger().setLevel(Level.DEBUG); - - //DBpedia - SparqlEndpoint endpoint = SparqlEndpoint.getEndpointDBpedia(); - ExtractionDBCache cache = new ExtractionDBCache("cache"); - String namespace = "http://dbpedia.org/resource/"; - dbpedia = new KnowledgeBase(endpoint, null, namespace); - - //World Factbook - //TODO problem with World Factbook is that old FU Berlin server is useless because of bugs and current version - //is provide by University Of Mannheim now with another namespace http://wifo5-03.informatik.uni-mannheim.de/factbook/resource/ - //but the DBpedia links are still to the old D2R server instance - //workaround: replace namespace before learning - endpoint = new SparqlEndpoint(new URL("http://wifo5-03.informatik.uni-mannheim.de/factbook/sparql")); - cache = new ExtractionDBCache("cache"); - namespace = "http://www4.wiwiss.fu-berlin.de/factbook/resource/"; - worldFactBook = new KnowledgeBase(endpoint, cache, namespace); - - //local OpenCyc - endpoint = new SparqlEndpoint(new URL("http://localhost:8890/sparql")); - cache = new ExtractionDBCache("cache"); - namespace = "http://sw.cyc.com"; - openCyc = new KnowledgeBase(endpoint, null, namespace); - - //LinkedGeoData - endpoint = new SparqlEndpoint(new URL("http://linkedgeodata.org/sparql")); - cache = new ExtractionDBCache("cache"); - namespace = "http://linkedgeodata.org/triplify/"; - linkedGeoData = new KnowledgeBase(endpoint, null, namespace); - } - - @Test - public void testDBpediaWorldFactbook() { - OntologyMatching matcher = new OntologyMatching(dbpedia, worldFactBook); - matcher.start(); - save(matcher.getMappingKB1KB2(), "dbpedia_wfb.html"); - save(matcher.getMappingKB2KB1(), "wfb_dbpedia.html"); - } - - @Test - public void testDBpediaOpenCyc() { - OntologyMatching matcher = new OntologyMatching(dbpedia, openCyc); - matcher.start(); - save("dbpedia_opencyc.html", matcher.getMappingKB1KB2(), dbpedia, openCyc); - save("opencyc_dbpedia.html", matcher.getMappingKB2KB1(), openCyc, dbpedia); - } - - @Test - public void testDBpediaLinkedGeoData() { - OntologyMatching matcher = new OntologyMatching(dbpedia, linkedGeoData); - matcher.start(); - save("dbpedia_lgd.html", matcher.getMappingKB1KB2(), dbpedia, linkedGeoData ); - save("lgd_dbpedia.html", matcher.getMappingKB2KB1(), linkedGeoData, dbpedia); - } - - @Test - public void testSingleClass() { - OntologyMatching matcher = new OntologyMatching(openCyc, dbpedia); - NamedClass nc = new NamedClass("http://sw.opencyc.org/concept/Mx4r4fYeXvbPQdiKtoNafhmOew"); - List<? extends EvaluatedDescription> mapping = matcher.computeMapping(nc, openCyc, dbpedia); - Map<Description, List<? extends EvaluatedDescription>> alignment = new HashMap<Description, List<? extends EvaluatedDescription>>(); - alignment.put(nc, mapping); - System.out.println(OntologyMatching.toHTMLWithLabels(alignment, openCyc, dbpedia)); - } - - private void save(String filename, Map<Description, List<? extends EvaluatedDescription>> mapping, KnowledgeBase source, KnowledgeBase target){ - BufferedWriter out = null; - try { - out = new BufferedWriter(new FileWriter(filename)); - out.write(OntologyMatching.toHTMLWithLabels(mapping, source, target)); - } catch (IOException e) { - e.printStackTrace(); - } finally { - if (out != null) { - try { - out.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - } - - private void save(Map<Description, List<? extends EvaluatedDescription>> mapping, String filename){ - BufferedWriter out = null; - try { - out = new BufferedWriter(new FileWriter(filename)); - out.write(OntologyMatching.toHTML(mapping)); - } catch (IOException e) { - e.printStackTrace(); - } finally { - if (out != null) { - try { - out.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - } - -} Added: trunk/scripts/src/test/java/org/dllearner/junit/OntologyMatchingTest.java =================================================================== --- trunk/scripts/src/test/java/org/dllearner/junit/OntologyMatchingTest.java (rev 0) +++ trunk/scripts/src/test/java/org/dllearner/junit/OntologyMatchingTest.java 2013-02-06 18:17:28 UTC (rev 3896) @@ -0,0 +1,148 @@ +package org.dllearner.junit; + +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; +import java.net.URL; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.ConsoleAppender; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.apache.log4j.PatternLayout; +import org.dllearner.core.EvaluatedDescription; +import org.dllearner.core.owl.Description; +import org.dllearner.core.owl.NamedClass; +import org.dllearner.kb.extraction.ExtractionAlgorithm; +import org.dllearner.kb.sparql.ExtractionDBCache; +import org.dllearner.kb.sparql.SparqlEndpoint; +import org.dllearner.kb.sparql.SparqlKnowledgeSource; +import org.dllearner.scripts.OntologyMatching; +import org.dllearner.scripts.OntologyMatching.KnowledgeBase; +import org.junit.Before; +import org.junit.Test; +import org.semanticweb.owlapi.io.ToStringRenderer; + +import uk.ac.manchester.cs.owl.owlapi.mansyntaxrenderer.ManchesterOWLSyntaxOWLObjectRendererImpl; + +public class OntologyMatchingTest { + + private KnowledgeBase dbpedia; + private KnowledgeBase worldFactBook; + private KnowledgeBase openCyc; + private KnowledgeBase linkedGeoData; + + @Before + public void setUp() throws Exception { + // render output + ToStringRenderer.getInstance().setRenderer(new ManchesterOWLSyntaxOWLObjectRendererImpl()); + // set logging properties + Logger.getLogger(SparqlKnowledgeSource.class).setLevel(Level.WARN); + Logger.getLogger(ExtractionAlgorithm.class).setLevel(Level.WARN); + Logger.getLogger(org.dllearner.kb.extraction.Manager.class).setLevel(Level.WARN); + Logger.getRootLogger().removeAllAppenders(); + Logger.getRootLogger().addAppender(new ConsoleAppender(new PatternLayout("%m%n"))); +// Logger.getRootLogger().setLevel(Level.DEBUG); + + //DBpedia + SparqlEndpoint endpoint = SparqlEndpoint.getEndpointDBpedia(); + ExtractionDBCache cache = new ExtractionDBCache("cache"); + String namespace = "http://dbpedia.org/resource/"; + dbpedia = new KnowledgeBase(endpoint, null, namespace); + + //World Factbook + //TODO problem with World Factbook is that old FU Berlin server is useless because of bugs and current version + //is provide by University Of Mannheim now with another namespace http://wifo5-03.informatik.uni-mannheim.de/factbook/resource/ + //but the DBpedia links are still to the old D2R server instance + //workaround: replace namespace before learning + endpoint = new SparqlEndpoint(new URL("http://wifo5-03.informatik.uni-mannheim.de/factbook/sparql")); + cache = new ExtractionDBCache("cache"); + namespace = "http://www4.wiwiss.fu-berlin.de/factbook/resource/"; + worldFactBook = new KnowledgeBase(endpoint, cache, namespace); + + //local OpenCyc + endpoint = new SparqlEndpoint(new URL("http://localhost:8890/sparql")); + cache = new ExtractionDBCache("cache"); + namespace = "http://sw.cyc.com"; + openCyc = new KnowledgeBase(endpoint, null, namespace); + + //LinkedGeoData + endpoint = new SparqlEndpoint(new URL("http://linkedgeodata.org/sparql")); + cache = new ExtractionDBCache("cache"); + namespace = "http://linkedgeodata.org/triplify/"; + linkedGeoData = new KnowledgeBase(endpoint, null, namespace); + } + + @Test + public void testDBpediaWorldFactbook() { + OntologyMatching matcher = new OntologyMatching(dbpedia, worldFactBook); + matcher.start(); + save(matcher.getMappingKB1KB2(), "dbpedia_wfb.html"); + save(matcher.getMappingKB2KB1(), "wfb_dbpedia.html"); + } + + @Test + public void testDBpediaOpenCyc() { + OntologyMatching matcher = new OntologyMatching(dbpedia, openCyc); + matcher.start(); + save("dbpedia_opencyc.html", matcher.getMappingKB1KB2(), dbpedia, openCyc); + save("opencyc_dbpedia.html", matcher.getMappingKB2KB1(), openCyc, dbpedia); + } + + @Test + public void testDBpediaLinkedGeoData() { + OntologyMatching matcher = new OntologyMatching(dbpedia, linkedGeoData); + matcher.start(); + save("dbpedia_lgd.html", matcher.getMappingKB1KB2(), dbpedia, linkedGeoData ); + save("lgd_dbpedia.html", matcher.getMappingKB2KB1(), linkedGeoData, dbpedia); + } + + @Test + public void testSingleClass() { + OntologyMatching matcher = new OntologyMatching(openCyc, dbpedia); + NamedClass nc = new NamedClass("http://sw.opencyc.org/concept/Mx4r4fYeXvbPQdiKtoNafhmOew"); + List<? extends EvaluatedDescription> mapping = matcher.computeMapping(nc, openCyc, dbpedia); + Map<Description, List<? extends EvaluatedDescription>> alignment = new HashMap<Description, List<? extends EvaluatedDescription>>(); + alignment.put(nc, mapping); + System.out.println(OntologyMatching.toHTMLWithLabels(alignment, openCyc, dbpedia)); + } + + private void save(String filename, Map<Description, List<? extends EvaluatedDescription>> mapping, KnowledgeBase source, KnowledgeBase target){ + BufferedWriter out = null; + try { + out = new BufferedWriter(new FileWriter(filename)); + out.write(OntologyMatching.toHTMLWithLabels(mapping, source, target)); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (out != null) { + try { + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + private void save(Map<Description, List<? extends EvaluatedDescription>> mapping, String filename){ + BufferedWriter out = null; + try { + out = new BufferedWriter(new FileWriter(filename)); + out.write(OntologyMatching.toHTML(mapping)); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (out != null) { + try { + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-02-06 18:01:57
|
Revision: 3895 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3895&view=rev Author: lorenz_b Date: 2013-02-06 18:01:42 +0000 (Wed, 06 Feb 2013) Log Message: ----------- Continued matching component. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java 2013-02-06 17:59:21 UTC (rev 3894) +++ trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java 2013-02-06 18:01:42 UTC (rev 3895) @@ -1,7 +1,15 @@ package org.dllearner.scripts; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.text.DecimalFormat; +import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -15,11 +23,15 @@ import org.dllearner.core.AbstractReasonerComponent; import org.dllearner.core.ComponentInitException; import org.dllearner.core.EvaluatedDescription; +import org.dllearner.core.KnowledgeSource; import org.dllearner.core.owl.Description; import org.dllearner.core.owl.Individual; import org.dllearner.core.owl.NamedClass; import org.dllearner.core.owl.ObjectProperty; +import org.dllearner.kb.OWLAPIOntology; import org.dllearner.kb.SparqlEndpointKS; +import org.dllearner.kb.sparql.ConciseBoundedDescriptionGenerator; +import org.dllearner.kb.sparql.ConciseBoundedDescriptionGeneratorImpl; import org.dllearner.kb.sparql.ExtractionDBCache; import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; @@ -29,18 +41,33 @@ import org.dllearner.learningproblems.PosOnlyLP; import org.dllearner.reasoning.FastInstanceChecker; import org.dllearner.reasoning.SPARQLReasoner; +import org.dllearner.utilities.LabelShortFormProvider; import org.dllearner.utilities.datastructures.Datastructures; import org.dllearner.utilities.datastructures.SetManipulation; import org.dllearner.utilities.datastructures.SortedSetTuple; import org.dllearner.utilities.examples.AutomaticNegativeExampleFinderSPARQL2; import org.dllearner.utilities.owl.OWLAPIDescriptionConvertVisitor; +import org.semanticweb.owlapi.apibinding.OWLManager; +import org.semanticweb.owlapi.io.UnparsableOntologyException; +import org.semanticweb.owlapi.model.OWLOntology; +import org.semanticweb.owlapi.model.OWLOntologyCreationException; +import org.semanticweb.owlapi.model.OWLOntologyManager; +import uk.ac.manchester.cs.owl.owlapi.mansyntaxrenderer.ManchesterOWLSyntaxOWLObjectRendererImpl; + +import com.google.common.collect.Sets; +import com.hp.hpl.jena.ontology.OntModel; +import com.hp.hpl.jena.query.ParameterizedSparqlString; import com.hp.hpl.jena.query.Query; +import com.hp.hpl.jena.query.QueryExecutionFactory; import com.hp.hpl.jena.query.QueryFactory; import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.query.Syntax; +import com.hp.hpl.jena.rdf.model.Model; +import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.rdf.model.RDFNode; +import com.hp.hpl.jena.rdf.model.Statement; import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; import com.hp.hpl.jena.vocabulary.OWL; import com.jamonapi.Monitor; @@ -59,6 +86,22 @@ //KB2 private KnowledgeBase kb2; + private Map<Description, List<? extends EvaluatedDescription>> mappingKB1KB2; + private Map<Description, List<? extends EvaluatedDescription>> mappingKB2KB1; + + private boolean posNegLearning = true; + + /** + * The maximum number of positive examples, used for the SPARQL extraction and learning algorithm + */ + private int maxNrOfPositiveExamples = 20; + /** + * The maximum number of negative examples, used for the SPARQL extraction and learning algorithm + */ + private int maxNrOfNegativeExamples = 20; + + private NamedClass currentClass; + public OntologyMatching(KnowledgeBase kb1, KnowledgeBase kb2) { this.kb1 = kb1; this.kb2 = kb2; @@ -71,12 +114,28 @@ } public void start(){ - Map<Description, List<? extends EvaluatedDescription>> mapping1 = computeMapping(kb1, kb2); - printMappingPretty(mapping1); - Map<Description, List<? extends EvaluatedDescription>> mapping2 = computeMapping(kb2, kb1); - printMappingPretty(mapping2); + mappingKB1KB2 = computeAlignment(kb1, kb2); + printMappingPretty(mappingKB1KB2); + mappingKB2KB1 = computeAlignment(kb2, kb1); + printMappingPretty(mappingKB2KB1); } + public Map<Description, List<? extends EvaluatedDescription>> getMappingKB1KB2() { + return mappingKB1KB2; + } + + public Map<Description, List<? extends EvaluatedDescription>> getMappingKB2KB1() { + return mappingKB2KB1; + } + + public void setMaxNrOfPositiveExamples(int maxNrOfPositiveExamples) { + this.maxNrOfPositiveExamples = maxNrOfPositiveExamples; + } + + public void setMaxNrOfNegativeExamples(int maxNrOfNegativeExamples) { + this.maxNrOfNegativeExamples = maxNrOfNegativeExamples; + } + private void printMapping(Map<Description, List<? extends EvaluatedDescription>> mapping){ logger.info("Source Class -> Target Class Expression"); for (Entry<Description, List<? extends org.dllearner.core.EvaluatedDescription>> entry : mapping.entrySet()) { @@ -106,78 +165,139 @@ } List<? extends org.dllearner.core.EvaluatedDescription> value = entry.getValue(); logger.info(OWLAPIDescriptionConvertVisitor.getOWLClassExpression(key)); - for (EvaluatedDescription evaluatedDescription : value) { - logger.info(indention + "\t->\t" + - OWLAPIDescriptionConvertVisitor.getOWLClassExpression(evaluatedDescription.getDescription()) + - "(" + dfPercent.format(evaluatedDescription.getAccuracy()) + ")"); + if(value == null){ + logger.info(indention + "\t->\t ERROR"); + } else { + for (EvaluatedDescription evaluatedDescription : value) { + logger.info(indention + "\t->\t" + + OWLAPIDescriptionConvertVisitor.getOWLClassExpression(evaluatedDescription.getDescription()) + + "(" + dfPercent.format(evaluatedDescription.getAccuracy()) + ")"); + } } + } } - private Map<Description, List<? extends EvaluatedDescription>> computeMapping(KnowledgeBase source, KnowledgeBase target) { + private Map<Description, List<? extends EvaluatedDescription>> computeAlignment(KnowledgeBase source, KnowledgeBase target) { Map<Description, List<? extends EvaluatedDescription>> mapping = new HashMap<Description, List<? extends EvaluatedDescription>>(); // get all classes in SOURCE Set<NamedClass> sourceClasses = getClasses(source); // for each class of KB1 for (NamedClass nc : sourceClasses) { - logger.info(nc); - // get all via owl:sameAs related individuals - SortedSet<Individual> individuals = getRelatedIndividualsNamespaceAware(source, nc, target.getNamespace()); - logger.info(individuals.size()); - //learn concept in KB2 based on the examples - if(individuals.size() >= 3){ - individuals = SetManipulation.fuzzyShrinkInd(individuals, 10); - List<? extends EvaluatedDescription> learnedClassExpressions = learnClassExpression(target, individuals); - mapping.put(nc, learnedClassExpressions); + try { + logger.info(nc); + List<? extends EvaluatedDescription> learnedClassExpressions = computeMapping(nc, source, target); + if(learnedClassExpressions != null){ + mapping.put(nc, learnedClassExpressions); + //break; + } + } catch (Exception e) { + logger.error("Failed for " + nc.getName(), e); } } return mapping; } - private List<? extends EvaluatedDescription> learnClassExpression(KnowledgeBase kb, SortedSet<Individual> posExamples){ - return learnClassExpression(kb, posExamples, false); + public List<? extends EvaluatedDescription> computeMapping(NamedClass sourceClass, KnowledgeBase source, KnowledgeBase target){ + currentClass = sourceClass; + List<? extends EvaluatedDescription> learnedClassExpressions = null; + // get all via owl:sameAs related individuals + SortedSet<Individual> relatedIndividuals = getRelatedIndividualsNamespaceAware(source, sourceClass, target.getNamespace()); + logger.info("#Resources in target KB: " + relatedIndividuals.size()); + //learn concept in KB2 based on the examples + if(relatedIndividuals.size() >= 3){ + learnedClassExpressions = learnClassExpressions(target, relatedIndividuals, posNegLearning); + } + return learnedClassExpressions; } - private List<? extends EvaluatedDescription> learnClassExpression(KnowledgeBase kb, SortedSet<Individual> positiveExamples, boolean posNeg){ + private List<? extends EvaluatedDescription> learnClassExpressions(KnowledgeBase kb, SortedSet<Individual> posExamples){ + return learnClassExpressions(kb, posExamples, false); + } + + private List<? extends EvaluatedDescription> learnClassExpressions(KnowledgeBase kb, SortedSet<Individual> positiveExamples, boolean posNeg){ + Model fullFragment = null; try { + + //get a sample of the positive examples + SortedSet<Individual> positiveExamplesSample = SetManipulation.stableShrinkInd(positiveExamples, maxNrOfPositiveExamples); + + //starting from the positive examples, we first extract the fragment for them + logger.info("Extracting fragment for positive examples..."); + Model positiveFragment = getFragment(positiveExamplesSample, kb); + logger.info("...done."); + + //based on the fragment we try to find some good negative examples SortedSet<Individual> negativeExamples = new TreeSet<Individual>(); if(posNeg){ - //find negative examples mon.start(); + //find the classes the positive examples are asserted to + Set<NamedClass> classes = new HashSet<NamedClass>(); + ParameterizedSparqlString template = new ParameterizedSparqlString("SELECT ?type WHERE {?s a ?type.}"); + for(Individual pos : positiveExamples){ + template.clearParams(); + template.setIri("s", pos.getName()); + ResultSet rs = QueryExecutionFactory.create(template.asQuery(), positiveFragment).execSelect(); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + if(qs.get("type").isURIResource()){ + classes.add(new NamedClass(qs.getResource("type").getURI())); + } + } + } + System.out.println(classes); + + //get the negative examples + for(NamedClass nc : classes){ + Set<String> parallelClasses = kb.getSparqlHelper().getParallelClasses(nc.getName(), 5); + for(String parallelClass : parallelClasses){ + negativeExamples.addAll(kb.getReasoner().getIndividuals(new NamedClass(parallelClass), 5)); + negativeExamples.removeAll(positiveExamples); + } + } + AutomaticNegativeExampleFinderSPARQL2 finder = new AutomaticNegativeExampleFinderSPARQL2(kb.getEndpoint()); //TODO find negative examples mon.stop(); logger.info("Found " + negativeExamples.size() + " negative examples in " + mon.getLastValue() + "ms."); } - SortedSetTuple<Individual> examples = new SortedSetTuple<Individual>(positiveExamples, negativeExamples); + //get a sample of the positive examples + SortedSet<Individual> negativeExamplesSample = SetManipulation.stableShrinkInd(negativeExamples, maxNrOfNegativeExamples); - SparqlKnowledgeSource ks = new SparqlKnowledgeSource(); - ks.setInstances(Datastructures.individualSetToStringSet(examples.getCompleteSet())); - ks.setUrl(kb.getEndpoint().getURL()); - ks.setDefaultGraphURIs(new TreeSet<String>(kb.getEndpoint().getDefaultGraphURIs())); - ks.setUseLits(false); - ks.setUseCacheDatabase(true); - ks.setCacheDir("cache"); - ks.setRecursionDepth(2); - ks.setCloseAfterRecursion(true); - ks.setDissolveBlankNodes(false); - ks.setSaveExtractedFragment(false); - ks.init(); + logger.info("#Positive examples: " + positiveExamplesSample.size()); + logger.info("#Negative examples: " + negativeExamplesSample.size()); + //create fragment for negative examples + logger.info("Extracting fragment for negative examples..."); + Model negativeFragment = getFragment(negativeExamplesSample, kb); + logger.info("...done."); + + //create fragment consisting of both + fullFragment = ModelFactory.createDefaultModel(); + fullFragment.add(positiveFragment); + fullFragment.add(negativeFragment); + + //here is the most difficult task, i.e. find a 'good' fragment of the KB on which we can learn + KnowledgeSource ks = convert(fullFragment); + + //initialize the reasoner AbstractReasonerComponent rc = new FastInstanceChecker(ks); rc.init(); + //initialize the learning problem AbstractLearningProblem lp; if(posNeg){ - lp = new PosNegLPStandard(rc, positiveExamples, negativeExamples); + lp = new PosNegLPStandard(rc, positiveExamplesSample, negativeExamplesSample); } else { - lp = new PosOnlyLP(rc, positiveExamples); - + lp = new PosOnlyLP(rc, positiveExamplesSample); } lp.init(); + //apply the learning algorithm + logger.info("Running learning algorithm..."); CELOE la = new CELOE(lp, rc); la.setMaxExecutionTimeInSeconds(10); la.setNoisePercentage(25); @@ -189,10 +309,104 @@ return la.getCurrentlyBestEvaluatedDescriptions(10); } catch (ComponentInitException e) { e.printStackTrace(); + try { + new File("errors").mkdir(); + fullFragment.write(new FileOutputStream("errors/" + prettyPrint(currentClass) + ".ttl"), "TURTLE", null); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } } return null; } + private KnowledgeSource convert(Model model){ + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + model.write(baos, "TURTLE", null); + OWLOntologyManager man = OWLManager.createOWLOntologyManager(); + OWLOntology ontology = man.loadOntologyFromOntologyDocument(new ByteArrayInputStream(baos.toByteArray())); + return new OWLAPIOntology(ontology); + } catch (OWLOntologyCreationException e) { + e.printStackTrace(); + try { + model.write(new FileOutputStream(prettyPrint(currentClass) + "_conversion_error.ttl"), "TURTLE", null); + } catch (FileNotFoundException e1) { + e.printStackTrace(); + } + } + return null; + } + + /** + * Computes a fragment containing hopefully useful information about the resources. + * @param ind + */ + private KnowledgeSource getFragmentLegacy(SortedSet<Individual> positiveExamples, SortedSet<Individual> negativeExamples, SparqlEndpoint endpoint){ + SortedSetTuple<Individual> examples = new SortedSetTuple<Individual>(positiveExamples, negativeExamples); + SparqlKnowledgeSource ks = new SparqlKnowledgeSource(); + ks.setInstances(Datastructures.individualSetToStringSet(examples.getCompleteSet())); + ks.setUrl(endpoint.getURL()); + ks.setDefaultGraphURIs(new TreeSet<String>(endpoint.getDefaultGraphURIs())); + ks.setUseLits(false); + ks.setUseCacheDatabase(true); + ks.setCacheDir("cache"); + ks.setRecursionDepth(2); + ks.setCloseAfterRecursion(true); + ks.setDissolveBlankNodes(false); + ks.setSaveExtractedFragment(false); + ks.init(); + return ks; + } + + /** + * Computes a fragment containing hopefully useful information about the resources. + * @param ind + */ + private Model getFragment(SortedSet<Individual> positiveExamples, SortedSet<Individual> negativeExamples, KnowledgeBase kb){ + OntModel fullFragment = ModelFactory.createOntologyModel(); + int i = 1; + int size = Sets.union(positiveExamples, negativeExamples).size(); + for(Individual ind : Sets.union(positiveExamples, negativeExamples)){ + logger.info(i++ + "/" + size); + fullFragment.add(getFragment(ind, kb)); + } + //filter out triples with String literals, as there often occur are some syntax errors and they are not relevant for learning + List<Statement> statementsToRemove = new ArrayList<Statement>(); + for(Iterator<Statement> iter = fullFragment.listStatements().toList().iterator(); iter.hasNext();){ + Statement st = iter.next(); + RDFNode object = st.getObject(); + if(object.isLiteral()){ + statementsToRemove.add(st); +// Literal lit = object.asLiteral(); +// if(lit.getDatatype() == null || lit.getDatatype().equals(XSD.STRING)){ +// iter.remove(); +// } + } + } + fullFragment.remove(statementsToRemove); + return fullFragment; + } + + /** + * Computes a fragment containing hopefully useful information about the resources. + * @param ind + */ + private Model getFragment(SortedSet<Individual> examples, KnowledgeBase kb){ + return getFragment(examples, new TreeSet<Individual>(), kb); + } + + /** + * Computes a fragment containing hopefully useful information about the resource. + * @param ind + */ + private Model getFragment(Individual ind, KnowledgeBase kb){ + logger.debug("Loading fragment for " + ind.getName()); + ConciseBoundedDescriptionGenerator cbdGen = new ConciseBoundedDescriptionGeneratorImpl(kb.getEndpoint(), kb.getCache()); + Model cbd = cbdGen.getConciseBoundedDescription(ind.getName(), 2); + logger.debug("Got " + cbd.size() + " triples."); + return cbd; + } + private Set<NamedClass> getClasses(KnowledgeBase kb){ Set<NamedClass> classes = kb.getSparqlHelper().getAllClasses(); //fallback: check for ?s a ?type where ?type is not asserted to owl:Class @@ -282,6 +496,84 @@ return rs; } + private String prettyPrint(Description desc){ + return OWLAPIDescriptionConvertVisitor.getOWLClassExpression(desc).toString(); + } + + public static String toHTML(Map<Description, List<? extends EvaluatedDescription>> mapping){ + StringBuilder sb = new StringBuilder(); + DecimalFormat dfPercent = new DecimalFormat("0.00%"); + sb.append("<html>\n"); + sb.append("<table>\n"); + sb.append("<thead><tr><th>Source Class</th><th>Target Class Expressions</th></tr></thead>\n"); + sb.append("<tbody>\n"); + + + for (Entry<Description, List<? extends org.dllearner.core.EvaluatedDescription>> entry : mapping.entrySet()) { + Description key = entry.getKey(); + List<? extends org.dllearner.core.EvaluatedDescription> value = entry.getValue(); + if(value == null){ + sb.append("<tr><th>" + OWLAPIDescriptionConvertVisitor.getOWLClassExpression(key) + "</th>\n"); + sb.append("<tr><td>ERROR</td></tr>\n"); + } else { + sb.append("<tr><th rowspan=\"" + value.size()+1 + "\">" + OWLAPIDescriptionConvertVisitor.getOWLClassExpression(key) + "</th>\n"); + for (EvaluatedDescription evaluatedDescription : value) { + sb.append("<tr><td>" + + OWLAPIDescriptionConvertVisitor.getOWLClassExpression(evaluatedDescription.getDescription()) + "(" + dfPercent.format(evaluatedDescription.getAccuracy()) + ")" + + "</td></tr>\n"); + } + } + } + + sb.append("</tbody>\n"); + sb.append("</table>\n"); + sb.append("</html>\n"); + + return sb.toString(); + } + + public static String toHTMLWithLabels(Map<Description, List<? extends EvaluatedDescription>> mapping, KnowledgeBase source, KnowledgeBase target){ + ManchesterOWLSyntaxOWLObjectRendererImpl sourceRenderer = new ManchesterOWLSyntaxOWLObjectRendererImpl(); + sourceRenderer.setShortFormProvider(new LabelShortFormProvider(source.getEndpoint(), source.getCache())); + ManchesterOWLSyntaxOWLObjectRendererImpl targetRenderer = new ManchesterOWLSyntaxOWLObjectRendererImpl(); + targetRenderer.setShortFormProvider(new LabelShortFormProvider(target.getEndpoint(), target.getCache())); + + StringBuilder sb = new StringBuilder(); + DecimalFormat dfPercent = new DecimalFormat("0.00%"); + sb.append("<html>\n"); + sb.append("<table>\n"); + sb.append("<thead><tr><th>Source Class</th><th>Target Class Expressions</th><th>Accuracy</th></tr></thead>\n"); + sb.append("<tbody>\n"); + + + for (Entry<Description, List<? extends org.dllearner.core.EvaluatedDescription>> entry : mapping.entrySet()) { + Description key = entry.getKey(); + String renderedKey = sourceRenderer.render(OWLAPIDescriptionConvertVisitor.getOWLClassExpression(key)); + List<? extends org.dllearner.core.EvaluatedDescription> value = entry.getValue(); + if(value == null){ + sb.append("<tr><th>" + renderedKey + "</th>\n"); + sb.append("<tr><td>ERROR</td><td></td></tr>\n"); + } else { + sb.append("<tr><th rowspan=\"" + (value.size()+1) + "\">" + renderedKey + "</th>\n"); + for (EvaluatedDescription evaluatedDescription : value) { + sb.append("<tr>"); + String renderedDesc = targetRenderer.render(OWLAPIDescriptionConvertVisitor.getOWLClassExpression(evaluatedDescription.getDescription())); + sb.append("<td>" + renderedDesc + "</td>"); + sb.append("<td>" + dfPercent.format(evaluatedDescription.getAccuracy()) + "</td>"); + sb.append("</tr>\n"); + } + } + } + + sb.append("</tbody>\n"); + sb.append("</table>\n"); + sb.append("</html>\n"); + + return sb.toString(); + } + + + public static class KnowledgeBase{ private SparqlEndpoint endpoint; private SPARQLReasoner reasoner; @@ -294,7 +586,7 @@ this.namespace = namespace; this.cache = cache; - this.reasoner = new SPARQLReasoner(new SparqlEndpointKS(endpoint)); + this.reasoner = new SPARQLReasoner(new SparqlEndpointKS(endpoint), cache); this.sparqlHelper = new SPARQLTasks(endpoint); } Modified: trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java 2013-02-06 17:59:21 UTC (rev 3894) +++ trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java 2013-02-06 18:01:42 UTC (rev 3895) @@ -1,11 +1,20 @@ package org.dllearner.scripts; +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; import java.net.URL; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; +import org.dllearner.core.EvaluatedDescription; +import org.dllearner.core.owl.Description; +import org.dllearner.core.owl.NamedClass; import org.dllearner.kb.extraction.ExtractionAlgorithm; import org.dllearner.kb.sparql.ExtractionDBCache; import org.dllearner.kb.sparql.SparqlEndpoint; @@ -34,12 +43,13 @@ Logger.getLogger(org.dllearner.kb.extraction.Manager.class).setLevel(Level.WARN); Logger.getRootLogger().removeAllAppenders(); Logger.getRootLogger().addAppender(new ConsoleAppender(new PatternLayout("%m%n"))); +// Logger.getRootLogger().setLevel(Level.DEBUG); //DBpedia SparqlEndpoint endpoint = SparqlEndpoint.getEndpointDBpedia(); ExtractionDBCache cache = new ExtractionDBCache("cache"); String namespace = "http://dbpedia.org/resource/"; - dbpedia = new KnowledgeBase(endpoint, cache, namespace); + dbpedia = new KnowledgeBase(endpoint, null, namespace); //World Factbook //TODO problem with World Factbook is that old FU Berlin server is useless because of bugs and current version @@ -55,31 +65,83 @@ endpoint = new SparqlEndpoint(new URL("http://localhost:8890/sparql")); cache = new ExtractionDBCache("cache"); namespace = "http://sw.cyc.com"; - openCyc = new KnowledgeBase(endpoint, cache, namespace); + openCyc = new KnowledgeBase(endpoint, null, namespace); //LinkedGeoData endpoint = new SparqlEndpoint(new URL("http://linkedgeodata.org/sparql")); cache = new ExtractionDBCache("cache"); namespace = "http://linkedgeodata.org/triplify/"; - linkedGeoData = new KnowledgeBase(endpoint, cache, namespace); + linkedGeoData = new KnowledgeBase(endpoint, null, namespace); } @Test public void testDBpediaWorldFactbook() { OntologyMatching matcher = new OntologyMatching(dbpedia, worldFactBook); matcher.start(); + save(matcher.getMappingKB1KB2(), "dbpedia_wfb.html"); + save(matcher.getMappingKB2KB1(), "wfb_dbpedia.html"); } @Test public void testDBpediaOpenCyc() { OntologyMatching matcher = new OntologyMatching(dbpedia, openCyc); matcher.start(); + save("dbpedia_opencyc.html", matcher.getMappingKB1KB2(), dbpedia, openCyc); + save("opencyc_dbpedia.html", matcher.getMappingKB2KB1(), openCyc, dbpedia); } @Test public void testDBpediaLinkedGeoData() { OntologyMatching matcher = new OntologyMatching(dbpedia, linkedGeoData); matcher.start(); + save("dbpedia_lgd.html", matcher.getMappingKB1KB2(), dbpedia, linkedGeoData ); + save("lgd_dbpedia.html", matcher.getMappingKB2KB1(), linkedGeoData, dbpedia); } + + @Test + public void testSingleClass() { + OntologyMatching matcher = new OntologyMatching(openCyc, dbpedia); + NamedClass nc = new NamedClass("http://sw.opencyc.org/concept/Mx4r4fYeXvbPQdiKtoNafhmOew"); + List<? extends EvaluatedDescription> mapping = matcher.computeMapping(nc, openCyc, dbpedia); + Map<Description, List<? extends EvaluatedDescription>> alignment = new HashMap<Description, List<? extends EvaluatedDescription>>(); + alignment.put(nc, mapping); + System.out.println(OntologyMatching.toHTMLWithLabels(alignment, openCyc, dbpedia)); + } + + private void save(String filename, Map<Description, List<? extends EvaluatedDescription>> mapping, KnowledgeBase source, KnowledgeBase target){ + BufferedWriter out = null; + try { + out = new BufferedWriter(new FileWriter(filename)); + out.write(OntologyMatching.toHTMLWithLabels(mapping, source, target)); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (out != null) { + try { + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + private void save(Map<Description, List<? extends EvaluatedDescription>> mapping, String filename){ + BufferedWriter out = null; + try { + out = new BufferedWriter(new FileWriter(filename)); + out.write(OntologyMatching.toHTML(mapping)); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (out != null) { + try { + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-02-06 17:59:29
|
Revision: 3894 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3894&view=rev Author: lorenz_b Date: 2013-02-06 17:59:21 +0000 (Wed, 06 Feb 2013) Log Message: ----------- Added short form provider for IRIs based on labels in KB. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGeneratorImpl.java trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/kb/sparql/QueryEngineHTTP.java trunk/components-core/src/main/java/org/dllearner/utilities/LabelShortFormProvider.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-01-30 09:55:24 UTC (rev 3893) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/ConciseBoundedDescriptionGeneratorImpl.java 2013-02-06 17:59:21 UTC (rev 3894) @@ -11,7 +11,7 @@ import com.hp.hpl.jena.query.QueryExecutionFactory; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; -import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; +//import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; public class ConciseBoundedDescriptionGeneratorImpl implements ConciseBoundedDescriptionGenerator{ @@ -166,7 +166,7 @@ } for (String ngu : endpoint.getNamedGraphURIs()) { queryExecution.addNamedGraph(ngu); - } + } model = queryExecution.execConstruct(); } else { model = cache.executeConstructQuery(endpoint, query); Added: trunk/components-core/src/main/java/org/dllearner/kb/sparql/QueryEngineHTTP.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/QueryEngineHTTP.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/QueryEngineHTTP.java 2013-02-06 17:59:21 UTC (rev 3894) @@ -0,0 +1,535 @@ +package org.dllearner.kb.sparql; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import org.openjena.atlas.io.IO; +import org.openjena.riot.Lang; +import org.openjena.riot.RiotReader; +import org.openjena.riot.WebContent; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.hp.hpl.jena.graph.Triple; +import com.hp.hpl.jena.query.ARQ; +import com.hp.hpl.jena.query.Dataset; +import com.hp.hpl.jena.query.Query; +import com.hp.hpl.jena.query.QueryException; +import com.hp.hpl.jena.query.QueryExecException; +import com.hp.hpl.jena.query.QueryExecution; +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.query.ResultSet; +import com.hp.hpl.jena.query.ResultSetFactory; +import com.hp.hpl.jena.rdf.model.Model; +import com.hp.hpl.jena.sparql.ARQException; +import com.hp.hpl.jena.sparql.engine.http.HttpParams; +import com.hp.hpl.jena.sparql.engine.http.HttpQuery; +import com.hp.hpl.jena.sparql.engine.http.Params; +import com.hp.hpl.jena.sparql.graph.GraphFactory; +import com.hp.hpl.jena.sparql.resultset.CSVInput; +import com.hp.hpl.jena.sparql.resultset.JSONInput; +import com.hp.hpl.jena.sparql.resultset.XMLInput; +import com.hp.hpl.jena.sparql.util.Context; +import com.hp.hpl.jena.util.FileManager; + + +public class QueryEngineHTTP implements QueryExecution +{ + private static Logger log = LoggerFactory.getLogger(QueryEngineHTTP.class) ; + + public static final String QUERY_MIME_TYPE = WebContent.contentTypeSPARQLQuery ; // "application/sparql-query" ; + private final Query query ; + private final String queryString ; + private final String service ; + private final Context context ; + + //Params + Params params = null ; + + // Protocol + List<String> defaultGraphURIs = new ArrayList<String>() ; + List<String> namedGraphURIs = new ArrayList<String>() ; + private String user = null ; + private char[] password = null ; + + private boolean finished = false ; + + //Timeouts + private long connectTimeout = 0; + private TimeUnit connectTimeoutUnit = TimeUnit.MILLISECONDS; + private long readTimeout = 0; + private TimeUnit readTimeoutUnit = TimeUnit.MILLISECONDS; + + //Compression Support + private boolean allowGZip = true ; + private boolean allowDeflate = true; + + //Content Types + private String selectContentType = WebContent.contentTypeResultsXML; + private String askContentType = WebContent.contentTypeResultsXML; + private String modelContentType = WebContent.contentTypeRDFXML; + public static String[] supportedSelectContentTypes = new String [] + { + WebContent.contentTypeResultsXML, + WebContent.contentTypeResultsJSON, + WebContent.contentTypeTextTSV, + WebContent.contentTypeTextCSV + }; + public static String[] supportedAskContentTypes = new String [] + { + WebContent.contentTypeResultsXML, + WebContent.contentTypeJSON + }; + + // Releasing HTTP input streams is important. We remember this for SELECT, + // and will close when the engine is closed + private InputStream retainedConnection = null; + + public QueryEngineHTTP(String serviceURI, Query query) + { + this(serviceURI, query, query.toString()) ; + } + + public QueryEngineHTTP(String serviceURI, String queryString) + { + this(serviceURI, null, queryString) ; + } + + private QueryEngineHTTP(String serviceURI, Query query, String queryString) + { + this.query = query ; + this.queryString = queryString ; + this.service = serviceURI ; + // Copy the global context to freeze it. + this.context = new Context(ARQ.getContext()) ; + } + +// public void setParams(Params params) +// { this.params = params ; } + + // Meaning-less + @Override + public void setFileManager(FileManager fm) + { throw new UnsupportedOperationException("FileManagers do not apply to remote query execution") ; } + + @Override + public void setInitialBinding(QuerySolution binding) + { throw new UnsupportedOperationException("Initial bindings not supported for remote queries, consider using a ParameterizedSparqlString to prepare a query for remote execution") ; } + + public void setInitialBindings(ResultSet table) + { throw new UnsupportedOperationException("Initial bindings not supported for remote queries, consider using a ParameterizedSparqlString to prepare a query for remote execution") ; } + + /** @param defaultGraphURIs The defaultGraphURIs to set. */ + public void setDefaultGraphURIs(List<String> defaultGraphURIs) + { + this.defaultGraphURIs = defaultGraphURIs ; + } + + /** @param namedGraphURIs The namedGraphURIs to set. */ + public void setNamedGraphURIs(List<String> namedGraphURIs) + { + this.namedGraphURIs = namedGraphURIs ; + } + + /** + * Sets whether the HTTP request will specify Accept-Encoding: gzip + */ + public void setAllowGZip(boolean allowed) + { + allowGZip = allowed; + } + + /** + * Sets whether the HTTP requests will specify Accept-Encoding: deflate + */ + public void setAllowDeflate(boolean allowed) + { + allowDeflate = allowed; + } + + public void addParam(String field, String value) + { + if ( params == null ) + params = new Params() ; + params.addParam(field, value) ; + } + + /** @param defaultGraph The defaultGraph to add. */ + public void addDefaultGraph(String defaultGraph) + { + if ( defaultGraphURIs == null ) + defaultGraphURIs = new ArrayList<String>() ; + defaultGraphURIs.add(defaultGraph) ; + } + + /** @param name The URI to add. */ + public void addNamedGraph(String name) + { + if ( namedGraphURIs == null ) + namedGraphURIs = new ArrayList<String>() ; + namedGraphURIs.add(name) ; + } + + /** Set user and password for basic authentication. + * After the request is made (one of the exec calls), the application + * can overwrite the password array to remove details of the secret. + * @param user + * @param password + */ + public void setBasicAuthentication(String user, char[] password) + { + this.user = user ; + this.password = password ; + } + + @Override + public ResultSet execSelect() + { + HttpQuery httpQuery = makeHttpQuery() ; + httpQuery.setAccept(selectContentType) ; + InputStream in = httpQuery.exec() ; + + if ( false ) + { + byte b[] = IO.readWholeFile(in) ; + String str = new String(b) ; + System.out.println(str) ; + in = new ByteArrayInputStream(b) ; + } + + retainedConnection = in; // This will be closed on close() + + //TODO: Find a way to auto-detect how to create the ResultSet based on the content type in use + + //Don't assume the endpoint actually gives back the content type we asked for + String actualContentType = httpQuery.getContentType(); + + //If the server fails to return a Content-Type then we will assume + //the server returned the type we asked for + if (actualContentType == null || actualContentType.equals("")) + { + actualContentType = selectContentType; + } + + if (actualContentType.equals(WebContent.contentTypeResultsXML)) + return ResultSetFactory.fromXML(in); + if (actualContentType.equals(WebContent.contentTypeResultsJSON)) + return ResultSetFactory.fromJSON(in); + if (actualContentType.equals(WebContent.contentTypeTextTSV)) + return ResultSetFactory.fromTSV(in); + if (actualContentType.equals(WebContent.contentTypeTextCSV)) + return CSVInput.fromCSV(in); + throw new QueryException("Endpoint returned Content-Type: " + actualContentType + " which is not currently supported for SELECT queries"); + } + + @Override + public Model execConstruct() { return execConstruct(GraphFactory.makeJenaDefaultModel()) ; } + + @Override + public Model execConstruct(Model model) { return execModel(model) ; } + + @Override + public Iterator<Triple> execConstructTriples() { return execTriples() ; } + + @Override + public Model execDescribe() { return execDescribe(GraphFactory.makeJenaDefaultModel()) ; } + + @Override + public Model execDescribe(Model model) { return execModel(model) ; } + + @Override + public Iterator<Triple> execDescribeTriples() { return execTriples() ; } + + private Model execModel(Model model) + { + HttpQuery httpQuery = makeHttpQuery() ; + httpQuery.setAccept(WebContent.contentTypeNTriples) ; + InputStream in = httpQuery.exec() ; + + //Don't assume the endpoint actually gives back the content type we asked for + String actualContentType = httpQuery.getContentType(); + + //If the server fails to return a Content-Type then we will assume + //the server returned the type we asked for + if (actualContentType == null || actualContentType.equals("")) + { + actualContentType = modelContentType; + } + + //Try to select language appropriately here based on the model content type + Lang lang = WebContent.contentTypeToLang(actualContentType); + if (!lang.isTriples()) throw new QueryException("Endpoint returned Content Type: " + actualContentType + " which is not a valid RDF Graph syntax"); + model.read(in, null, "N-TRIPLES") ; + + return model ; + } + + private Iterator<Triple> execTriples() + { + HttpQuery httpQuery = makeHttpQuery() ; + httpQuery.setAccept(modelContentType) ; + InputStream in = httpQuery.exec() ; + + //Don't assume the endpoint actually gives back the content type we asked for + String actualContentType = httpQuery.getContentType(); + + //If the server fails to return a Content-Type then we will assume + //the server returned the type we asked for + if (actualContentType == null || actualContentType.equals("")) + { + actualContentType = modelContentType; + } + + //Try to select language appropriately here based on the model content type + Lang lang = WebContent.contentTypeToLang(actualContentType); + if (!lang.isTriples()) throw new QueryException("Endpoint returned Content Type: " + actualContentType + " which is not a valid RDF Graph syntax"); + + return RiotReader.createIteratorTriples(in, lang, null); + } + + @Override + public boolean execAsk() + { + HttpQuery httpQuery = makeHttpQuery() ; + httpQuery.setAccept(askContentType) ; + InputStream in = httpQuery.exec() ; + + try { + //Don't assume the endpoint actually gives back the content type we asked for + String actualContentType = httpQuery.getContentType(); + + //If the server fails to return a Content-Type then we will assume + //the server returned the type we asked for + if (actualContentType == null || actualContentType.equals("")) + { + actualContentType = askContentType; + } + + //Parse the result appropriately depending on the selected content type + if (askContentType.equals(WebContent.contentTypeResultsXML)) + return XMLInput.booleanFromXML(in) ; + if (askContentType.equals(WebContent.contentTypeResultsJSON)) + return JSONInput.booleanFromJSON(in) ; + throw new QueryException("Endpoint returned Content-Type: " + actualContentType + " which is not currently supported for ASK queries"); + } finally { + // Ensure connection is released + try { in.close(); } + catch (java.io.IOException e) { log.warn("Failed to close connection", e); } + } + } + + @Override + public Context getContext() { return context ; } + + @Override public Dataset getDataset() { return null ; } + + // This may be null - if we were created form a query string, + // we don't guarantee to parse it so we let through non-SPARQL + // extensions to the far end. + @Override public Query getQuery() { return query ; } + + @Override + public void setTimeout(long readTimeout) + { + this.readTimeout = readTimeout; + this.readTimeoutUnit = TimeUnit.MILLISECONDS; + } + + @Override + public void setTimeout(long readTimeout, long connectTimeout) + { + this.readTimeout = readTimeout; + this.readTimeoutUnit = TimeUnit.MILLISECONDS; + this.connectTimeout = connectTimeout; + this.connectTimeoutUnit = TimeUnit.MILLISECONDS; + } + + + @Override + public void setTimeout(long readTimeout, TimeUnit timeoutUnits) + { + this.readTimeout = readTimeout; + this.readTimeoutUnit = timeoutUnits; + } + + @Override + public void setTimeout(long timeout1, TimeUnit timeUnit1, long timeout2, TimeUnit timeUnit2) + { + this.readTimeout = timeout1; + this.readTimeoutUnit = timeUnit1; + this.connectTimeout = timeout2; + this.connectTimeoutUnit = timeUnit2; + } + + private HttpQuery makeHttpQuery() + { + // Also need to tie to ResultSet returned which is streamed back if StAX. + if ( finished ) + throw new ARQException("HTTP execution already closed") ; + + HttpQuery httpQuery = new HttpQuery(service) ; + httpQuery.merge(getServiceParams(service, context)) ; + httpQuery.addParam(HttpParams.pQuery, queryString ); + + for ( Iterator<String> iter = defaultGraphURIs.iterator() ; iter.hasNext() ; ) + { + String dft = iter.next() ; + httpQuery.addParam(HttpParams.pDefaultGraph, dft) ; + } + for ( Iterator<String> iter = namedGraphURIs.iterator() ; iter.hasNext() ; ) + { + String name = iter.next() ; + httpQuery.addParam(HttpParams.pNamedGraph, name) ; + } + + if ( params != null ) + httpQuery.merge(params) ; + + if (allowGZip) + httpQuery.setAllowGZip(true); + + if (allowDeflate) + httpQuery.setAllowDeflate(true); + + httpQuery.setBasicAuthentication(user, password) ; + + //Apply timeouts + if (connectTimeout > 0) + { + httpQuery.setConnectTimeout((int)connectTimeoutUnit.toMillis(connectTimeout)); + } + if (readTimeout > 0) + { + httpQuery.setReadTimeout((int)readTimeoutUnit.toMillis(readTimeout)); + } + + return httpQuery ; + } + + + // This is to allow setting additional/optional query parameters on a per SERVICE level, see: JENA-195 + protected static Params getServiceParams(String serviceURI, Context context) throws QueryExecException + { + Params params = new Params(); + @SuppressWarnings("unchecked") + Map<String, Map<String,List<String>>> serviceParams = (Map<String, Map<String,List<String>>>)context.get(ARQ.serviceParams) ; + if ( serviceParams != null ) + { + Map<String,List<String>> paramsMap = serviceParams.get(serviceURI) ; + if ( paramsMap != null ) + { + for (String param : paramsMap.keySet()) + { + if ( HttpParams.pQuery.equals(param) ) + throw new QueryExecException("ARQ serviceParams overrides the 'query' SPARQL protocol parameter") ; + + List<String> values = paramsMap.get(param) ; + for (String value : values) + params.addParam(param, value) ; + } + } + } + return params; + } + + public void cancel() { finished = true ; } + + @Override + public void abort() { try { close() ; } catch (Exception ex) {} } + + @Override + public void close() { + finished = false ; + if (retainedConnection != null) { + try { retainedConnection.close(); } + catch (java.io.IOException e) { log.warn("Failed to close connection", e); } + finally { retainedConnection = null; } + } + } + +// public boolean isActive() { return false ; } + + @Override + public String toString() + { + HttpQuery httpQuery = makeHttpQuery() ; + return "GET "+httpQuery.toString() ; + } + + /** + * Sets the Content Type for SELECT queries provided that the format is supported + * @param contentType + */ + public void setSelectContentType(String contentType) + { + boolean ok = false; + for (String supportedType : supportedSelectContentTypes) + { + if (supportedType.equals(contentType)) + { + ok = true; + break; + } + } + if (!ok) throw new IllegalArgumentException("Given Content Type '" + contentType + "' is not a supported SELECT results format"); + selectContentType = contentType; + } + + /** + * Sets the Content Type for ASK queries provided that the format is supported + * @param contentType + */ + public void setAskContentType(String contentType) + { + boolean ok = false; + for (String supportedType : supportedAskContentTypes) + { + if (supportedType.equals(contentType)) + { + ok = true; + break; + } + } + if (!ok) throw new IllegalArgumentException("Given Content Type '" + contentType + "' is not a supported ASK results format"); + askContentType = contentType; + } + + /** + * Sets the Content Type for CONSTRUCT/DESCRIBE queries provided that the format is supported + * @param contentType + */ + public void setModelContentType(String contentType) + { + //Check that this is a valid setting + Lang lang = WebContent.contentTypeToLang(contentType); + if (lang == null) throw new IllegalArgumentException("Given Content Type '" + contentType + "' is not supported by RIOT"); + if (!lang.isTriples()) throw new IllegalArgumentException("Given Content Type '" + contentType + " is not a RDF Graph format"); + + modelContentType = contentType; + } +} + Modified: trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-01-30 09:55:24 UTC (rev 3893) +++ trunk/components-core/src/main/java/org/dllearner/reasoning/SPARQLReasoner.java 2013-02-06 17:59:21 UTC (rev 3894) @@ -1107,7 +1107,7 @@ logger.debug("Sending query \n {}", query); ResultSet rs = null; if(ks.isRemote()){ - if(useCache){ + if(useCache && cache != null){ rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(ks.getEndpoint(), query)); } else { QueryEngineHTTP queryExecution = new QueryEngineHTTP(ks.getEndpoint().getURL().toString(), query); Added: trunk/components-core/src/main/java/org/dllearner/utilities/LabelShortFormProvider.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/LabelShortFormProvider.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/utilities/LabelShortFormProvider.java 2013-02-06 17:59:21 UTC (rev 3894) @@ -0,0 +1,76 @@ +package org.dllearner.utilities; + +import org.dllearner.kb.sparql.ExtractionDBCache; +import org.dllearner.kb.sparql.SparqlEndpoint; +import org.dllearner.kb.sparql.SparqlQuery; +import org.semanticweb.owlapi.model.OWLEntity; +import org.semanticweb.owlapi.util.ShortFormProvider; +import org.semanticweb.owlapi.util.SimpleIRIShortFormProvider; + +import com.hp.hpl.jena.query.ParameterizedSparqlString; +import com.hp.hpl.jena.query.Query; +import com.hp.hpl.jena.query.ResultSet; +import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; +import com.hp.hpl.jena.vocabulary.RDFS; + +public class LabelShortFormProvider implements ShortFormProvider{ + + private final ParameterizedSparqlString queryTemplate = new ParameterizedSparqlString( + "SELECT ?label WHERE {?entity ?labelProperty ?label. FILTER(LANGMATCHES(LANG(?label),'en'))} LIMIT 1"); + private String labelProperty = RDFS.label.getURI(); + + private final SimpleIRIShortFormProvider fallback = new SimpleIRIShortFormProvider(); + + private ExtractionDBCache cache; + private SparqlEndpoint endpoint; + + public LabelShortFormProvider(SparqlEndpoint endpoint) { + this.endpoint = endpoint; + } + + public LabelShortFormProvider(SparqlEndpoint endpoint, ExtractionDBCache cache) { + this.endpoint = endpoint; + this.cache = cache; + } + + public void setLabelProperty(String labelProperty) { + this.labelProperty = labelProperty; + } + + @Override + public void dispose() { + } + + @Override + public String getShortForm(OWLEntity entity) { + queryTemplate.clearParams(); + queryTemplate.setIri("entity", entity.toStringID()); + queryTemplate.setIri("labelProperty", labelProperty); + Query query = queryTemplate.asQuery(); + ResultSet rs = executeSelect(query); + String label = null; + if(rs.hasNext()){ + label = rs.next().getLiteral("label").asLiteral().getLexicalForm(); + } else { + label = fallback.getShortForm(entity.getIRI()); + } + return label; + } + + protected ResultSet executeSelect(Query query){ + ResultSet rs = null; + if(cache != null){ + rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query.toString())); + } else { + QueryEngineHTTP qe = new QueryEngineHTTP(endpoint.getURL().toString(), query); + for(String uri : endpoint.getDefaultGraphURIs()){ + qe.addDefaultGraph(uri); + } + rs = qe.execSelect(); + } + return rs; + } + + + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-01-30 09:55:31
|
Revision: 3893 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3893&view=rev Author: lorenz_b Date: 2013-01-30 09:55:24 +0000 (Wed, 30 Jan 2013) Log Message: ----------- Continued matching. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java Added Paths: ----------- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java 2013-01-25 13:04:28 UTC (rev 3892) +++ trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java 2013-01-30 09:55:24 UTC (rev 3893) @@ -1,6 +1,5 @@ package org.dllearner.scripts; -import java.net.URL; import java.text.DecimalFormat; import java.util.HashMap; import java.util.List; @@ -10,10 +9,7 @@ import java.util.SortedSet; import java.util.TreeSet; -import org.apache.log4j.ConsoleAppender; -import org.apache.log4j.Level; import org.apache.log4j.Logger; -import org.apache.log4j.PatternLayout; import org.dllearner.algorithms.celoe.CELOE; import org.dllearner.core.AbstractLearningProblem; import org.dllearner.core.AbstractReasonerComponent; @@ -24,7 +20,6 @@ import org.dllearner.core.owl.NamedClass; import org.dllearner.core.owl.ObjectProperty; import org.dllearner.kb.SparqlEndpointKS; -import org.dllearner.kb.extraction.ExtractionAlgorithm; import org.dllearner.kb.sparql.ExtractionDBCache; import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; @@ -35,14 +30,11 @@ import org.dllearner.reasoning.FastInstanceChecker; import org.dllearner.reasoning.SPARQLReasoner; import org.dllearner.utilities.datastructures.Datastructures; +import org.dllearner.utilities.datastructures.SetManipulation; import org.dllearner.utilities.datastructures.SortedSetTuple; import org.dllearner.utilities.examples.AutomaticNegativeExampleFinderSPARQL2; -import org.dllearner.utilities.owl.DLLearnerDescriptionConvertVisitor; import org.dllearner.utilities.owl.OWLAPIDescriptionConvertVisitor; -import org.semanticweb.owlapi.io.ToStringRenderer; -import uk.ac.manchester.cs.owl.owlapi.mansyntaxrenderer.ManchesterOWLSyntaxOWLObjectRendererImpl; - import com.hp.hpl.jena.query.Query; import com.hp.hpl.jena.query.QueryFactory; import com.hp.hpl.jena.query.QuerySolution; @@ -132,9 +124,10 @@ logger.info(nc); // get all via owl:sameAs related individuals SortedSet<Individual> individuals = getRelatedIndividualsNamespaceAware(source, nc, target.getNamespace()); - logger.info(individuals); + logger.info(individuals.size()); //learn concept in KB2 based on the examples if(individuals.size() >= 3){ + individuals = SetManipulation.fuzzyShrinkInd(individuals, 10); List<? extends EvaluatedDescription> learnedClassExpressions = learnClassExpression(target, individuals); mapping.put(nc, learnedClassExpressions); } @@ -260,6 +253,9 @@ String uri = object.asResource().getURI(); //workaround for World Factbook - should be removed later uri = uri.replace("http://www4.wiwiss.fu-berlin.de/factbook/resource/", "http://wifo5-03.informatik.uni-mannheim.de/factbook/resource/"); + //workaround for OpenCyc - should be removed later + uri = uri.replace("http://sw.cyc.com", "http://sw.opencyc.org"); + relatedIndividuals.add(new Individual(uri)); } } @@ -329,40 +325,5 @@ return cache; } - - } - - /** - * @param args - */ - public static void main(String[] args) throws Exception{ - //render output - ToStringRenderer.getInstance().setRenderer(new ManchesterOWLSyntaxOWLObjectRendererImpl()); - //set logging properties - Logger.getLogger(SparqlKnowledgeSource.class).setLevel(Level.WARN); - Logger.getLogger(ExtractionAlgorithm.class).setLevel(Level.WARN); - Logger.getLogger(org.dllearner.kb.extraction.Manager.class).setLevel(Level.WARN); - Logger.getRootLogger().removeAllAppenders(); - Logger.getRootLogger().addAppender(new ConsoleAppender(new PatternLayout("%m%n"))); - // KB2 - SparqlEndpoint endpoint1 = SparqlEndpoint.getEndpointDBpedia(); - ExtractionDBCache cache1 = new ExtractionDBCache("cache"); - String namespace1 = "http://dbpedia.org/resource/"; - KnowledgeBase kb1 = new KnowledgeBase(endpoint1, cache1, namespace1); - // KB2 - SparqlEndpoint endpoint2 = new SparqlEndpoint(new URL("http://wifo5-03.informatik.uni-mannheim.de/factbook/sparql")); - ExtractionDBCache cache2 = new ExtractionDBCache("cache"); - //TODO problem with World Factbook is that old FU Berlin server is useless because of bugs and current version - //is provide by University Of Mannheim now with another namespace http://wifo5-03.informatik.uni-mannheim.de/factbook/resource/ - //but the DBpedia links are still to the old D2R server instance - //workaround: replace namespace before learning - String namespace2 = "http://www4.wiwiss.fu-berlin.de/factbook/resource/"; - KnowledgeBase kb2 = new KnowledgeBase(endpoint2, cache2, namespace2); - - OntologyMatching matcher = new OntologyMatching(kb1, kb2); - matcher.start(); - - } - } Added: trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java (rev 0) +++ trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatchingTest.java 2013-01-30 09:55:24 UTC (rev 3893) @@ -0,0 +1,85 @@ +package org.dllearner.scripts; + +import java.net.URL; + +import org.apache.log4j.ConsoleAppender; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.apache.log4j.PatternLayout; +import org.dllearner.kb.extraction.ExtractionAlgorithm; +import org.dllearner.kb.sparql.ExtractionDBCache; +import org.dllearner.kb.sparql.SparqlEndpoint; +import org.dllearner.kb.sparql.SparqlKnowledgeSource; +import org.dllearner.scripts.OntologyMatching.KnowledgeBase; +import org.junit.Before; +import org.junit.Test; +import org.semanticweb.owlapi.io.ToStringRenderer; + +import uk.ac.manchester.cs.owl.owlapi.mansyntaxrenderer.ManchesterOWLSyntaxOWLObjectRendererImpl; + +public class OntologyMatchingTest { + + private KnowledgeBase dbpedia; + private KnowledgeBase worldFactBook; + private KnowledgeBase openCyc; + private KnowledgeBase linkedGeoData; + + @Before + public void setUp() throws Exception { + // render output + ToStringRenderer.getInstance().setRenderer(new ManchesterOWLSyntaxOWLObjectRendererImpl()); + // set logging properties + Logger.getLogger(SparqlKnowledgeSource.class).setLevel(Level.WARN); + Logger.getLogger(ExtractionAlgorithm.class).setLevel(Level.WARN); + Logger.getLogger(org.dllearner.kb.extraction.Manager.class).setLevel(Level.WARN); + Logger.getRootLogger().removeAllAppenders(); + Logger.getRootLogger().addAppender(new ConsoleAppender(new PatternLayout("%m%n"))); + + //DBpedia + SparqlEndpoint endpoint = SparqlEndpoint.getEndpointDBpedia(); + ExtractionDBCache cache = new ExtractionDBCache("cache"); + String namespace = "http://dbpedia.org/resource/"; + dbpedia = new KnowledgeBase(endpoint, cache, namespace); + + //World Factbook + //TODO problem with World Factbook is that old FU Berlin server is useless because of bugs and current version + //is provide by University Of Mannheim now with another namespace http://wifo5-03.informatik.uni-mannheim.de/factbook/resource/ + //but the DBpedia links are still to the old D2R server instance + //workaround: replace namespace before learning + endpoint = new SparqlEndpoint(new URL("http://wifo5-03.informatik.uni-mannheim.de/factbook/sparql")); + cache = new ExtractionDBCache("cache"); + namespace = "http://www4.wiwiss.fu-berlin.de/factbook/resource/"; + worldFactBook = new KnowledgeBase(endpoint, cache, namespace); + + //local OpenCyc + endpoint = new SparqlEndpoint(new URL("http://localhost:8890/sparql")); + cache = new ExtractionDBCache("cache"); + namespace = "http://sw.cyc.com"; + openCyc = new KnowledgeBase(endpoint, cache, namespace); + + //LinkedGeoData + endpoint = new SparqlEndpoint(new URL("http://linkedgeodata.org/sparql")); + cache = new ExtractionDBCache("cache"); + namespace = "http://linkedgeodata.org/triplify/"; + linkedGeoData = new KnowledgeBase(endpoint, cache, namespace); + } + + @Test + public void testDBpediaWorldFactbook() { + OntologyMatching matcher = new OntologyMatching(dbpedia, worldFactBook); + matcher.start(); + } + + @Test + public void testDBpediaOpenCyc() { + OntologyMatching matcher = new OntologyMatching(dbpedia, openCyc); + matcher.start(); + } + + @Test + public void testDBpediaLinkedGeoData() { + OntologyMatching matcher = new OntologyMatching(dbpedia, linkedGeoData); + matcher.start(); + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-01-25 13:04:42
|
Revision: 3892 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3892&view=rev Author: lorenz_b Date: 2013-01-25 13:04:28 +0000 (Fri, 25 Jan 2013) Log Message: ----------- Continued matching script. Modified Paths: -------------- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java Modified: trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java 2013-01-25 12:02:10 UTC (rev 3891) +++ trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java 2013-01-25 13:04:28 UTC (rev 3892) @@ -1,19 +1,30 @@ package org.dllearner.scripts; import java.net.URL; +import java.text.DecimalFormat; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; +import org.apache.log4j.ConsoleAppender; +import org.apache.log4j.Level; import org.apache.log4j.Logger; +import org.apache.log4j.PatternLayout; import org.dllearner.algorithms.celoe.CELOE; import org.dllearner.core.AbstractLearningProblem; import org.dllearner.core.AbstractReasonerComponent; import org.dllearner.core.ComponentInitException; +import org.dllearner.core.EvaluatedDescription; +import org.dllearner.core.owl.Description; import org.dllearner.core.owl.Individual; import org.dllearner.core.owl.NamedClass; import org.dllearner.core.owl.ObjectProperty; import org.dllearner.kb.SparqlEndpointKS; +import org.dllearner.kb.extraction.ExtractionAlgorithm; import org.dllearner.kb.sparql.ExtractionDBCache; import org.dllearner.kb.sparql.SPARQLTasks; import org.dllearner.kb.sparql.SparqlEndpoint; @@ -26,7 +37,12 @@ import org.dllearner.utilities.datastructures.Datastructures; import org.dllearner.utilities.datastructures.SortedSetTuple; import org.dllearner.utilities.examples.AutomaticNegativeExampleFinderSPARQL2; +import org.dllearner.utilities.owl.DLLearnerDescriptionConvertVisitor; +import org.dllearner.utilities.owl.OWLAPIDescriptionConvertVisitor; +import org.semanticweb.owlapi.io.ToStringRenderer; +import uk.ac.manchester.cs.owl.owlapi.mansyntaxrenderer.ManchesterOWLSyntaxOWLObjectRendererImpl; + import com.hp.hpl.jena.query.Query; import com.hp.hpl.jena.query.QueryFactory; import com.hp.hpl.jena.query.QuerySolution; @@ -63,11 +79,51 @@ } public void start(){ - computeMatching(kb1, kb2); - computeMatching(kb2, kb1); + Map<Description, List<? extends EvaluatedDescription>> mapping1 = computeMapping(kb1, kb2); + printMappingPretty(mapping1); + Map<Description, List<? extends EvaluatedDescription>> mapping2 = computeMapping(kb2, kb1); + printMappingPretty(mapping2); } - private void computeMatching(KnowledgeBase source, KnowledgeBase target) { + private void printMapping(Map<Description, List<? extends EvaluatedDescription>> mapping){ + logger.info("Source Class -> Target Class Expression"); + for (Entry<Description, List<? extends org.dllearner.core.EvaluatedDescription>> entry : mapping.entrySet()) { + Description key = entry.getKey(); + int length = key.toString().length(); + String indention = ""; + for(int i = 0; i < length; i++){ + indention += " "; + } + List<? extends org.dllearner.core.EvaluatedDescription> value = entry.getValue(); + logger.info(key.toString()); + for (EvaluatedDescription evaluatedDescription : value) { + logger.info(indention + "\t->\t" + evaluatedDescription); + } + } + } + + private void printMappingPretty(Map<Description, List<? extends EvaluatedDescription>> mapping){ + DecimalFormat dfPercent = new DecimalFormat("0.00%"); + logger.info("Source Class -> Target Class Expression"); + for (Entry<Description, List<? extends org.dllearner.core.EvaluatedDescription>> entry : mapping.entrySet()) { + Description key = entry.getKey(); + int length = OWLAPIDescriptionConvertVisitor.getOWLClassExpression(key).toString().length(); + String indention = ""; + for(int i = 0; i < length; i++){ + indention += " "; + } + List<? extends org.dllearner.core.EvaluatedDescription> value = entry.getValue(); + logger.info(OWLAPIDescriptionConvertVisitor.getOWLClassExpression(key)); + for (EvaluatedDescription evaluatedDescription : value) { + logger.info(indention + "\t->\t" + + OWLAPIDescriptionConvertVisitor.getOWLClassExpression(evaluatedDescription.getDescription()) + + "(" + dfPercent.format(evaluatedDescription.getAccuracy()) + ")"); + } + } + } + + private Map<Description, List<? extends EvaluatedDescription>> computeMapping(KnowledgeBase source, KnowledgeBase target) { + Map<Description, List<? extends EvaluatedDescription>> mapping = new HashMap<Description, List<? extends EvaluatedDescription>>(); // get all classes in SOURCE Set<NamedClass> sourceClasses = getClasses(source); @@ -79,16 +135,18 @@ logger.info(individuals); //learn concept in KB2 based on the examples if(individuals.size() >= 3){ - learnClassExpression(target, individuals); + List<? extends EvaluatedDescription> learnedClassExpressions = learnClassExpression(target, individuals); + mapping.put(nc, learnedClassExpressions); } } + return mapping; } - private void learnClassExpression(KnowledgeBase kb, SortedSet<Individual> posExamples){ - learnClassExpression(kb, posExamples, false); + private List<? extends EvaluatedDescription> learnClassExpression(KnowledgeBase kb, SortedSet<Individual> posExamples){ + return learnClassExpression(kb, posExamples, false); } - private void learnClassExpression(KnowledgeBase kb, SortedSet<Individual> positiveExamples, boolean posNeg){ + private List<? extends EvaluatedDescription> learnClassExpression(KnowledgeBase kb, SortedSet<Individual> positiveExamples, boolean posNeg){ try { SortedSet<Individual> negativeExamples = new TreeSet<Individual>(); if(posNeg){ @@ -132,11 +190,14 @@ la.setNoisePercentage(25); la.init(); la.start(); + + logger.info(la.getCurrentlyBestEvaluatedDescription()); - logger.info(la.getCurrentlyBestEvaluatedDescription()); + return la.getCurrentlyBestEvaluatedDescriptions(10); } catch (ComponentInitException e) { e.printStackTrace(); } + return null; } private Set<NamedClass> getClasses(KnowledgeBase kb){ @@ -195,7 +256,11 @@ qs = rs.next(); RDFNode object = qs.get("o"); if(object.isURIResource()){ - relatedIndividuals.add(new Individual(object.asResource().getURI())); + + String uri = object.asResource().getURI(); + //workaround for World Factbook - should be removed later + uri = uri.replace("http://www4.wiwiss.fu-berlin.de/factbook/resource/", "http://wifo5-03.informatik.uni-mannheim.de/factbook/resource/"); + relatedIndividuals.add(new Individual(uri)); } } return relatedIndividuals; @@ -272,6 +337,14 @@ * @param args */ public static void main(String[] args) throws Exception{ + //render output + ToStringRenderer.getInstance().setRenderer(new ManchesterOWLSyntaxOWLObjectRendererImpl()); + //set logging properties + Logger.getLogger(SparqlKnowledgeSource.class).setLevel(Level.WARN); + Logger.getLogger(ExtractionAlgorithm.class).setLevel(Level.WARN); + Logger.getLogger(org.dllearner.kb.extraction.Manager.class).setLevel(Level.WARN); + Logger.getRootLogger().removeAllAppenders(); + Logger.getRootLogger().addAppender(new ConsoleAppender(new PatternLayout("%m%n"))); // KB2 SparqlEndpoint endpoint1 = SparqlEndpoint.getEndpointDBpedia(); ExtractionDBCache cache1 = new ExtractionDBCache("cache"); @@ -280,6 +353,10 @@ // KB2 SparqlEndpoint endpoint2 = new SparqlEndpoint(new URL("http://wifo5-03.informatik.uni-mannheim.de/factbook/sparql")); ExtractionDBCache cache2 = new ExtractionDBCache("cache"); + //TODO problem with World Factbook is that old FU Berlin server is useless because of bugs and current version + //is provide by University Of Mannheim now with another namespace http://wifo5-03.informatik.uni-mannheim.de/factbook/resource/ + //but the DBpedia links are still to the old D2R server instance + //workaround: replace namespace before learning String namespace2 = "http://www4.wiwiss.fu-berlin.de/factbook/resource/"; KnowledgeBase kb2 = new KnowledgeBase(endpoint2, cache2, namespace2); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-01-25 12:02:22
|
Revision: 3891 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3891&view=rev Author: lorenz_b Date: 2013-01-25 12:02:10 +0000 (Fri, 25 Jan 2013) Log Message: ----------- Started script for instance based matching of 2 SPARQL knowledge bases. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/kb/sparql/SPARQLTasks.java trunk/components-core/src/main/java/org/dllearner/learningproblems/PosOnlyLP.java trunk/scripts/pom.xml trunk/scripts/src/main/java/org/dllearner/scripts/matching/GeneralMatcher.java trunk/test/qtl/dbpedia_simple.conf Added Paths: ----------- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java Modified: trunk/components-core/src/main/java/org/dllearner/kb/sparql/SPARQLTasks.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/sparql/SPARQLTasks.java 2013-01-23 13:30:14 UTC (rev 3890) +++ trunk/components-core/src/main/java/org/dllearner/kb/sparql/SPARQLTasks.java 2013-01-25 12:02:10 UTC (rev 3891) @@ -701,7 +701,7 @@ public Set<NamedClass> getAllClasses() { Set<NamedClass> classes = new TreeSet<NamedClass>(); - String query = "PREFIX owl: <http://www.w3.org/2002/07/owl#> SELECT ?c WHERE {?c a owl:Class} LIMIT 1000"; + String query = "SELECT ?c WHERE {?c a <http://www.w3.org/2002/07/owl#Class>} LIMIT 1000"; /* * String query = "PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> " + "SELECT ?c WHERE {{?c a owl:Class} UNION {?c rdfs:subClassOf ?d} UNION {?d rdfs:subClassOf ?c}} LIMIT 1000"; Modified: trunk/components-core/src/main/java/org/dllearner/learningproblems/PosOnlyLP.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/learningproblems/PosOnlyLP.java 2013-01-23 13:30:14 UTC (rev 3890) +++ trunk/components-core/src/main/java/org/dllearner/learningproblems/PosOnlyLP.java 2013-01-25 12:02:10 UTC (rev 3891) @@ -64,6 +64,11 @@ public PosOnlyLP(AbstractReasonerComponent reasoningService) { super(reasoningService); } + + public PosOnlyLP(AbstractReasonerComponent reasoningService, SortedSet<Individual> positiveExamples) { + super(reasoningService); + this.positiveExamples = positiveExamples; + } /* * (non-Javadoc) Modified: trunk/scripts/pom.xml =================================================================== --- trunk/scripts/pom.xml 2013-01-23 13:30:14 UTC (rev 3890) +++ trunk/scripts/pom.xml 2013-01-25 12:02:10 UTC (rev 3891) @@ -25,6 +25,10 @@ <artifactId>jena</artifactId> <groupId>com.hp.hpl.jena</groupId> </exclusion> + <exclusion> + <artifactId>owlapi</artifactId> + <groupId>net.sourceforge.owlapi</groupId> + </exclusion> </exclusions> </dependency> <dependency> @@ -40,6 +44,12 @@ <dependency> <groupId>org.dllearner</groupId> <artifactId>interfaces</artifactId> + <exclusions> + <exclusion> + <artifactId>owlapi</artifactId> + <groupId>net.sourceforge.owlapi</groupId> + </exclusion> + </exclusions> </dependency> <dependency> <groupId>net.sourceforge.secondstring</groupId> @@ -49,12 +59,12 @@ <groupId>postgresql</groupId> <artifactId>postgresql</artifactId> </dependency> - <dependency> - <groupId>com.dumontierlab</groupId> - <artifactId>pdb2rdf-parser</artifactId> - </dependency> <dependency> <groupId>com.dumontierlab</groupId> + <artifactId>pdb2rdf-parser</artifactId> + </dependency> + <dependency> + <groupId>com.dumontierlab</groupId> <artifactId>pdb2rdf-cli</artifactId> <exclusions> <exclusion> @@ -84,8 +94,8 @@ <groupId>org.deri.any23</groupId> </exclusion> <exclusion> - <artifactId>jena-core</artifactId> - <groupId>org.apache.jena</groupId> + <artifactId>jena-core</artifactId> + <groupId>org.apache.jena</groupId> </exclusion> </exclusions> </dependency> @@ -103,6 +113,30 @@ <artifactId>weka</artifactId> <version>3.6.5</version> </dependency> + <dependency> + <groupId>net.sourceforge.owlapi</groupId> + <artifactId>owlapi-distribution</artifactId> + </dependency> + <dependency> + <groupId>net.sourceforge.owlapi</groupId> + <artifactId>owlapi-reasoner</artifactId> + <exclusions> + <exclusion> + <artifactId>owlapi-api</artifactId> + <groupId>net.sourceforge.owlapi</groupId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>net.sourceforge.owlapi</groupId> + <artifactId>owlapi-util</artifactId> + <exclusions> + <exclusion> + <artifactId>owlapi-api</artifactId> + <groupId>net.sourceforge.owlapi</groupId> + </exclusion> + </exclusions> + </dependency> </dependencies> Added: trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java (rev 0) +++ trunk/scripts/src/main/java/org/dllearner/scripts/OntologyMatching.java 2013-01-25 12:02:10 UTC (rev 3891) @@ -0,0 +1,291 @@ +package org.dllearner.scripts; + +import java.net.URL; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; + +import org.apache.log4j.Logger; +import org.dllearner.algorithms.celoe.CELOE; +import org.dllearner.core.AbstractLearningProblem; +import org.dllearner.core.AbstractReasonerComponent; +import org.dllearner.core.ComponentInitException; +import org.dllearner.core.owl.Individual; +import org.dllearner.core.owl.NamedClass; +import org.dllearner.core.owl.ObjectProperty; +import org.dllearner.kb.SparqlEndpointKS; +import org.dllearner.kb.sparql.ExtractionDBCache; +import org.dllearner.kb.sparql.SPARQLTasks; +import org.dllearner.kb.sparql.SparqlEndpoint; +import org.dllearner.kb.sparql.SparqlKnowledgeSource; +import org.dllearner.kb.sparql.SparqlQuery; +import org.dllearner.learningproblems.PosNegLPStandard; +import org.dllearner.learningproblems.PosOnlyLP; +import org.dllearner.reasoning.FastInstanceChecker; +import org.dllearner.reasoning.SPARQLReasoner; +import org.dllearner.utilities.datastructures.Datastructures; +import org.dllearner.utilities.datastructures.SortedSetTuple; +import org.dllearner.utilities.examples.AutomaticNegativeExampleFinderSPARQL2; + +import com.hp.hpl.jena.query.Query; +import com.hp.hpl.jena.query.QueryFactory; +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.query.ResultSet; +import com.hp.hpl.jena.query.Syntax; +import com.hp.hpl.jena.rdf.model.RDFNode; +import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; +import com.hp.hpl.jena.vocabulary.OWL; +import com.jamonapi.Monitor; +import com.jamonapi.MonitorFactory; + +public class OntologyMatching { + + + private static final Logger logger = Logger.getLogger(OntologyMatching.class.getName()); + + private final ObjectProperty sameAs = new ObjectProperty(OWL.sameAs.getURI()); + private final Monitor mon; + + //KB1 + private KnowledgeBase kb1; + //KB2 + private KnowledgeBase kb2; + + public OntologyMatching(KnowledgeBase kb1, KnowledgeBase kb2) { + this.kb1 = kb1; + this.kb2 = kb2; + + mon = MonitorFactory.getTimeMonitor("time"); + } + + public OntologyMatching(SparqlEndpoint endpoint1, SparqlEndpoint endpoint2) { + this(new KnowledgeBase(endpoint1), new KnowledgeBase(endpoint2)); + } + + public void start(){ + computeMatching(kb1, kb2); + computeMatching(kb2, kb1); + } + + private void computeMatching(KnowledgeBase source, KnowledgeBase target) { + // get all classes in SOURCE + Set<NamedClass> sourceClasses = getClasses(source); + + // for each class of KB1 + for (NamedClass nc : sourceClasses) { + logger.info(nc); + // get all via owl:sameAs related individuals + SortedSet<Individual> individuals = getRelatedIndividualsNamespaceAware(source, nc, target.getNamespace()); + logger.info(individuals); + //learn concept in KB2 based on the examples + if(individuals.size() >= 3){ + learnClassExpression(target, individuals); + } + } + } + + private void learnClassExpression(KnowledgeBase kb, SortedSet<Individual> posExamples){ + learnClassExpression(kb, posExamples, false); + } + + private void learnClassExpression(KnowledgeBase kb, SortedSet<Individual> positiveExamples, boolean posNeg){ + try { + SortedSet<Individual> negativeExamples = new TreeSet<Individual>(); + if(posNeg){ + //find negative examples + mon.start(); + AutomaticNegativeExampleFinderSPARQL2 finder = new AutomaticNegativeExampleFinderSPARQL2(kb.getEndpoint()); + //TODO find negative examples + mon.stop(); + logger.info("Found " + negativeExamples.size() + " negative examples in " + mon.getLastValue() + "ms."); + } + + SortedSetTuple<Individual> examples = new SortedSetTuple<Individual>(positiveExamples, negativeExamples); + + SparqlKnowledgeSource ks = new SparqlKnowledgeSource(); + ks.setInstances(Datastructures.individualSetToStringSet(examples.getCompleteSet())); + ks.setUrl(kb.getEndpoint().getURL()); + ks.setDefaultGraphURIs(new TreeSet<String>(kb.getEndpoint().getDefaultGraphURIs())); + ks.setUseLits(false); + ks.setUseCacheDatabase(true); + ks.setCacheDir("cache"); + ks.setRecursionDepth(2); + ks.setCloseAfterRecursion(true); + ks.setDissolveBlankNodes(false); + ks.setSaveExtractedFragment(false); + ks.init(); + + AbstractReasonerComponent rc = new FastInstanceChecker(ks); + rc.init(); + + AbstractLearningProblem lp; + if(posNeg){ + lp = new PosNegLPStandard(rc, positiveExamples, negativeExamples); + } else { + lp = new PosOnlyLP(rc, positiveExamples); + + } + lp.init(); + + CELOE la = new CELOE(lp, rc); + la.setMaxExecutionTimeInSeconds(10); + la.setNoisePercentage(25); + la.init(); + la.start(); + + logger.info(la.getCurrentlyBestEvaluatedDescription()); + } catch (ComponentInitException e) { + e.printStackTrace(); + } + } + + private Set<NamedClass> getClasses(KnowledgeBase kb){ + Set<NamedClass> classes = kb.getSparqlHelper().getAllClasses(); + //fallback: check for ?s a ?type where ?type is not asserted to owl:Class + if(classes.isEmpty()){ + String query = "SELECT ?type WHERE {?s a ?type.}"; + ResultSet rs = executeSelect(kb, query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + if(qs.get("type").isURIResource()){ + classes.add(new NamedClass(qs.get("type").asResource().getURI())); + } + } + } + return classes; + } + + private SortedSet<Individual> getRelatedIndividualsNaive(KnowledgeBase kb, NamedClass nc){ + SortedSet<Individual> relatedIndividuals = new TreeSet<Individual>(); + //get all individuals in given class nc + Set<Individual> individuals = kb.getReasoner().getIndividuals(nc); + //for each individual in class nc + for(Individual ind : individuals){ + //get all individuals related via owl:sameAs + Set<Individual> sameIndividuals = kb.getReasoner().getRelatedIndividuals(ind, sameAs); + relatedIndividuals.addAll(sameIndividuals); + } + return relatedIndividuals; + } + + private SortedSet<Individual> getRelatedIndividuals(KnowledgeBase kb, NamedClass nc){ + SortedSet<Individual> relatedIndividuals = new TreeSet<Individual>(); + //get all individuals o which are connected to individuals s belonging to class nc + String query = String.format("SELECT ?o WHERE {?s a <%s>. ?s <http://www.w3.org/2002/07/owl#sameAs> ?o.}", nc.getName()); + ResultSet rs = executeSelect(kb, query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + RDFNode object = qs.get("o"); + if(object.isURIResource()){ + relatedIndividuals.add(new Individual(object.asResource().getURI())); + } + } + return relatedIndividuals; + } + + private SortedSet<Individual> getRelatedIndividualsNamespaceAware(KnowledgeBase kb, NamedClass nc, String targetNamespace){ + SortedSet<Individual> relatedIndividuals = new TreeSet<Individual>(); + //get all individuals o which are connected to individuals s belonging to class nc + String query = String.format("SELECT ?o WHERE {?s a <%s>. ?s <http://www.w3.org/2002/07/owl#sameAs> ?o. FILTER(REGEX(STR(?o),'%s'))}", nc.getName(), targetNamespace); + ResultSet rs = executeSelect(kb, query); + QuerySolution qs; + while(rs.hasNext()){ + qs = rs.next(); + RDFNode object = qs.get("o"); + if(object.isURIResource()){ + relatedIndividuals.add(new Individual(object.asResource().getURI())); + } + } + return relatedIndividuals; + } + + protected ResultSet executeSelect(KnowledgeBase kb, String query){ + return executeSelect(kb, QueryFactory.create(query, Syntax.syntaxARQ)); + } + + protected ResultSet executeSelect(KnowledgeBase kb, Query query){ + ExtractionDBCache cache = kb.getCache(); + SparqlEndpoint endpoint = kb.getEndpoint(); + ResultSet rs = null; + if(cache != null){ + rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query.toString())); + } else { + QueryEngineHTTP qe = new QueryEngineHTTP(endpoint.getURL().toString(), query); + for(String uri : endpoint.getDefaultGraphURIs()){ + qe.addDefaultGraph(uri); + } + rs = qe.execSelect(); + } + return rs; + } + + public static class KnowledgeBase{ + private SparqlEndpoint endpoint; + private SPARQLReasoner reasoner; + private SPARQLTasks sparqlHelper; + private String namespace; + private ExtractionDBCache cache; + + public KnowledgeBase(SparqlEndpoint endpoint, ExtractionDBCache cache, String namespace) { + this.endpoint = endpoint; + this.namespace = namespace; + this.cache = cache; + + this.reasoner = new SPARQLReasoner(new SparqlEndpointKS(endpoint)); + this.sparqlHelper = new SPARQLTasks(endpoint); + } + + public KnowledgeBase(SparqlEndpoint endpoint) { + this.endpoint = endpoint; + + this.reasoner = new SPARQLReasoner(new SparqlEndpointKS(endpoint)); + this.sparqlHelper = new SPARQLTasks(endpoint); + } + + public SparqlEndpoint getEndpoint() { + return endpoint; + } + + public SPARQLReasoner getReasoner() { + return reasoner; + } + + public SPARQLTasks getSparqlHelper() { + return sparqlHelper; + } + + public String getNamespace() { + return namespace; + } + + public ExtractionDBCache getCache() { + return cache; + } + + + + } + + /** + * @param args + */ + public static void main(String[] args) throws Exception{ + // KB2 + SparqlEndpoint endpoint1 = SparqlEndpoint.getEndpointDBpedia(); + ExtractionDBCache cache1 = new ExtractionDBCache("cache"); + String namespace1 = "http://dbpedia.org/resource/"; + KnowledgeBase kb1 = new KnowledgeBase(endpoint1, cache1, namespace1); + // KB2 + SparqlEndpoint endpoint2 = new SparqlEndpoint(new URL("http://wifo5-03.informatik.uni-mannheim.de/factbook/sparql")); + ExtractionDBCache cache2 = new ExtractionDBCache("cache"); + String namespace2 = "http://www4.wiwiss.fu-berlin.de/factbook/resource/"; + KnowledgeBase kb2 = new KnowledgeBase(endpoint2, cache2, namespace2); + + OntologyMatching matcher = new OntologyMatching(kb1, kb2); + matcher.start(); + + } + +} Modified: trunk/scripts/src/main/java/org/dllearner/scripts/matching/GeneralMatcher.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/matching/GeneralMatcher.java 2013-01-23 13:30:14 UTC (rev 3890) +++ trunk/scripts/src/main/java/org/dllearner/scripts/matching/GeneralMatcher.java 2013-01-25 12:02:10 UTC (rev 3891) @@ -24,7 +24,7 @@ import java.util.LinkedList; import java.util.Set; -import org.dllearner.algorithm.qtl.QTL; +import org.dllearner.algorithms.qtl.QTL; import org.dllearner.core.ComponentInitException; import org.dllearner.core.LearningProblemUnsupportedException; import org.dllearner.kb.SparqlEndpointKS; Modified: trunk/test/qtl/dbpedia_simple.conf =================================================================== --- trunk/test/qtl/dbpedia_simple.conf 2013-01-23 13:30:14 UTC (rev 3890) +++ trunk/test/qtl/dbpedia_simple.conf 2013-01-25 12:02:10 UTC (rev 3891) @@ -2,7 +2,7 @@ prefixes = [ ("dbr","http://dbpedia.org/resource/") ] ks.type = "SPARQL" -ks.url = "http://live.dbpedia.org/sparql" +ks.url = "http://dbpedia.org/sparql" ks.defaultGraphURIs = { "http://dbpedia.org" } // learning problem @@ -10,3 +10,4 @@ lp.positiveExamples = { "dbr:Bob_Dylan", "dbr:The_Beatles", "dbr:Aerosmith" } alg.type = "qtl" +alg.maxQueryTreeDepth = 1 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-01-23 13:30:23
|
Revision: 3890 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3890&view=rev Author: lorenz_b Date: 2013-01-23 13:30:14 +0000 (Wed, 23 Jan 2013) Log Message: ----------- Added option to enable simple RDFS reasoning for local model based SPARQL endpoints. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java Modified: trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java 2013-01-22 21:41:16 UTC (rev 3889) +++ trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java 2013-01-23 13:30:14 UTC (rev 3890) @@ -19,7 +19,8 @@ private OntModel model; private String fileName; - private String baseDir; + private String baseDir; + private boolean enableReasoning = false; public LocalModelBasedSparqlEndpointKS() { } @@ -28,22 +29,6 @@ this(new URL(ontologyURL)); } - public void setFileName(String fileName) { - this.fileName = fileName; - } - - public String getFileName() { - return fileName; - } - - public String getBaseDir() { - return baseDir; - } - - public void setBaseDir(String baseDir) { - this.baseDir = baseDir; - } - public LocalModelBasedSparqlEndpointKS(URL ontologyURL) { this.fileName = ontologyURL.toString(); } @@ -54,7 +39,7 @@ @Override public void init() throws ComponentInitException { - Model baseModel = ModelFactory.createDefaultModel();System.out.println("Base: " + baseDir); + Model baseModel = ModelFactory.createDefaultModel(); // use the FileManager to find the input file InputStream in = FileManager.get().open(baseDir + File.separator + fileName); if (in == null) { @@ -64,9 +49,33 @@ // read the RDF/XML file baseModel.read(in, null); - model = ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM_RDFS_INF, baseModel); + model = ModelFactory.createOntologyModel(enableReasoning ? OntModelSpec.OWL_MEM : OntModelSpec.OWL_MEM_RDFS_INF, baseModel); } + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getFileName() { + return fileName; + } + + public String getBaseDir() { + return baseDir; + } + + public void setBaseDir(String baseDir) { + this.baseDir = baseDir; + } + + public void setEnableReasoning(boolean enableReasoning) { + this.enableReasoning = enableReasoning; + } + + public boolean isEnableReasoning() { + return enableReasoning; + } + public OntModel getModel() { return model; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-01-22 21:41:24
|
Revision: 3889 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3889&view=rev Author: lorenz_b Date: 2013-01-22 21:41:16 +0000 (Tue, 22 Jan 2013) Log Message: ----------- Added options to set prefixes in QTL output and to enable numeric SPARQL FILTER expression learning. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/QueryTree.java trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/impl/QueryTreeImpl.java trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/impl/QueryTreeFactoryImpl.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java 2013-01-22 13:22:29 UTC (rev 3888) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java 2013-01-22 21:41:16 UTC (rev 3889) @@ -22,9 +22,11 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; @@ -116,6 +118,8 @@ private SortedSet<String> lggInstances; private Set<String> objectNamespacesToIgnore = new HashSet<String>(); + private Map<String, String> prefixes = new HashMap<String, String>(); + private boolean enableNumericLiteralFilters = false; public static Collection<ConfigOption<?>> createConfigOptions() { Collection<ConfigOption<?>> options = new LinkedList<ConfigOption<?>>(); @@ -125,7 +129,6 @@ } public QTL() { - } public QTL(AbstractLearningProblem learningProblem, SparqlEndpointKS endpointKS) throws LearningProblemUnsupportedException{ @@ -219,6 +222,14 @@ return maxQueryTreeDepth; } + public void setPrefixes(Map<String, String> prefixes) { + this.prefixes = prefixes; + } + + public Map<String, String> getPrefixes() { + return prefixes; + } + public String getSPARQLQuery(){ if(lgg == null){ lgg = lggGenerator.getLGG(getQueryTrees(posExamples)); @@ -256,6 +267,7 @@ if(logger.isDebugEnabled()){ logger.debug("Tree for resource " + resource); logger.debug(tree.getStringRepresentation()); + } trees.add(tree); } @@ -330,9 +342,17 @@ if(logger.isDebugEnabled()){ logger.debug("LGG: \n" + lgg.getStringRepresentation()); } - logger.info(lgg.toSPARQLQuery()); + logger.info(lgg.toSPARQLQueryString(enableNumericLiteralFilters, prefixes)); } - + + public void setEnableNumericLiteralFilters(boolean enableNumericLiteralFilters) { + this.enableNumericLiteralFilters = enableNumericLiteralFilters; + } + + public boolean isEnableNumericLiteralFilters() { + return enableNumericLiteralFilters; + } + @Override public List<String> getCurrentlyBestSPARQLQueries(int nrOfSPARQLQueries) { return Collections.singletonList(getBestSPARQLQuery()); Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/QueryTree.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/QueryTree.java 2013-01-22 13:22:29 UTC (rev 3888) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/QueryTree.java 2013-01-22 21:41:16 UTC (rev 3889) @@ -22,6 +22,7 @@ import java.io.PrintWriter; import java.util.Comparator; import java.util.List; +import java.util.Map; import java.util.Set; import org.dllearner.algorithms.qtl.datastructures.impl.QueryTreeImpl; @@ -131,6 +132,8 @@ String toSPARQLQueryString(boolean filtered); + String toSPARQLQueryString(boolean filtered, Map<String, String> prefixMap); + Query toSPARQLQuery(); int getTriplePatternCount(); Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/impl/QueryTreeImpl.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/impl/QueryTreeImpl.java 2013-01-22 13:22:29 UTC (rev 3888) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/datastructures/impl/QueryTreeImpl.java 2013-01-22 21:41:16 UTC (rev 3889) @@ -31,6 +31,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.TreeSet; import java.util.regex.Pattern; @@ -712,6 +713,11 @@ @Override public String toSPARQLQueryString(boolean filtered) { + return toSPARQLQueryString(filtered, Collections.<String, String>emptyMap()); + } + + @Override + public String toSPARQLQueryString(boolean filtered, Map<String, String> prefixMap) { if(children.isEmpty()){ return "SELECT ?x0 WHERE {?x0 ?y ?z.}"; } @@ -724,7 +730,16 @@ sb.append(filter).append("\n"); } sb.append("}"); - return sb.toString(); + Query query = QueryFactory.create(sb.toString(), Syntax.syntaxARQ); + query.setPrefix("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); + query.setPrefix("rdfs", "http://www.w3.org/2000/01/rdf-schema#"); + + for (Entry<String, String> entry : prefixMap.entrySet()) { + String key = entry.getKey(); + String value = entry.getValue(); + query.setPrefix(key, value); + } + return query.toString(); } private void buildSPARQLQueryString(QueryTree<N> tree, StringBuilder sb, boolean filtered, List<String> filters){ @@ -785,7 +800,7 @@ l = iter.next(); if(l.getDatatype() == XSDDatatype.XSDinteger || l.getDatatype() == XSDDatatype.XSDint){ min = (l.getInt() < min.getInt()) ? l : min; - } else if(l.getDatatype() == XSDDatatype.XSDdouble){ + } else if(l.getDatatype() == XSDDatatype.XSDdouble || l.getDatatype() == XSDDatatype.XSDdecimal){ min = (l.getDouble() < min.getDouble()) ? l : min; } else if(l.getDatatype() == XSDDatatype.XSDdate){ min = (DatatypeConverter.parseDate(l.getLexicalForm()).compareTo(DatatypeConverter.parseDate(min.getLexicalForm())) == -1) ? l : min; @@ -802,7 +817,7 @@ l = iter.next(); if(l.getDatatype() == XSDDatatype.XSDinteger || l.getDatatype() == XSDDatatype.XSDint){ max = (l.getInt() > max.getInt()) ? l : max; - } else if(l.getDatatype() == XSDDatatype.XSDdouble){ + } else if(l.getDatatype() == XSDDatatype.XSDdouble || l.getDatatype() == XSDDatatype.XSDdecimal){ max = (l.getDouble() > max.getDouble()) ? l : max; } else if(l.getDatatype() == XSDDatatype.XSDdate){ max = (DatatypeConverter.parseDate(l.getLexicalForm()).compareTo(DatatypeConverter.parseDate(max.getLexicalForm())) == 1) ? l : max; Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/impl/QueryTreeFactoryImpl.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/impl/QueryTreeFactoryImpl.java 2013-01-22 13:22:29 UTC (rev 3888) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/impl/QueryTreeFactoryImpl.java 2013-01-22 21:41:16 UTC (rev 3889) @@ -247,7 +247,8 @@ if(lit.getDatatype() == XSDDatatype.XSDinteger || lit.getDatatype() == XSDDatatype.XSDdouble || lit.getDatatype() == XSDDatatype.XSDdate - || lit.getDatatype() == XSDDatatype.XSDint){ + || lit.getDatatype() == XSDDatatype.XSDint + || lit.getDatatype() == XSDDatatype.XSDdecimal){ subTree.addLiteral(lit); } tree.addChild(subTree, st.getPredicate().toString()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
Revision: 3888 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3888&view=rev Author: lorenz_b Date: 2013-01-22 13:22:29 +0000 (Tue, 22 Jan 2013) Log Message: ----------- Enabled config option to apply QTL on a local file with relativ path. Modified Paths: -------------- trunk/interfaces/src/main/java/org/dllearner/configuration/spring/ConfigurationBasedBeanDefinitionRegistryPostProcessor.java Modified: trunk/interfaces/src/main/java/org/dllearner/configuration/spring/ConfigurationBasedBeanDefinitionRegistryPostProcessor.java =================================================================== --- trunk/interfaces/src/main/java/org/dllearner/configuration/spring/ConfigurationBasedBeanDefinitionRegistryPostProcessor.java 2013-01-22 13:21:59 UTC (rev 3887) +++ trunk/interfaces/src/main/java/org/dllearner/configuration/spring/ConfigurationBasedBeanDefinitionRegistryPostProcessor.java 2013-01-22 13:22:29 UTC (rev 3888) @@ -3,6 +3,7 @@ import org.dllearner.configuration.IConfiguration; import org.dllearner.configuration.IConfigurationProperty; import org.dllearner.kb.KBFile; +import org.dllearner.kb.LocalModelBasedSparqlEndpointKS; import org.dllearner.kb.OWLFile; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanDefinition; @@ -95,7 +96,7 @@ /** * Add Base Directory Value to Beans which need it. * - * @param beanDefinition The curren Bean Definition + * @param beanDefinition The current Bean Definition */ private void addBaseDirectoryIfNeeded(BeanDefinition beanDefinition) { Class beanClass = null; @@ -105,7 +106,7 @@ throw new RuntimeException("Can't find class " + beanDefinition.getBeanClassName()); } /** Add Base Directory */ - if (beanClass.isAssignableFrom(KBFile.class) || beanClass.isAssignableFrom(OWLFile.class)) { + if (beanClass.isAssignableFrom(KBFile.class) || beanClass.isAssignableFrom(OWLFile.class) || beanClass.isAssignableFrom(LocalModelBasedSparqlEndpointKS.class)) { beanDefinition.getPropertyValues().add("baseDir", configuration.getBaseDir()); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-01-22 13:22:07
|
Revision: 3887 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3887&view=rev Author: lorenz_b Date: 2013-01-22 13:21:59 +0000 (Tue, 22 Jan 2013) Log Message: ----------- Enabled config option to apply QTL on a local file with relativ path. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java Modified: trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java 2013-01-22 12:44:46 UTC (rev 3886) +++ trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java 2013-01-22 13:21:59 UTC (rev 3887) @@ -1,5 +1,6 @@ package org.dllearner.kb; +import java.io.File; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; @@ -18,6 +19,7 @@ private OntModel model; private String fileName; + private String baseDir; public LocalModelBasedSparqlEndpointKS() { } @@ -34,6 +36,14 @@ return fileName; } + public String getBaseDir() { + return baseDir; + } + + public void setBaseDir(String baseDir) { + this.baseDir = baseDir; + } + public LocalModelBasedSparqlEndpointKS(URL ontologyURL) { this.fileName = ontologyURL.toString(); } @@ -44,9 +54,9 @@ @Override public void init() throws ComponentInitException { - Model baseModel = ModelFactory.createDefaultModel(); + Model baseModel = ModelFactory.createDefaultModel();System.out.println("Base: " + baseDir); // use the FileManager to find the input file - InputStream in = FileManager.get().open(fileName); + InputStream in = FileManager.get().open(baseDir + File.separator + fileName); if (in == null) { throw new IllegalArgumentException( "File: " + fileName + " not found"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2013-01-22 12:44:54
|
Revision: 3886 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3886&view=rev Author: lorenz_b Date: 2013-01-22 12:44:46 +0000 (Tue, 22 Jan 2013) Log Message: ----------- Enabled config option to apply QTL on a local file. Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java trunk/components-core/src/main/java/org/dllearner/core/AnnComponentManager.java trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java Modified: trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java 2013-01-22 11:27:57 UTC (rev 3885) +++ trunk/components-core/src/main/java/org/dllearner/algorithms/qtl/QTL.java 2013-01-22 12:44:46 UTC (rev 3886) @@ -53,6 +53,7 @@ import org.dllearner.core.options.ConfigOption; import org.dllearner.core.options.IntegerConfigOption; import org.dllearner.core.owl.Individual; +import org.dllearner.kb.LocalModelBasedSparqlEndpointKS; import org.dllearner.kb.SparqlEndpointKS; import org.dllearner.kb.sparql.CachingConciseBoundedDescriptionGenerator; import org.dllearner.kb.sparql.ConciseBoundedDescriptionGenerator; @@ -69,6 +70,7 @@ import com.hp.hpl.jena.query.ResultSetRewindable; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.Statement; +import com.hp.hpl.jena.rdf.model.StmtIterator; import com.hp.hpl.jena.util.iterator.Filter; /** @@ -112,6 +114,8 @@ private QueryTree<String> lgg; private SortedSet<String> lggInstances; + + private Set<String> objectNamespacesToIgnore = new HashSet<String>(); public static Collection<ConfigOption<?>> createConfigOptions() { Collection<ConfigOption<?>> options = new LinkedList<ConfigOption<?>>(); @@ -208,9 +212,13 @@ public void setMaxQueryTreeDepth(int maxQueryTreeDepth){ this.maxQueryTreeDepth = maxQueryTreeDepth; - cbdGenerator.setRecursionDepth(maxQueryTreeDepth); +// cbdGenerator.setRecursionDepth(maxQueryTreeDepth); } + public int getMaxQueryTreeDepth() { + return maxQueryTreeDepth; + } + public String getSPARQLQuery(){ if(lgg == null){ lgg = lggGenerator.getLGG(getQueryTrees(posExamples)); @@ -218,6 +226,10 @@ return lgg.toSPARQLQueryString(); } + public void setObjectNamespacesToIgnore(Set<String> namespacesToIgnore){ + this.objectNamespacesToIgnore = namespacesToIgnore; + } + public void setRestrictToNamespaces(List<String> namespaces){ cbdGenerator.setRestrictToNamespaces(namespaces); } @@ -237,12 +249,12 @@ Model model; QueryTree<String> tree; for(String resource : resources){ - if(logger.isDebugEnabled()){ - logger.debug("Tree for resource " + resource); - } + logger.info("Generating tree for " + resource); model = cbdGenerator.getConciseBoundedDescription(resource); + applyFilters(model); tree = treeCache.getQueryTree(resource, model); if(logger.isDebugEnabled()){ + logger.debug("Tree for resource " + resource); logger.debug(tree.getStringRepresentation()); } trees.add(tree); @@ -250,6 +262,19 @@ return trees; } + private void applyFilters(Model model){ + Statement st; + for(StmtIterator iter = model.listStatements(); iter.hasNext();){ + st = iter.next(); + for(String ns : objectNamespacesToIgnore){ + if(st.getObject().isURIResource() && st.getObject().asResource().getURI().startsWith(ns)){ + iter.remove(); + break; + } + } + } + } + private List<String> getKnownResources(){ return ListUtils.union(posExamples, negExamples); } @@ -305,7 +330,7 @@ if(logger.isDebugEnabled()){ logger.debug("LGG: \n" + lgg.getStringRepresentation()); } - + logger.info(lgg.toSPARQLQuery()); } @Override @@ -325,10 +350,14 @@ this.posExamples = convert(((PosNegLP)learningProblem).getPositiveExamples()); this.negExamples = convert(((PosNegLP)learningProblem).getNegativeExamples()); } - endpoint = endpointKS.getEndpoint(); + treeCache = new QueryTreeCache(); - treeCache = new QueryTreeCache(); - cbdGenerator = new CachingConciseBoundedDescriptionGenerator(new ConciseBoundedDescriptionGeneratorImpl(endpoint, cache)); + if(endpointKS instanceof LocalModelBasedSparqlEndpointKS){ + cbdGenerator = new CachingConciseBoundedDescriptionGenerator(new ConciseBoundedDescriptionGeneratorImpl(((LocalModelBasedSparqlEndpointKS) endpointKS).getModel())); + } else { + endpoint = endpointKS.getEndpoint(); + cbdGenerator = new CachingConciseBoundedDescriptionGenerator(new ConciseBoundedDescriptionGeneratorImpl(endpoint, cache)); + } cbdGenerator.setRecursionDepth(maxQueryTreeDepth); lggGenerator = new LGGGeneratorImpl<String>(); Modified: trunk/components-core/src/main/java/org/dllearner/core/AnnComponentManager.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/core/AnnComponentManager.java 2013-01-22 11:27:57 UTC (rev 3885) +++ trunk/components-core/src/main/java/org/dllearner/core/AnnComponentManager.java 2013-01-22 12:44:46 UTC (rev 3886) @@ -74,10 +74,11 @@ "org.dllearner.algorithms.properties.SubDataPropertyOfAxiomLearner", "org.dllearner.algorithms.DisjointClassesLearner", "org.dllearner.algorithms.SimpleSubclassLearner", -// "org.dllearner.algorithm.qtl.QTL", + "org.dllearner.algorithms.qtl.QTL", "org.dllearner.kb.KBFile", "org.dllearner.kb.OWLFile", "org.dllearner.kb.SparqlEndpointKS", + "org.dllearner.kb.LocalModelBasedSparqlEndpointKS", "org.dllearner.kb.sparql.SparqlKnowledgeSource", "org.dllearner.kb.sparql.simple.SparqlSimpleExtractor", "org.dllearner.learningproblems.PosNegLPStandard", Modified: trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java 2013-01-22 11:27:57 UTC (rev 3885) +++ trunk/components-core/src/main/java/org/dllearner/kb/LocalModelBasedSparqlEndpointKS.java 2013-01-22 12:44:46 UTC (rev 3886) @@ -4,6 +4,7 @@ import java.net.MalformedURLException; import java.net.URL; +import org.dllearner.core.ComponentAnn; import org.dllearner.core.ComponentInitException; import com.hp.hpl.jena.ontology.OntModel; @@ -12,25 +13,43 @@ import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.util.FileManager; +@ComponentAnn(name = "Local Endpoint", shortName = "local_sparql", version = 0.9) public class LocalModelBasedSparqlEndpointKS extends SparqlEndpointKS { private OntModel model; + private String fileName; - public LocalModelBasedSparqlEndpointKS(OntModel model) { - this.model = model; + public LocalModelBasedSparqlEndpointKS() { } public LocalModelBasedSparqlEndpointKS(String ontologyURL) throws MalformedURLException { this(new URL(ontologyURL)); } + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getFileName() { + return fileName; + } + public LocalModelBasedSparqlEndpointKS(URL ontologyURL) { + this.fileName = ontologyURL.toString(); + } + + public LocalModelBasedSparqlEndpointKS(OntModel model) { + this.model = model; + } + + @Override + public void init() throws ComponentInitException { Model baseModel = ModelFactory.createDefaultModel(); // use the FileManager to find the input file - InputStream in = FileManager.get().open(ontologyURL.toString()); + InputStream in = FileManager.get().open(fileName); if (in == null) { throw new IllegalArgumentException( - "File: " + ontologyURL + " not found"); + "File: " + fileName + " not found"); } // read the RDF/XML file baseModel.read(in, null); @@ -38,11 +57,6 @@ model = ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM_RDFS_INF, baseModel); } - @Override - public void init() throws ComponentInitException { - - } - public OntModel getModel() { return model; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |