From: <jen...@us...> - 2009-05-07 10:12:05
|
Revision: 1747 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=1747&view=rev Author: jenslehmann Date: 2009-05-07 10:11:58 +0000 (Thu, 07 May 2009) Log Message: ----------- mapping evaluator ctd. Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaLinkedGeoData.java trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaPoint.java trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaLinkedGeoData.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaLinkedGeoData.java 2009-05-07 08:48:00 UTC (rev 1746) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaLinkedGeoData.java 2009-05-07 10:11:58 UTC (rev 1747) @@ -60,6 +60,7 @@ private static double scoreThreshold = 0.8; private static StringDistance distance = new Jaro(); +// public static SparqlEndpoint dbpediaEndpoint = SparqlEndpoint.getEndpointDBpedia(); public static SparqlEndpoint dbpediaEndpoint = SparqlEndpoint.getEndpointLOCALDBpedia(); private static SparqlEndpoint geoDataEndpoint = SparqlEndpoint.getEndpointLOCALGeoData(); @@ -319,6 +320,8 @@ // perform string similarity // (we can use a variety of string matching heuristics) +// System.out.println(label); +// System.out.println(dbpediaPoint); double score = distance.score(label, dbpediaPoint.getLabel()); if(score > highestScore) { highestScore = score; Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaPoint.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaPoint.java 2009-05-07 08:48:00 UTC (rev 1746) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/DBpediaPoint.java 2009-05-07 10:11:58 UTC (rev 1747) @@ -20,6 +20,8 @@ package org.dllearner.scripts.matching; import java.net.URI; +import java.util.LinkedList; +import java.util.List; import org.dllearner.kb.sparql.SparqlQuery; @@ -49,7 +51,7 @@ * Constructs a DBpedia point using SPARQL. * @param uri URI of DBpedia resource. */ - public DBpediaPoint(URI uri) { + public DBpediaPoint(URI uri) throws Exception { super(0,0); this.uri = uri; @@ -57,8 +59,8 @@ String queryStr = "SELECT ?lat, ?long, ?label, ?type WHERE {"; queryStr += "<"+uri+"> <http://www.w3.org/2003/01/geo/wgs84_pos#lat> ?lat ."; queryStr += "<"+uri+"> <http://www.w3.org/2003/01/geo/wgs84_pos#long> ?long ."; - queryStr += "?object rdfs:label ?label . "; - queryStr += "OPTIONAL { <"+uri+" rdf:type ?type . "; + queryStr += "<"+uri+"> rdfs:label ?label . "; + queryStr += "OPTIONAL { <"+uri+"> rdf:type ?type . "; queryStr += "FILTER (!(?type LIKE <http://dbpedia.org/ontology/Resource>)) ."; queryStr += "FILTER (?type LIKE <http://dbpedia.org/ontology/%>) ."; queryStr += "} }"; @@ -66,16 +68,23 @@ SparqlQuery query = new SparqlQuery(queryStr, DBpediaLinkedGeoData.dbpediaEndpoint); ResultSet rs = query.send(); classes = new String[] { }; - int count = 0; + List<String> classList = new LinkedList<String>(); + if(!rs.hasNext()) { + throw new Exception("cannot construct point for " + uri + " (latitude/longitude missing?)"); + } + while(rs.hasNext()) { QuerySolution qs = rs.nextSolution(); geoLat = qs.getLiteral("lat").getDouble(); geoLong = qs.getLiteral("long").getDouble(); label = qs.getLiteral("label").getString(); - classes[count] = qs.get("type").toString(); - count++; + if(qs.contains("type")) { + classList.add(qs.get("type").toString()); + } } + + classes = classList.toArray(classes); } public DBpediaPoint(URI uri, String label, String[] classes, double geoLat, double geoLong, int decimalCount) { Modified: trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java =================================================================== --- trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java 2009-05-07 08:48:00 UTC (rev 1746) +++ trunk/src/dl-learner/org/dllearner/scripts/matching/Evaluation.java 2009-05-07 10:11:58 UTC (rev 1747) @@ -27,6 +27,9 @@ import java.util.Map; import java.util.Map.Entry; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; + /** * Performs an evaluation of a matching method method by analising it * on a test set. @@ -44,6 +47,8 @@ private double precision; private double recall; + private static Logger logger = Logger.getLogger(Evaluation.class); + // map from DBpedia to LinkedGeoData public Evaluation(Map<URI,URI> testMatches) throws IOException { @@ -63,7 +68,15 @@ // memory to efficiently evaluate a lot of parameter settings without // requiring to perform slow HTTP or SPARQL requests - DBpediaPoint dbpediaPoint = new DBpediaPoint(match.getKey()); + logger.trace("searching match for " + match.getKey() + "..."); + + DBpediaPoint dbpediaPoint = null; + try { + dbpediaPoint = new DBpediaPoint(match.getKey()); + } catch (Exception e) { + logger.debug(e.getMessage()); + continue; + } URI matchedURI = DBpediaLinkedGeoData.findGeoDataMatch(dbpediaPoint); URI testURI = match.getValue(); @@ -71,12 +84,15 @@ // no match found if(matchedURI == null) { noMatchCount++; + logger.trace(" ... no match found"); // correct match found } else if(matchedURI.equals(testURI)) { correctMatchCount++; + logger.trace(" ... " + testURI + " correctly detected"); // incorrect match found } else { incorrectMatchCount++; + logger.trace(" ... " + matchedURI + " detected, but " + testURI + " is correct"); } tests++; @@ -118,6 +134,8 @@ } public static void main(String args[]) throws IOException { + + Logger.getRootLogger().setLevel(Level.TRACE); // test file String testFile = "log/geodata/owlsameas_en.dat"; // map for collecting matches @@ -126,8 +144,13 @@ BufferedReader br = new BufferedReader(new FileReader(testFile)); String line; while ((line = br.readLine()) != null) { - String[] tmp = line.split(" "); - matches.put(URI.create(tmp[1]), URI.create(tmp[0])); + String[] tmp = line.split("\t"); +// System.out.println(line); +// for(String test : tmp) { +// System.out.println(test); +// } + + matches.put(URI.create(tmp[1]), URI.create(tmp[0] + "#id")); } // perform evaluation and print results Evaluation eval = new Evaluation(matches); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |