From: <ki...@us...> - 2012-07-23 14:25:51
|
Revision: 3803 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3803&view=rev Author: kirdie Date: 2012-07-23 14:25:40 +0000 (Mon, 23 Jul 2012) Log Message: ----------- tests for dbpedia should work now but there is still a problem with the solr index (down?). Modified Paths: -------------- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 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 2012-07-20 14:01:29 UTC (rev 3802) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 2012-07-23 14:25:40 UTC (rev 3803) @@ -1,22 +1,21 @@ package org.dllearner.algorithm.tbsl.learning; -import static org.junit.Assert.fail; -import java.io.BufferedWriter; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import java.io.File; -import java.io.FileWriter; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Collections; +import java.util.HashSet; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; -import java.util.Map.Entry; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; +import org.apache.log4j.Level; import org.apache.log4j.Logger; -import org.dllearner.algorithm.tbsl.Evaluation; import org.dllearner.algorithm.tbsl.util.Knowledgebase; import org.dllearner.common.index.Index; import org.dllearner.common.index.MappingBasedIndex; @@ -36,29 +35,30 @@ import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; +import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.ResultSet; +import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; /** @author konrad * */ public class SPARQLTemplateBasedLearner3Test { + /** */ + private static final String DBPEDIA_LIVE_ENDPOINT_URL_STRING = "http://live.dbpedia.org/sparql"; + private static Logger logger = Logger.getLogger(SPARQLTemplateBasedLearner3Test.class); - + private SPARQLTemplateBasedLearner3 oxfordLearner; private SPARQLTemplateBasedLearner3 dbpediaLiveLearner; - + private ExtractionDBCache oxfordCache = new ExtractionDBCache("cache"); private ExtractionDBCache dbpediaLiveCache = new ExtractionDBCache("cache"); SparqlEndpoint dbpediaLiveEndpoint; SparqlEndpoint oxfordEndpoint; - - private SortedMap<Integer, String> id2Question = new TreeMap<Integer, String>(); - private SortedMap<Integer, String> id2Query = new TreeMap<Integer, String>(); - private SortedMap<Integer, Object> id2Answer = new TreeMap<Integer, Object>(); - + private ResultSet executeDBpediaLiveSelect(String query){return SparqlQuery.convertJSONtoResultSet(dbpediaLiveCache.executeSelectQuery(dbpediaLiveEndpoint, query));} private ResultSet executeOxfordSelect(String query){return SparqlQuery.convertJSONtoResultSet(oxfordCache.executeSelectQuery(oxfordEndpoint, query));} - + private Knowledgebase createOxfordKnowledgebase(ExtractionDBCache cache) throws MalformedURLException { SparqlEndpoint endpoint = new SparqlEndpoint(new URL("http://lgd.aksw.org:8900/sparql"), Collections.singletonList("http://diadem.cs.ox.ac.uk"), Collections.<String>emptyList()); @@ -96,18 +96,18 @@ return kb; } - @Before - public void setup() throws MalformedURLException + @Before + public void setup() throws MalformedURLException + { + logger.setLevel(Level.ALL); + // oxfordEndpoint = new SparqlEndpoint(new URL("http://lgd.aksw.org:8900/sparql"), Collections.singletonList("http://diadem.cs.ox.ac.uk"), Collections.<String>emptyList()); + // oxfordLearner = new SPARQLTemplateBasedLearner3(createOxfordKnowledgebase(oxfordCache)); + } + + private void readQueries(final File file,final SortedMap<Integer, String> id2Question,final SortedMap<Integer, String> id2Query) { - dbpediaLiveEndpoint = new SparqlEndpoint(new URL("http://live.dbpedia.org/sparql"), Collections.singletonList("http://dbpedia.org"), Collections.<String>emptyList()); - dbpediaLiveLearner = new SPARQLTemplateBasedLearner3(createDBpediaLiveKnowledgebase(dbpediaLiveCache)); - -// oxfordEndpoint = new SparqlEndpoint(new URL("http://lgd.aksw.org:8900/sparql"), Collections.singletonList("http://diadem.cs.ox.ac.uk"), Collections.<String>emptyList()); -// oxfordLearner = new SPARQLTemplateBasedLearner3(createOxfordKnowledgebase(oxfordCache)); - } - - private void readQueries(File file) - { + id2Question.clear(); + id2Query.clear(); logger.info("Reading file containing queries and answers..."); try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); @@ -119,7 +119,7 @@ String question; String query; Set<String> answers; - + for(int i = 0; i < questionNodes.getLength(); i++){ Element questionNode = (Element) questionNodes.item(i); //read question ID @@ -128,18 +128,21 @@ question = ((Element)questionNode.getElementsByTagName("string").item(0)).getChildNodes().item(0).getNodeValue().trim(); //Read SPARQL query query = ((Element)questionNode.getElementsByTagName("query").item(0)).getChildNodes().item(0).getNodeValue().trim(); -// //Read answers -// answers = new HashSet<String>(); -// NodeList aswersNodes = questionNode.getElementsByTagName("answer"); -// for(int j = 0; j < aswersNodes.getLength(); j++){ -// Element answerNode = (Element) aswersNodes.item(j); -// answers.add(((Element)answerNode.getElementsByTagName("uri").item(0)).getChildNodes().item(0).getNodeValue().trim()); -// } - - id2Question.put(id, question); - id2Query.put(id, query); -// question2Answers.put(question, answers); - + // //Read answers + // answers = new HashSet<String>(); + // NodeList aswersNodes = questionNode.getElementsByTagName("answer"); + // for(int j = 0; j < aswersNodes.getLength(); j++){ + // Element answerNode = (Element) aswersNodes.item(j); + // answers.add(((Element)answerNode.getElementsByTagName("uri").item(0)).getChildNodes().item(0).getNodeValue().trim()); + // } + + if(!query.equals("OUT OF SCOPE")) // marker in qald benchmark file, will create holes interval of ids (e.g. 1,2,5,7) + { + id2Question.put(id, question); + id2Query.put(id, query); + } + // question2Answers.put(question, answers); + } } catch (DOMException e) { e.printStackTrace(); @@ -150,47 +153,108 @@ } catch (IOException e) { e.printStackTrace(); } -// StringBuilder sb = new StringBuilder(); -// for(Entry<Integer, String> e : id2Question.entrySet()){ -// sb.append(e.getKey()+ ": " + extractSentence(e.getValue()) + "\n"); -// } -// try { -// BufferedWriter out = new BufferedWriter(new FileWriter("questions.txt")); -// out.write(sb.toString()); -// out.close(); -// } -// catch (IOException e) -// { -// System.out.println("Exception "); -// -// } + // StringBuilder sb = new StringBuilder(); + // for(Entry<Integer, String> e : id2Question.entrySet()){ + // sb.append(e.getKey()+ ": " + extractSentence(e.getValue()) + "\n"); + // } + // try { + // BufferedWriter out = new BufferedWriter(new FileWriter("questions.txt")); + // out.write(sb.toString()); + // out.close(); + // } + // catch (IOException e) + // { + // System.out.println("Exception "); + // + // } logger.info("Done."); } - @Test public void testDBpedia() throws NoTemplateFoundException, ComponentInitException + private Set<String> getURIs(String endpoint, String query) { + Set<String> uris = new HashSet<String>(); + QueryEngineHTTP qe = new QueryEngineHTTP(DBPEDIA_LIVE_ENDPOINT_URL_STRING, query); + ResultSet rs = qe.execSelect(); + while(rs.hasNext()) + { + QuerySolution qs = rs.nextSolution(); + String uri = qs.getResource("?uri").getURI(); + uris.add(uri); + } + return uris; + } + + @Test public void testDBpedia() throws NoTemplateFoundException, ComponentInitException, MalformedURLException + { + SortedMap<Integer, String> id2Question = new TreeMap<Integer, String>(); + SortedMap<Integer, String> id2Query = new TreeMap<Integer, String>(); + SortedMap<Integer, Object> id2Answer = new TreeMap<Integer, Object>(); + + { + String s = "tbsl/evaluation/qald2-dbpedia-train.xml"; + URL url = getClass().getClassLoader().getResource(s); + assertFalse("resource not found: "+s,url==null); + readQueries(new File(url.getPath()),id2Question,id2Query); + } + assertTrue("no questions loaded",id2Question.size()>0); + logger.info(id2Question.size()+" questions loaded."); + assertTrue(String.format("no number of questions (%n) != number of queries (%n).",id2Question.size(),id2Query.size()), + id2Question.size()==id2Query.size()); + // get question and answer from file - readQueries(new File(getClass().getClassLoader().getResource("/tbsl/evaluation/qald2-dbpedia-train.xml").getPath())); + dbpediaLiveEndpoint = new SparqlEndpoint(new URL(DBPEDIA_LIVE_ENDPOINT_URL_STRING), Collections.singletonList("http://dbpedia.org"), Collections.<String>emptyList()); + + dbpediaLiveLearner = new SPARQLTemplateBasedLearner3(createDBpediaLiveKnowledgebase(dbpediaLiveCache)); dbpediaLiveLearner.init(); - dbpediaLiveLearner.setQuestion("houses with more than 2 bedrooms"); - dbpediaLiveLearner.learnSPARQLQueries(); - String learnedQuery = oxfordLearner.getBestSPARQLQuery(); + // TODO: use thread pools + for(int i: id2Query.keySet()) + { + if(i>3) break; // TODO: remove + String question = id2Question.get(i); + logger.trace("question: "+question); + String referenceQuery = id2Query.get(i); + // TODO: check for query isomorphism and leave out result comparison if possible + // TODO: only load the reference answers once and permanently cache them somehow (file, ehcache, serialization, ...) + // get the answers for the gold standard query + logger.trace("reference query: "+referenceQuery); + + Set<String> referenceURIs = getURIs(DBPEDIA_LIVE_ENDPOINT_URL_STRING,referenceQuery); + // learn query + dbpediaLiveLearner.setQuestion(question); + dbpediaLiveLearner.learnSPARQLQueries(); + String learnedQuery = dbpediaLiveLearner.getBestSPARQLQuery(); + + logger.trace(learnedQuery); + + Set<String> learnedURIs = getURIs(DBPEDIA_LIVE_ENDPOINT_URL_STRING,learnedQuery); + + logger.trace(referenceURIs); + logger.trace(learnedURIs); + assertTrue(referenceURIs.equals(learnedURIs)); + // get the answers for the learned query + // compare gold standard query and learned query answers + } + + +// dbpediaLiveLearner.setQuestion("houses with more than 2 bedrooms"); +// dbpediaLiveLearner.learnSPARQLQueries(); +// String learnedQuery = dbpediaLiveLearner.getBestSPARQLQuery(); +// logger.trace(learnedQuery); //fail("Not yet implemented"); } - - -// @Test public void test() throws NoTemplateFoundException, ComponentInitException -// { -// // get question and answer from file -// -// oxfordLearner.init(); -// oxfordLearner.setQuestion("houses with more than 2 bedrooms"); -// oxfordLearner.learnSPARQLQueries(); -// String learnedQuery = oxfordLearner.getBestSPARQLQuery(); -// -// //fail("Not yet implemented"); -// } + // @Test public void test() throws NoTemplateFoundException, ComponentInitException + // { + // // get question and answer from file + // + // oxfordLearner.init(); + // oxfordLearner.setQuestion("houses with more than 2 bedrooms"); + // oxfordLearner.learnSPARQLQueries(); + // String learnedQuery = oxfordLearner.getBestSPARQLQuery(); + // + // //fail("Not yet implemented"); + // } + } \ 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: <ki...@us...> - 2012-08-01 11:06:43
|
Revision: 3813 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3813&view=rev Author: kirdie Date: 2012-08-01 11:06:36 +0000 (Wed, 01 Aug 2012) Log Message: ----------- Junit test finished. generates file /log/SPARQLTemplateBasedLearner3Test.html. Modified Paths: -------------- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 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 2012-07-31 16:14:04 UTC (rev 3812) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 2012-08-01 11:06:36 UTC (rev 3813) @@ -1,5 +1,6 @@ package org.dllearner.algorithm.tbsl.learning; +import static org.junit.Assert.fail; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -12,7 +13,6 @@ import java.net.MalformedURLException; import java.text.DateFormat; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Date; @@ -23,6 +23,7 @@ import java.util.Set; import java.util.SortedMap; import java.util.SortedSet; +import java.util.Stack; import java.util.TreeSet; import java.util.concurrent.Callable; import java.util.concurrent.ConcurrentSkipListMap; @@ -36,6 +37,7 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; +import jjtraveler.Fail; import org.apache.log4j.FileAppender; import org.apache.log4j.Level; import org.apache.log4j.Logger; @@ -53,11 +55,9 @@ import org.dllearner.kb.sparql.ExtractionDBCache; import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlQuery; -import org.eclipse.jdt.annotation.NonNull; import org.ini4j.Options; import org.junit.Before; import org.junit.Test; -import org.openjena.atlas.logging.Log; import org.w3c.dom.DOMException; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -89,28 +89,32 @@ private static final File evaluationFolder = new File("log/evaluation"); @Test public void testDBpedia() throws Exception - {test("QALD 2 Benchmark", new File(getClass().getClassLoader().getResource("tbsl/evaluation/qald2-dbpedia-train.xml").getFile()),"http://live.dbpedia.org/sparql");} + {test("QALD 2 Benchmark", new File(getClass().getClassLoader().getResource("tbsl/evaluation/qald2-dbpedia-train.xml").getFile()), + SparqlEndpoint.getEndpointDBpediaLiveAKSW(),dbpediaLiveCache);} //@Test public void testOxford() {test(new File(""),"");} - public void test(String title, final File referenceXML,final String endpoint) throws ParserConfigurationException, SAXException, IOException, TransformerException, ComponentInitException, NoTemplateFoundException + public void test(String title, final File referenceXML,final SparqlEndpoint endpoint,ExtractionDBCache cache) throws ParserConfigurationException, SAXException, IOException, TransformerException, ComponentInitException, NoTemplateFoundException { - String dir = "cache/"+getClass().getSimpleName()+"/"; - new File(dir).mkdirs(); - File updatedReferenceXML=new File(dir+"updated_"+referenceXML.getName()); - if(!updatedReferenceXML.exists()) - { - logger.info("Generating updated reference for "+title); - generateUpdatedXML(referenceXML,updatedReferenceXML,endpoint); - } +// String dir = "cache/"+getClass().getSimpleName()+"/"; +// +// new File(dir).mkdirs(); +// File updatedReferenceXML=new File(dir+"updated_"+referenceXML.getName()); +// if(!updatedReferenceXML.exists()) +// { +// logger.info("Generating updated reference for "+title); +// generateUpdatedXML(referenceXML,updatedReferenceXML,endpoint,cache); +// } +// +// QueryTestData referenceTestData = readQueries(updatedReferenceXML); +// logger.info(title+" subset loaded with "+referenceTestData.id2Question.size()+" questions."); +// +// QueryTestData learnedTestData = generateTestData(referenceTestData.id2Question, dbpediaLiveKnowledgebase).generateAnswers(endpoint,cache); +// Evaluation evaluation = evaluate(referenceTestData, learnedTestData); +// logger.info(evaluation); +// evaluation.write(); + generateHTML(); - QueryTestData referenceTestData = readQueries(updatedReferenceXML); - logger.info(title+" subset loaded with "+referenceTestData.id2Question.size()+" questions."); - - QueryTestData learnedTestData = generateTestData(referenceTestData.id2Question, endpoint).generateAnswers(endpoint); - Evaluation evaluation = evaluate(referenceTestData, learnedTestData); - logger.info(evaluation); - evaluation.write(); - generateHTML(); +// if(evaluation.numberOfCorrectAnswers<3) {fail("only " + evaluation.numberOfCorrectAnswers+" correct answers.");} /* { logger.info("Comparing updated reference test data with learned test data:"); Diff queryTestDataDiff = diffTestData(referenceTestData,learnedTestData); @@ -253,51 +257,31 @@ return evaluation; } catch (Exception e){throw new RuntimeException(e);} - } - } + } - /** - * @param savedTestData - * @param newTestData - * @return - */ - private static Diff diffTestData(QueryTestData reference, QueryTestData newData) - { - // if(d.id2Question.size()!=e.id2Question.size()) - // logger.info("comparing test data a against b. number of questions: "+reference.id2Question.size()+" vs "+newData.id2Question.size()); - // if(reference.id2Question.size()!=newData.id2Question.size()) - // { - // logger.info("questions a: "+reference.id2Question.keySet()); - // logger.info("questions b: "+newData.id2Question.keySet()); - // } - Diff diff = new Diff(); - diff.aMinusB.addAll(reference.id2Question.keySet()); - diff.aMinusB.removeAll(newData.id2Question.keySet()); - - diff.bMinusA.addAll(newData.id2Question.keySet()); - diff.bMinusA.removeAll(reference.id2Question.keySet()); - - diff.intersection.addAll(reference.id2Question.keySet()); - diff.intersection.retainAll(newData.id2Question.keySet()); - - for(int i: diff.intersection) + @Override public boolean equals(Object obj) { - // the questions are the same - we don't care about the answer - if(reference.id2Question.get(i).equals(newData.id2Question.get(i))) - - if(reference.id2Answers.containsKey(i)&&!reference.id2Answers.get(i).equals(newData.id2Answers.get(i))) - { - // logger.info("different answers:"); - // logger.info("a: "+reference.id2Answers.get(i)); - // logger.info("b: "+newData.id2Answers.get(i)); - diff.differentAnswers.add(i); - } + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; + Evaluation other = (Evaluation) obj; + if (correctlyAnsweredQuestions == null) + { + if (other.correctlyAnsweredQuestions != null) return false; + } + else if (!correctlyAnsweredQuestions.equals(other.correctlyAnsweredQuestions)) return false; + if (incorrectlyAnsweredQuestions == null) + { + if (other.incorrectlyAnsweredQuestions != null) return false; + } + else if (!incorrectlyAnsweredQuestions.equals(other.incorrectlyAnsweredQuestions)) return false; + if (unansweredQuestions == null) + { + if (other.unansweredQuestions != null) return false; + } + else if (!unansweredQuestions.equals(other.unansweredQuestions)) return false; + return true; } - // if(!eMinusD.isEmpty()) logger.info("questions E/D: "+eMinusD+" ("+eMinusD.size()+" elements)"); - - - // TODO Auto-generated method stub - return diff; } public static class Diff @@ -307,6 +291,36 @@ final Set<Integer> intersection = new HashSet<Integer>(); final Set<Integer> differentAnswers = new HashSet<Integer>(); + public Diff(QueryTestData reference, QueryTestData newData) + { + // if(d.id2Question.size()!=e.id2Question.size()) + // logger.info("comparing test data a against b. number of questions: "+reference.id2Question.size()+" vs "+newData.id2Question.size()); + // if(reference.id2Question.size()!=newData.id2Question.size()) + // { + // logger.info("questions a: "+reference.id2Question.keySet()); + // logger.info("questions b: "+newData.id2Question.keySet()); + // } + aMinusB.addAll(reference.id2Question.keySet()); + aMinusB.removeAll(newData.id2Question.keySet()); + + bMinusA.addAll(newData.id2Question.keySet()); + bMinusA.removeAll(reference.id2Question.keySet()); + + intersection.addAll(reference.id2Question.keySet()); + intersection.retainAll(newData.id2Question.keySet()); + + for(int i: intersection) + { + // the questions are the same - we don't care about the answer + if(reference.id2Question.get(i).equals(newData.id2Question.get(i))) + + if(reference.id2Answers.containsKey(i)&&!reference.id2Answers.get(i).equals(newData.id2Answers.get(i))) + { + differentAnswers.add(i); + } + } + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); @@ -322,7 +336,7 @@ /** * @return the test data containing those of the given questions for which queries were found and the results of the queries */ - private QueryTestData generateTestData(SortedMap<Integer, String> id2Question,String endpoint) throws MalformedURLException, ComponentInitException + private QueryTestData generateTestData(SortedMap<Integer, String> id2Question,Knowledgebase kb) throws MalformedURLException, ComponentInitException { QueryTestData testData = new QueryTestData(); // -- only create the learner parameters once to save time -- @@ -336,7 +350,7 @@ ExecutorService service = Executors.newFixedThreadPool(10); for(int i: id2Question.keySet()) - {todo.add(Executors.callable(new LearnQueryRunnable(id2Question.get(i),i,endpoint, testData)));} + {todo.add(Executors.callable(new LearnQueryRunnable(id2Question.get(i),i, testData,kb)));} try{service.invokeAll(todo);} catch (InterruptedException e) {throw new RuntimeException(e);} // logger.debug("generating query for question \""+question+"\", id "+i); @@ -375,7 +389,7 @@ * @throws SAXException * @throws TransformerException */ - private void generateUpdatedXML(File originalFile, File updatedFile,String endpoint) throws ParserConfigurationException, SAXException, IOException, TransformerException + private void generateUpdatedXML(File originalFile, File updatedFile,SparqlEndpoint endpoint, ExtractionDBCache cache) throws ParserConfigurationException, SAXException, IOException, TransformerException { logger.info(String.format("Updating question file \"%s\" by removing questions without nonempty resource list answer and adding answers.\n" + " Saving the result to file \"%s\"",originalFile.getPath(),updatedFile.getPath())); @@ -412,7 +426,7 @@ if(!query.equals("OUT OF SCOPE")) // marker in qald benchmark file, will create holes interval of ids (e.g. 1,2,5,7) { - Set<String> uris = getUris(endpoint, query); + Set<String> uris = getUris(endpoint, query,cache); if(!uris.isEmpty()) { // remove reference answers of the benchmark because they are obtained from an other endpoint @@ -478,7 +492,7 @@ static final SparqlEndpoint dbpediaLiveEndpoint = SparqlEndpoint.getEndpointDBpediaLiveAKSW(); //static SparqlEndpoint oxfordEndpoint; - private ResultSet executeDBpediaLiveSelect(String query){return SparqlQuery.convertJSONtoResultSet(dbpediaLiveCache.executeSelectQuery(dbpediaLiveEndpoint, query));} + // private ResultSet executeDBpediaLiveSelect(String query){return SparqlQuery.convertJSONtoResultSet(dbpediaLiveCache.executeSelectQuery(dbpediaLiveEndpoint, query));} private static Knowledgebase createDBpediaLiveKnowledgebase(ExtractionDBCache cache) @@ -545,10 +559,10 @@ catch (ClassNotFoundException e){throw new RuntimeException(e);} } - public QueryTestData generateAnswers(String endpoint) + public QueryTestData generateAnswers(SparqlEndpoint endpoint, ExtractionDBCache cache) { if(!id2Answers.isEmpty()) {throw new AssertionError("Answers already existing.");} - for(int i:id2Query.keySet()) {id2Answers.put(i, getUris(endpoint, id2Query.get(i)));} + for(int i:id2Query.keySet()) {id2Answers.put(i, getUris(endpoint, id2Query.get(i),cache));} return this; } } @@ -571,8 +585,7 @@ Set<String> answers = new HashSet<String>(); Element questionNode = (Element) questionNodes.item(i); //read question ID - id = Integer.valueOf(questionNode.getAttribute("id")); - if(id>5) continue; // TODO: remove + id = Integer.valueOf(questionNode.getAttribute("id")); //Read question question = ((Element)questionNode.getElementsByTagName("string").item(0)).getChildNodes().item(0).getNodeValue().trim(); //Read SPARQL query @@ -630,15 +643,16 @@ return testData; } - protected static Set<String> getUris(final String endpoint, final String query) + protected static Set<String> getUris(final SparqlEndpoint endpoint, final String query, ExtractionDBCache cache) { if(query==null) {throw new AssertionError("query is null");} if(endpoint==null) {throw new AssertionError("endpoint is null");} if(!query.contains("SELECT")&&!query.contains("select")) {return Collections.<String>emptySet();} // abort when not a select query Set<String> uris = new HashSet<String>(); - QueryEngineHTTP qe = new QueryEngineHTTP(DBPEDIA_LIVE_ENDPOINT_URL_STRING, query); + // QueryEngineHTTP qe = new QueryEngineHTTP(DBPEDIA_LIVE_ENDPOINT_URL_STRING, query); ResultSet rs; - try{rs = qe.execSelect();} + // try{rs = qe.execSelect();} + try{rs = executeSelect(endpoint, query, cache);} catch(QueryExceptionHTTP e) { logger.error("Error getting uris for query "+query+" at endpoint "+endpoint,e); @@ -713,19 +727,21 @@ private static class LearnQueryRunnable implements Runnable { private final String question; - private final String endpoint; + // private final String endpoint; private final int id; private final QueryTestData testData; + private final Knowledgebase knowledgeBase; static private final PartOfSpeechTagger posTagger = new SynchronizedStanfordPartOfSpeechTagger(); static private final WordNet wordnet = new WordNet(); static private final Options options = new Options(); - public LearnQueryRunnable(String question, int id,String endpoint, QueryTestData testData) + + public LearnQueryRunnable(String question, int id, QueryTestData testData, Knowledgebase knowledgeBase) { this.question=question; this.id=id; - this.endpoint=endpoint; + this.knowledgeBase=knowledgeBase; this.testData=testData; } @@ -735,12 +751,13 @@ try { // learn query - SPARQLTemplateBasedLearner2 dbpediaLiveLearner = new SPARQLTemplateBasedLearner2(createDBpediaLiveKnowledgebase(dbpediaLiveCache),posTagger,wordnet,options); + // TODO: change to knowledgebase parameter + SPARQLTemplateBasedLearner2 learner = new SPARQLTemplateBasedLearner2(createDBpediaLiveKnowledgebase(dbpediaLiveCache),posTagger,wordnet,options); // SPARQLTemplateBasedLearner2 dbpediaLiveLearner = new SPARQLTemplateBasedLearner2(createDBpediaLiveKnowledgebase(dbpediaLiveCache)); - dbpediaLiveLearner.init(); - dbpediaLiveLearner.setQuestion(question); - dbpediaLiveLearner.learnSPARQLQueries(); - String learnedQuery = dbpediaLiveLearner.getBestSPARQLQuery(); + learner.init(); + learner.setQuestion(question); + learner.learnSPARQLQueries(); + String learnedQuery = learner.getBestSPARQLQuery(); if(learnedQuery!=null&&!learnedQuery.isEmpty()) { testData.id2Question.put(id, question); @@ -762,6 +779,24 @@ } } + public static String diffHTML(String title, Set<String> from, Set<String> to) + { + StringBuilder sb = new StringBuilder(); + sb.append("<h3>"+title+"</h3>"); + { + Set<String> addedStrings = new HashSet<String>(to); + addedStrings.removeAll(from); + + for(String added: addedStrings) {sb.append("<span style='color:green'>"+added+"</span></br>\n");} + } + sb.append('\n'); + { + Set<String> removedStrings = new HashSet<String>(from); + removedStrings.removeAll(to); + for(String removed: removedStrings) {sb.append("<span style='color:red'>"+removed+"</span></br>\n");} + } + return sb.toString(); + } /** Generates the HTML string content for one of the 3 colored bars which represent the correctly, incorrectly and unanswered question. * Also creates and links to a file which contains the questions.*/ @@ -783,34 +818,64 @@ return sb.toString(); } + static String createChangeHTML(File link, Evaluation from, Evaluation to) + { + try + { + PrintWriter out = new PrintWriter(link); + out.println("<html>\n<body>\n"); + out.println(diffHTML("Correctly Answered Questions", from.correctlyAnsweredQuestions, to.correctlyAnsweredQuestions)); + out.println(diffHTML("Incorrectly Answered Questions", from.incorrectlyAnsweredQuestions, to.incorrectlyAnsweredQuestions)); + out.println(diffHTML("Unanswered Questions", from.unansweredQuestions, to.unansweredQuestions)); + out.println("</body>\n</html>"); + out.close(); + } + catch (Exception e){throw new RuntimeException(e);} + + return "<a href='"+link.getAbsolutePath()+"'>change</a>"; + } + static void generateHTML() { StringBuilder sb = new StringBuilder(); - sb.append("<html><body><table style='width:100%'>"); + sb.append("<html>\n<body>\n<table style='width:100%'>\n"); SortedMap<Long,Evaluation> evaluations = Evaluation.read(); - SortedSet<Long> timestampsDescending = new TreeSet<Long>(Collections.reverseOrder()); - timestampsDescending.addAll(evaluations.keySet()); - for(long timestamp: timestampsDescending) +// SortedSet<Long> timestampsDescending = new TreeSet<Long>(Collections.reverseOrder()); +// timestampsDescending.addAll(evaluations.keySet()); + Evaluation last = null; + + Stack<String> stack = new Stack<String>(); // show reverse chronological order (we can't iterate in reverse order because of the diffs of the evaluations) + + for(long timestamp: evaluations.keySet()) { + StringBuilder sb2 = new StringBuilder(); try { File folder = new File("log/"+SPARQLTemplateBasedLearner3Test.class.getSimpleName()+"/"+timestamp); folder.mkdirs(); Evaluation e = evaluations.get(timestamp); - sb.append("<tr><td style='white-space: nowrap'>"); + sb2.append("<tr><td style='white-space: nowrap'>"); Date date = new Date(timestamp); - sb.append(DateFormat.getInstance().format(date)); - sb.append("</td><td width='100%'>"); - sb.append("<div style='width:100%;height:1em;border:solid 1px;'>"); - sb.append(createColoredColumn(new File(folder,"correctly_answered.txt"), "Correctly Answered Questions", "green", e.correctlyAnsweredQuestions, e.numberOfQuestions)); - sb.append(createColoredColumn(new File(folder,"incorrectly_answered.txt"), "Incorrectly Answered Questions", "orange", e.incorrectlyAnsweredQuestions, e.numberOfQuestions)); - sb.append(createColoredColumn(new File(folder,"unanswered.txt"), "Unanswered Questions", "red", e.unansweredQuestions, e.numberOfQuestions)); - sb.append("<span style='width:1000px;'></span>"); - sb.append("</td></tr>"); + sb2.append(DateFormat.getInstance().format(date)); + sb2.append("</td><td style='white-space: nowrap'>"); + if(last!=null) + { + if(last.equals(e)) {/*sb2.append("no change");*/} + else {sb2.append(createChangeHTML(new File(folder,"change.html"),last,e));} + } + sb2.append("</td><td width='100%'>"); + sb2.append("<div style='width:100%;height:1em;border:solid 1px;'>"); + sb2.append(createColoredColumn(new File(folder,"correctly_answered.txt"), "Correctly Answered Questions", "green", e.correctlyAnsweredQuestions, e.numberOfQuestions)); + sb2.append(createColoredColumn(new File(folder,"incorrectly_answered.txt"), "Incorrectly Answered Questions", "orange", e.incorrectlyAnsweredQuestions, e.numberOfQuestions)); + sb2.append(createColoredColumn(new File(folder,"unanswered.txt"), "Unanswered Questions", "red", e.unansweredQuestions, e.numberOfQuestions)); + sb2.append("<span style='width:1000px;'></span>"); + sb2.append("</td></tr>\n"); + last = e; + stack.push(sb2.toString()); } catch(Exception e) {logger.warn("error with evaluation from timestamp "+timestamp,e);} } - - sb.append("</table></body></html>"); + while(!stack.isEmpty()) {sb.append(stack.pop());} + sb.append("</table>\n</body>\n</html>"); try { PrintWriter out = new PrintWriter("log/"+SPARQLTemplateBasedLearner3Test.class.getSimpleName()+".html"); @@ -900,4 +965,6 @@ // // //fail("Not yet implemented"); // } + + private static ResultSet executeSelect(SparqlEndpoint endpoint, String query, ExtractionDBCache cache){return SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query));} } \ 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: <ki...@us...> - 2012-08-02 14:15:37
|
Revision: 3815 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3815&view=rev Author: kirdie Date: 2012-08-02 14:15:26 +0000 (Thu, 02 Aug 2012) Log Message: ----------- updated JUnit test. Modified Paths: -------------- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 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 2012-08-02 12:16:03 UTC (rev 3814) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 2012-08-02 14:15:26 UTC (rev 3815) @@ -1,6 +1,5 @@ package org.dllearner.algorithm.tbsl.learning; -import static org.junit.Assert.fail; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -16,15 +15,15 @@ import java.util.Collection; import java.util.Collections; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.SortedMap; -import java.util.SortedSet; import java.util.Stack; -import java.util.TreeSet; import java.util.concurrent.Callable; import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.ExecutorService; @@ -37,7 +36,6 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; -import jjtraveler.Fail; import org.apache.log4j.FileAppender; import org.apache.log4j.Level; import org.apache.log4j.Logger; @@ -66,7 +64,6 @@ import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.rdf.model.RDFNode; -import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; import com.hp.hpl.jena.sparql.engine.http.QueryExceptionHTTP; /** Tests TSBL against the qald2 benchmark test data with the DBpedia endpoint. @@ -95,26 +92,26 @@ public void test(String title, final File referenceXML,final SparqlEndpoint endpoint,ExtractionDBCache cache) throws ParserConfigurationException, SAXException, IOException, TransformerException, ComponentInitException, NoTemplateFoundException { -// String dir = "cache/"+getClass().getSimpleName()+"/"; -// -// new File(dir).mkdirs(); -// File updatedReferenceXML=new File(dir+"updated_"+referenceXML.getName()); -// if(!updatedReferenceXML.exists()) -// { -// logger.info("Generating updated reference for "+title); -// generateUpdatedXML(referenceXML,updatedReferenceXML,endpoint,cache); -// } -// -// QueryTestData referenceTestData = readQueries(updatedReferenceXML); -// logger.info(title+" subset loaded with "+referenceTestData.id2Question.size()+" questions."); -// -// QueryTestData learnedTestData = generateTestData(referenceTestData.id2Question, dbpediaLiveKnowledgebase).generateAnswers(endpoint,cache); -// Evaluation evaluation = evaluate(referenceTestData, learnedTestData); -// logger.info(evaluation); -// evaluation.write(); + // String dir = "cache/"+getClass().getSimpleName()+"/"; + // + // new File(dir).mkdirs(); + // File updatedReferenceXML=new File(dir+"updated_"+referenceXML.getName()); + // if(!updatedReferenceXML.exists()) + // { + // logger.info("Generating updated reference for "+title); + // generateUpdatedXML(referenceXML,updatedReferenceXML,endpoint,cache); + // } + // + // QueryTestData referenceTestData = readQueries(updatedReferenceXML); + // logger.info(title+" subset loaded with "+referenceTestData.id2Question.size()+" questions."); + // + // QueryTestData learnedTestData = generateTestData(referenceTestData.id2Question, dbpediaLiveKnowledgebase).generateAnswers(endpoint,cache); + // Evaluation evaluation = evaluate(referenceTestData, learnedTestData); + // logger.info(evaluation); + // evaluation.write(); generateHTML(); -// if(evaluation.numberOfCorrectAnswers<3) {fail("only " + evaluation.numberOfCorrectAnswers+" correct answers.");} + // if(evaluation.numberOfCorrectAnswers<3) {fail("only " + evaluation.numberOfCorrectAnswers+" correct answers.");} /* { logger.info("Comparing updated reference test data with learned test data:"); Diff queryTestDataDiff = diffTestData(referenceTestData,learnedTestData); @@ -146,7 +143,7 @@ private static Evaluation evaluate(QueryTestData reference, QueryTestData suspect) { // Diff d = diffTestData(reference,testData); - Evaluation evaluation = new Evaluation(); + Evaluation evaluation = new Evaluation(suspect); evaluation.numberOfQuestions = reference.id2Question.keySet().size(); for(int i: reference.id2Question.keySet()) @@ -179,7 +176,8 @@ static class Evaluation implements Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 2L; + final QueryTestData testData; int numberOfQuestions = 0; int numberOfAnsweredQuestions = 0; int numberOfCorrectAnswers = 0; @@ -189,6 +187,8 @@ final Set<String> incorrectlyAnsweredQuestions = new HashSet<String>(); final Set<String> correctlyAnsweredQuestions = new HashSet<String>(); + public Evaluation(QueryTestData testData) {this.testData = testData;} + void computePrecisionAndRecall() // we have at maximum one answer set per question { precision = numberOfCorrectAnswers / numberOfAnsweredQuestions; @@ -580,6 +580,7 @@ for(int i = 0; i < questionNodes.getLength(); i++) { + if(i>3) break; // TODO: remove String question; String query; Set<String> answers = new HashSet<String>(); @@ -786,31 +787,62 @@ { Set<String> addedStrings = new HashSet<String>(to); addedStrings.removeAll(from); - - for(String added: addedStrings) {sb.append("<span style='color:green'>"+added+"</span></br>\n");} + sb.append("<ul class='added'>"); + for(String added: addedStrings) {sb.append("<li>"+added+"</li>\n");} + sb.append("</ul>\n"); } sb.append('\n'); { Set<String> removedStrings = new HashSet<String>(from); removedStrings.removeAll(to); - for(String removed: removedStrings) {sb.append("<span style='color:red'>"+removed+"</span></br>\n");} + sb.append("<ul>"); + for(String removed: removedStrings) {sb.append("<li>"+removed+"</li>\n");} + sb.append("</ul>\n"); + } return sb.toString(); } /** Generates the HTML string content for one of the 3 colored bars which represent the correctly, incorrectly and unanswered question. * Also creates and links to a file which contains the questions.*/ - private static String createColoredColumn(/*@NonNull*/ File link,/*@NonNull*/ String title,/*@NonNull*/ String color,/*@NonNull*/ Collection<String> questions, int numberOfQuestionsTotal) - { - final StringBuilder sb = new StringBuilder(); - sb.append("<a href='"+link.getAbsolutePath()+"' title='"+title+"'>"); - sb.append("<div style='float:left;width:"+100.0*questions.size()/numberOfQuestionsTotal+"%;height:1em;background-color:"+color+";'></div>"); - sb.append("</a>"); + private static String createColoredColumn(/*@NonNull*/ File link,/*@NonNull*/ String title,/*@NonNull*/ String color,/*@NonNull*/ Collection<String> questions, int numberOfQuestionsTotal, boolean htmlAndIncludeQueriesAndAnswers, Evaluation evaluation) + { + final StringBuilder sb = new StringBuilder(); + sb.append("<a href='"+link.getAbsolutePath()+"' title='"+title+"'>"); + sb.append("<div style='float:left;width:"+100.0*questions.size()/numberOfQuestionsTotal+"%;height:1em;background-color:"+color+";'></div>"); + sb.append("</a>"); + // link.getParentFile().mkdirs(); try { PrintWriter out = new PrintWriter(link); - for(String question: questions) {out.println(question);} + Map<String,Integer> question2Id = new HashMap<String,Integer>(); + for(Integer i: evaluation.testData.id2Question.keySet()) {question2Id.put(evaluation.testData.id2Question.get(i),i);} + if(htmlAndIncludeQueriesAndAnswers) + { + out.println("<html>\n<head><title>"+title+"</title></head>\n<body>\n<table border='1'>"); + out.println("<tr><th>Question</th><th>Query</th><th>Answers</th></tr>"); + for(String question: questions) + { + Integer id = question2Id.get(question); + String[] answers = evaluation.testData.id2Answers.get(id).toArray(new String[0]); + StringBuilder sb2 = new StringBuilder(); + final int MAX = 10; + for(int i=0;i<answers.length;i++) + { + if(i>=MAX) + { + sb2.append("["+(answers.length-i+1)+" more...]"); + break; + } + sb2.append("<li><a href='"+answers[i]+"'>"+answers[i].replace("http://dbpedia.org/resource/","dbpedia:")+"</a></li>\n"); + } + out.println("<tr><td>"+question+"</td><td>"+evaluation.testData.id2Query.get(id)+"</td><td><ul>"+sb2.toString()+"</ul></td></tr>"); + } + + out.println("</table>\n</body>\n</html>"); + } else + {for(String question: questions) {out.println(question);}} out.close(); } catch (Exception e){throw new RuntimeException(e);} @@ -823,7 +855,16 @@ try { PrintWriter out = new PrintWriter(link); - out.println("<html>\n<body>\n"); + out.println("<html>"); + out.println("<head><style type='text/css'>"); + out.println(".added {text-color:green;}"); + out.println(".added li {list-style: none;margin-left: 0;padding-left: -2em;text-indent: -2em;color:darkgreen;}"); + out.println(".added li:before {content: '+ ';}"); + out.println(".removed li {list-style: none;margin-left: 0;padding-left: -2em;text-indent: -2em;color:darkred;}"); + out.println(".removed li:before {content: '- ';}"); + + out.println("</style></head>"); + out.println("<body>"); out.println(diffHTML("Correctly Answered Questions", from.correctlyAnsweredQuestions, to.correctlyAnsweredQuestions)); out.println(diffHTML("Incorrectly Answered Questions", from.incorrectlyAnsweredQuestions, to.incorrectlyAnsweredQuestions)); out.println(diffHTML("Unanswered Questions", from.unansweredQuestions, to.unansweredQuestions)); @@ -840,12 +881,12 @@ StringBuilder sb = new StringBuilder(); sb.append("<html>\n<body>\n<table style='width:100%'>\n"); SortedMap<Long,Evaluation> evaluations = Evaluation.read(); -// SortedSet<Long> timestampsDescending = new TreeSet<Long>(Collections.reverseOrder()); -// timestampsDescending.addAll(evaluations.keySet()); + // SortedSet<Long> timestampsDescending = new TreeSet<Long>(Collections.reverseOrder()); + // timestampsDescending.addAll(evaluations.keySet()); Evaluation last = null; - + Stack<String> stack = new Stack<String>(); // show reverse chronological order (we can't iterate in reverse order because of the diffs of the evaluations) - + for(long timestamp: evaluations.keySet()) { StringBuilder sb2 = new StringBuilder(); @@ -863,11 +904,11 @@ if(last.equals(e)) {/*sb2.append("no change");*/} else {sb2.append(createChangeHTML(new File(folder,"change.html"),last,e));} } - sb2.append("</td><td width='100%'>"); + sb2.append("</td><td width='100%'>"); sb2.append("<div style='width:100%;height:1em;border:solid 1px;'>"); - sb2.append(createColoredColumn(new File(folder,"correctly_answered.txt"), "Correctly Answered Questions", "green", e.correctlyAnsweredQuestions, e.numberOfQuestions)); - sb2.append(createColoredColumn(new File(folder,"incorrectly_answered.txt"), "Incorrectly Answered Questions", "orange", e.incorrectlyAnsweredQuestions, e.numberOfQuestions)); - sb2.append(createColoredColumn(new File(folder,"unanswered.txt"), "Unanswered Questions", "red", e.unansweredQuestions, e.numberOfQuestions)); + sb2.append(createColoredColumn(new File(folder,"correctly_answered.html"), "Correctly Answered Questions", "green", e.correctlyAnsweredQuestions, e.numberOfQuestions,true,e)); + sb2.append(createColoredColumn(new File(folder,"incorrectly_answered.html"), "Incorrectly Answered Questions", "orange", e.incorrectlyAnsweredQuestions, e.numberOfQuestions,true,e)); + sb2.append(createColoredColumn(new File(folder,"unanswered.txt"), "Unanswered Questions", "red", e.unansweredQuestions, e.numberOfQuestions,false,e)); sb2.append("<span style='width:1000px;'></span>"); sb2.append("</td></tr>\n"); last = e; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ki...@us...> - 2012-08-08 10:29:42
|
Revision: 3816 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3816&view=rev Author: kirdie Date: 2012-08-08 10:29:35 +0000 (Wed, 08 Aug 2012) Log Message: ----------- more log statements in junit test. Modified Paths: -------------- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 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 2012-08-02 14:15:26 UTC (rev 3815) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 2012-08-08 10:29:35 UTC (rev 3816) @@ -28,6 +28,7 @@ import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.FutureTask; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -92,23 +93,23 @@ public void test(String title, final File referenceXML,final SparqlEndpoint endpoint,ExtractionDBCache cache) throws ParserConfigurationException, SAXException, IOException, TransformerException, ComponentInitException, NoTemplateFoundException { - // String dir = "cache/"+getClass().getSimpleName()+"/"; - // - // new File(dir).mkdirs(); - // File updatedReferenceXML=new File(dir+"updated_"+referenceXML.getName()); - // if(!updatedReferenceXML.exists()) - // { - // logger.info("Generating updated reference for "+title); - // generateUpdatedXML(referenceXML,updatedReferenceXML,endpoint,cache); - // } - // - // QueryTestData referenceTestData = readQueries(updatedReferenceXML); - // logger.info(title+" subset loaded with "+referenceTestData.id2Question.size()+" questions."); - // - // QueryTestData learnedTestData = generateTestData(referenceTestData.id2Question, dbpediaLiveKnowledgebase).generateAnswers(endpoint,cache); - // Evaluation evaluation = evaluate(referenceTestData, learnedTestData); - // logger.info(evaluation); - // evaluation.write(); + String dir = "cache/"+getClass().getSimpleName()+"/"; + + new File(dir).mkdirs(); + File updatedReferenceXML=new File(dir+"updated_"+referenceXML.getName()); + if(!updatedReferenceXML.exists()) + { + logger.info("Generating updated reference for "+title); + generateUpdatedXML(referenceXML,updatedReferenceXML,endpoint,cache); + } + + QueryTestData referenceTestData = readQueries(updatedReferenceXML); + logger.info(title+" subset loaded with "+referenceTestData.id2Question.size()+" questions."); + + QueryTestData learnedTestData = generateTestData(referenceTestData.id2Question, dbpediaLiveKnowledgebase).generateAnswers(endpoint,cache); + Evaluation evaluation = evaluate(referenceTestData, learnedTestData); + logger.info(evaluation); + evaluation.write(); generateHTML(); // if(evaluation.numberOfCorrectAnswers<3) {fail("only " + evaluation.numberOfCorrectAnswers+" correct answers.");} @@ -346,13 +347,21 @@ // ---------------------------------------------------------- // int successes = 0; - List<Callable<Object>> todo = new ArrayList<Callable<Object>>(id2Question.size()); + // List<Callable<Object>> todo = new ArrayList<Callable<Object>>(id2Question.size()); + List<FutureTask> todo = new ArrayList<FutureTask>(id2Question.size()); ExecutorService service = Executors.newFixedThreadPool(10); for(int i: id2Question.keySet()) - {todo.add(Executors.callable(new LearnQueryRunnable(id2Question.get(i),i, testData,kb)));} - - try{service.invokeAll(todo);} catch (InterruptedException e) {throw new RuntimeException(e);} + { + Callable c = Executors.callable(new LearnQueryRunnable(id2Question.get(i),i, testData,kb)); + FutureTask task = new FutureTask(c); + todo.add(task); + } + for(FutureTask task : todo) + { + service.execute(task); + } + // try{service.invokeAll(todo);} catch (InterruptedException e) {throw new RuntimeException(e);} // logger.debug("generating query for question \""+question+"\", id "+i); // long start = System.currentTimeMillis(); // SPARQLTemplateBasedLearner2 dbpediaLiveLearner = new SPARQLTemplateBasedLearner2(dbpediaLiveKnowledgebase,posTagger,wordnet,options); @@ -409,11 +418,13 @@ for(int i = 0; i < questionNodes.getLength(); i++) { Element questionNode = (Element) questionNodes.item(i); - //keep the id to aid comparison between original and updated files + //keep the id to aid comparison between original and updated files id = Integer.valueOf(questionNode.getAttribute("id")); //Read question question = ((Element)questionNode.getElementsByTagName("string").item(0)).getChildNodes().item(0).getNodeValue().trim(); + + logger.trace("id "+id+", question: "+question); //Read SPARQL query query = ((Element)questionNode.getElementsByTagName("query").item(0)).getChildNodes().item(0).getNodeValue().trim(); // //Read answers @@ -477,7 +488,7 @@ // int successfullTestThreadRuns = 0; /** */ - private static final String DBPEDIA_LIVE_ENDPOINT_URL_STRING = "http://live.dbpedia.org/sparql"; + private static final String DBPEDIA_LIVE_ENDPOINT_URL_STRING = "http://dbpedia.org/sparql"; private static final Logger logger = Logger.getLogger(SPARQLTemplateBasedLearner3Test.class); @@ -522,7 +533,7 @@ Logger.getLogger(Parser.class).setLevel(Level.WARN); Logger.getLogger(SPARQLTemplateBasedLearner2.class).setLevel(Level.WARN); // Logger.getLogger(SPARQLTemplateBasedLearner2.class).setLevel(Level.INFO); - logger.setLevel(Level.INFO); // TODO: remove when finishing implementation of this class + logger.setLevel(Level.TRACE); // TODO: remove when finishing implementation of this class logger.addAppender(new FileAppender(new SimpleLayout(), "log/"+this.getClass().getSimpleName()+".log", false)); // oxfordEndpoint = new SparqlEndpoint(new URL("http://lgd.aksw.org:8900/sparql"), Collections.singletonList("http://diadem.cs.ox.ac.uk"), Collections.<String>emptyList()); @@ -580,7 +591,7 @@ for(int i = 0; i < questionNodes.getLength(); i++) { - if(i>3) break; // TODO: remove + // if(i>3) break; // TODO: remove String question; String query; Set<String> answers = new HashSet<String>(); @@ -807,11 +818,11 @@ * Also creates and links to a file which contains the questions.*/ private static String createColoredColumn(/*@NonNull*/ File link,/*@NonNull*/ String title,/*@NonNull*/ String color,/*@NonNull*/ Collection<String> questions, int numberOfQuestionsTotal, boolean htmlAndIncludeQueriesAndAnswers, Evaluation evaluation) { - final StringBuilder sb = new StringBuilder(); - sb.append("<a href='"+link.getAbsolutePath()+"' title='"+title+"'>"); - sb.append("<div style='float:left;width:"+100.0*questions.size()/numberOfQuestionsTotal+"%;height:1em;background-color:"+color+";'></div>"); - sb.append("</a>"); - + final StringBuilder sb = new StringBuilder(); + sb.append("<a href='"+link.getAbsolutePath()+"' title='"+title+"'>"); + sb.append("<div style='float:left;width:"+100.0*questions.size()/numberOfQuestionsTotal+"%;height:1em;background-color:"+color+";'></div>"); + sb.append("</a>"); + // link.getParentFile().mkdirs(); try { @@ -839,7 +850,7 @@ } out.println("<tr><td>"+question+"</td><td>"+evaluation.testData.id2Query.get(id)+"</td><td><ul>"+sb2.toString()+"</ul></td></tr>"); } - + out.println("</table>\n</body>\n</html>"); } else {for(String question: questions) {out.println(question);}} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ki...@us...> - 2012-08-09 10:46:22
|
Revision: 3819 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3819&view=rev Author: kirdie Date: 2012-08-09 10:46:16 +0000 (Thu, 09 Aug 2012) Log Message: ----------- html is escaped now. timeout for queries. Modified Paths: -------------- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 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 2012-08-08 12:41:16 UTC (rev 3818) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 2012-08-09 10:46:16 UTC (rev 3819) @@ -28,7 +28,9 @@ import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.Future; import java.util.concurrent.FutureTask; +import java.util.concurrent.TimeUnit; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -93,23 +95,23 @@ public void test(String title, final File referenceXML,final SparqlEndpoint endpoint,ExtractionDBCache cache) throws ParserConfigurationException, SAXException, IOException, TransformerException, ComponentInitException, NoTemplateFoundException { - String dir = "cache/"+getClass().getSimpleName()+"/"; - - new File(dir).mkdirs(); - File updatedReferenceXML=new File(dir+"updated_"+referenceXML.getName()); - if(!updatedReferenceXML.exists()) - { - logger.info("Generating updated reference for "+title); - generateUpdatedXML(referenceXML,updatedReferenceXML,endpoint,cache); - } - - QueryTestData referenceTestData = readQueries(updatedReferenceXML); - logger.info(title+" subset loaded with "+referenceTestData.id2Question.size()+" questions."); - - QueryTestData learnedTestData = generateTestData(referenceTestData.id2Question, dbpediaLiveKnowledgebase).generateAnswers(endpoint,cache); - Evaluation evaluation = evaluate(referenceTestData, learnedTestData); - logger.info(evaluation); - evaluation.write(); +// String dir = "cache/"+getClass().getSimpleName()+"/"; +// +// new File(dir).mkdirs(); +// File updatedReferenceXML=new File(dir+"updated_"+referenceXML.getName()); +// if(!updatedReferenceXML.exists()) +// { +// logger.info("Generating updated reference for "+title); +// generateUpdatedXML(referenceXML,updatedReferenceXML,endpoint,cache); +// } +// +// QueryTestData referenceTestData = readQueries(updatedReferenceXML); +// logger.info(title+" subset loaded with "+referenceTestData.id2Question.size()+" questions."); +// +// QueryTestData learnedTestData = generateTestData(referenceTestData.id2Question, dbpediaLiveKnowledgebase).generateAnswers(endpoint,cache); +// Evaluation evaluation = evaluate(referenceTestData, learnedTestData); +// logger.info(evaluation); +// evaluation.write(); generateHTML(); // if(evaluation.numberOfCorrectAnswers<3) {fail("only " + evaluation.numberOfCorrectAnswers+" correct answers.");} @@ -354,13 +356,18 @@ for(int i: id2Question.keySet()) { Callable c = Executors.callable(new LearnQueryRunnable(id2Question.get(i),i, testData,kb)); - FutureTask task = new FutureTask(c); + FutureTask task = new FutureTask(c); todo.add(task); } + List<Future> futures = new LinkedList<Future>(); for(FutureTask task : todo) { - service.execute(task); + futures.add(service.submit(task)); } + for(Future future:futures) try {future.get(30, TimeUnit.SECONDS);} catch (Exception e) {logger.warn("Timeout while generating test data.");} + service.shutdown(); +// try{service.awaitTermination(10, TimeUnit.MINUTES);} catch (InterruptedException e) {throw new RuntimeException("Timeout while generating test data.");} + // try{service.invokeAll(todo);} catch (InterruptedException e) {throw new RuntimeException(e);} // logger.debug("generating query for question \""+question+"\", id "+i); // long start = System.currentTimeMillis(); @@ -488,7 +495,7 @@ // int successfullTestThreadRuns = 0; /** */ - private static final String DBPEDIA_LIVE_ENDPOINT_URL_STRING = "http://dbpedia.org/sparql"; + private static final String DBPEDIA_LIVE_ENDPOINT_URL_STRING = "http://live.dbpedia.org/sparql"; private static final Logger logger = Logger.getLogger(SPARQLTemplateBasedLearner3Test.class); @@ -814,6 +821,8 @@ return sb.toString(); } + private static String escapePre(String s) {return s.replace("<", "<").replace(">", "&rt;");} + /** Generates the HTML string content for one of the 3 colored bars which represent the correctly, incorrectly and unanswered question. * Also creates and links to a file which contains the questions.*/ private static String createColoredColumn(/*@NonNull*/ File link,/*@NonNull*/ String title,/*@NonNull*/ String color,/*@NonNull*/ Collection<String> questions, int numberOfQuestionsTotal, boolean htmlAndIncludeQueriesAndAnswers, Evaluation evaluation) @@ -848,7 +857,7 @@ } sb2.append("<li><a href='"+answers[i]+"'>"+answers[i].replace("http://dbpedia.org/resource/","dbpedia:")+"</a></li>\n"); } - out.println("<tr><td>"+question+"</td><td>"+evaluation.testData.id2Query.get(id)+"</td><td><ul>"+sb2.toString()+"</ul></td></tr>"); + out.println("<tr><td>"+question+"</td><td><code><pre>"+escapePre(evaluation.testData.id2Query.get(id))+"</pre></code></td><td><ul><code><pre>"+escapePre(sb2.toString())+"</pre></code></ul></td></tr>"); } out.println("</table>\n</body>\n</html>"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ki...@us...> - 2012-08-10 13:51:34
|
Revision: 3822 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3822&view=rev Author: kirdie Date: 2012-08-10 13:51:26 +0000 (Fri, 10 Aug 2012) Log Message: ----------- finished junit test. added a small and fast one for just checking the last working queries. Modified Paths: -------------- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 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 2012-08-09 15:12:57 UTC (rev 3821) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 2012-08-10 13:51:26 UTC (rev 3822) @@ -1,5 +1,6 @@ package org.dllearner.algorithm.tbsl.learning; +import static org.junit.Assert.fail; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -57,14 +58,13 @@ import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlQuery; import org.ini4j.Options; -import org.junit.Before; -import org.junit.Test; import org.junit.*; import org.w3c.dom.DOMException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; +import cern.colt.Arrays; import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.rdf.model.RDFNode; @@ -89,38 +89,38 @@ // problem mit "In/IN which/WDT films/NNS did/VBD Julia/NNP Roberts/NNP as/RB well/RB as/IN Richard/NNP Gere/NNP play/NN" public class SPARQLTemplateBasedLearner3Test { + private static final boolean PRETAGGED = true; + private static final File evaluationFolder = new File("cache/evaluation"); - @Test public void testDBpedia() throws Exception - {test("QALD 2 Benchmark", new File(getClass().getClassLoader().getResource("tbsl/evaluation/qald2-dbpedia-train-tagged(ideal).xml").getFile()), + /*@Test*/ public void testDBpedia() throws Exception + {test("QALD 2 Benchmark ideally tagged", new File(getClass().getClassLoader().getResource("tbsl/evaluation/qald2-dbpedia-train-tagged(ideal).xml").getFile()), SparqlEndpoint.getEndpointDBpediaLiveAKSW(),dbpediaLiveCache);} //@Test public void testOxford() {test(new File(""),"");} - public void test(String title, final File referenceXML,final SparqlEndpoint endpoint,ExtractionDBCache cache) throws ParserConfigurationException, SAXException, IOException, TransformerException, ComponentInitException, NoTemplateFoundException - { - final boolean EVALUATE = true; - if(EVALUATE) + @Test public void justTestTheLastWorkingOnesDBpedia() throws Exception + { + SortedMap<Long,Evaluation> evaluations; + + if((evaluations=Evaluation.read()).isEmpty()) { - String dir = "cache/"+getClass().getSimpleName()+"/"; + testDBpedia(); + evaluations=Evaluation.read(); + } + + Evaluation latestEvaluation = evaluations.get(evaluations.lastKey()); + for(String question: latestEvaluation.correctlyAnsweredQuestions) + { + LearnStatus status = new LearnQueryCallable(question, 0,new QueryTestData() , dbpediaLiveKnowledgebase).call(); + if(status.type!=LearnStatus.Type.OK) {fail("Failed with question \""+question+"\", query status: "+status);} + } + } - new File(dir).mkdirs(); - File updatedReferenceXML=new File(dir+"updated_"+referenceXML.getName()); - if(!updatedReferenceXML.exists()) - { - logger.info("Generating updated reference for "+title); - generateUpdatedXML(referenceXML,updatedReferenceXML,endpoint,cache); - } + public void test(String title, final File referenceXML,final SparqlEndpoint endpoint,ExtractionDBCache cache) throws ParserConfigurationException, SAXException, IOException, TransformerException, ComponentInitException, NoTemplateFoundException + { + generateTestDataIfNecessaryAndEvaluateAndWrite(title,referenceXML,endpoint,cache); + generateHTML(title); - QueryTestData referenceTestData = readQueries(updatedReferenceXML); - logger.info(title+" subset loaded with "+referenceTestData.id2Question.size()+" questions."); - - QueryTestData learnedTestData = generateTestDataMultiThreaded(referenceTestData.id2Question, dbpediaLiveKnowledgebase).generateAnswers(endpoint,cache); - Evaluation evaluation = evaluate(referenceTestData, learnedTestData); - logger.info(evaluation); - evaluation.write(); - } - generateHTML(); - // if(evaluation.numberOfCorrectAnswers<3) {fail("only " + evaluation.numberOfCorrectAnswers+" correct answers.");} /* { logger.info("Comparing updated reference test data with learned test data:"); @@ -146,6 +146,33 @@ learnedTestData.write();*/ } + private void generateTestDataIfNecessaryAndEvaluateAndWrite(String title, final File referenceXML,final SparqlEndpoint endpoint,ExtractionDBCache cache) throws ParserConfigurationException, SAXException, IOException, TransformerException, ComponentInitException + { + String dir = "cache/"+getClass().getSimpleName()+"/"; + + new File(dir).mkdirs(); + File updatedReferenceXML=new File(dir+"updated_"+referenceXML.getName()); + if(!updatedReferenceXML.exists()) + { + logger.info("Generating updated reference for "+title); + generateUpdatedXML(referenceXML,updatedReferenceXML,endpoint,cache); + } + + QueryTestData referenceTestData = readQueries(updatedReferenceXML); + logger.info(title+" subset loaded with "+referenceTestData.id2Question.size()+" questions."); + + long startLearning = System.currentTimeMillis(); + QueryTestData learnedTestData = generateTestDataMultiThreaded(referenceTestData.id2Question, dbpediaLiveKnowledgebase); + long endLearning = System.currentTimeMillis(); + logger.info("finished learning after "+(endLearning-startLearning)/1000.0+"s"); + learnedTestData.generateAnswers(endpoint,cache); + long endGeneratingAnswers = System.currentTimeMillis(); + logger.info("finished generating answers in "+(endGeneratingAnswers-endLearning)/1000.0+"s"); + Evaluation evaluation = evaluate(referenceTestData, learnedTestData); + logger.info(evaluation); + evaluation.write(); + } + /** evaluates a data set against a reference. * @param reference the test data assumed to be correct. needs to contain the answers for all queries. * @param suspect the test data to compare with the reference. @@ -186,7 +213,7 @@ static class Evaluation implements Serializable { - private static final long serialVersionUID = 4L; + private static final long serialVersionUID = 5L; final QueryTestData testData; final QueryTestData referenceData; int numberOfQuestions = 0; @@ -333,7 +360,7 @@ } @Override public String toString() - { + { StringBuilder sb = new StringBuilder(); if(!aMinusB.isEmpty()) sb.append("questions a/b: "+aMinusB+" ("+aMinusB.size()+" elements)\n"); if(!bMinusA.isEmpty()) sb.append("questions b/a: "+bMinusA+" ("+bMinusA.size()+" elements)\n"); @@ -344,8 +371,46 @@ } } - enum LearnStatus {OK, TIMEOUT,EXCEPTION,NO_TEMPLATE_FOUND,QUERY_RESULT_EMPTY, NO_QUERY_LEARNED} - + private static class LearnStatus implements Serializable + { + public enum Type {OK, TIMEOUT, NO_TEMPLATE_FOUND,QUERY_RESULT_EMPTY,NO_QUERY_LEARNED,EXCEPTION} + + public final Type type; + + private static final long serialVersionUID = 1L; + public static final LearnStatus OK = new LearnStatus(Type.OK,null); + public static final LearnStatus TIMEOUT = new LearnStatus(Type.TIMEOUT,null); + public static final LearnStatus NO_TEMPLATE_FOUND = new LearnStatus(Type.NO_TEMPLATE_FOUND,null); + public static final LearnStatus QUERY_RESULT_EMPTY = new LearnStatus(Type.QUERY_RESULT_EMPTY,null); + public static final LearnStatus NO_QUERY_LEARNED = new LearnStatus(Type.NO_QUERY_LEARNED,null); + + public final Exception exception; + + private LearnStatus(Type type, Exception exception) {this.type=type;this.exception = exception;} + + public static LearnStatus exceptionStatus(Exception cause) + { + if (cause == null) throw new NullPointerException(); + return new LearnStatus(Type.EXCEPTION,cause); + } + + @Override public String toString() + { + switch(type) + { + case OK: return "OK"; + case TIMEOUT: return "timeout"; + case NO_TEMPLATE_FOUND: return "no template found"; + case QUERY_RESULT_EMPTY:return "query result empty"; + case NO_QUERY_LEARNED: return "no query learned"; + case EXCEPTION: return "<summary>Exception: <details>"+Arrays.toString(exception.getStackTrace())+"</details></summary>"; + default: throw new RuntimeException("switch type not handled"); + } + } + + } + // enum LearnStatus {OK, TIMEOUT,EXCEPTION,NO_TEMPLATE_FOUND,QUERY_RESULT_EMPTY, NO_QUERY_LEARNED;} + /** * @return the test data containing those of the given questions for which queries were found and the results of the queries */ @@ -536,6 +601,7 @@ static final SparqlEndpoint dbpediaLiveEndpoint = SparqlEndpoint.getEndpointDBpediaLiveAKSW(); //static SparqlEndpoint oxfordEndpoint; + private static final int MAXIMUM_QUESTIONS = Integer.MAX_VALUE; // private ResultSet executeDBpediaLiveSelect(String query){return SparqlQuery.convertJSONtoResultSet(dbpediaLiveCache.executeSelectQuery(dbpediaLiveEndpoint, query));} @@ -567,7 +633,7 @@ Logger.getLogger(Parser.class).setLevel(Level.WARN); Logger.getLogger(SPARQLTemplateBasedLearner2.class).setLevel(Level.WARN); // Logger.getLogger(SPARQLTemplateBasedLearner2.class).setLevel(Level.INFO); - logger.setLevel(Level.TRACE); // TODO: remove when finishing implementation of this class + logger.setLevel(Level.INFO); // TODO: remove when finishing implementation of this class logger.addAppender(new FileAppender(new SimpleLayout(), "log/"+this.getClass().getSimpleName()+".log", false)); // oxfordEndpoint = new SparqlEndpoint(new URL("http://lgd.aksw.org:8900/sparql"), Collections.singletonList("http://diadem.cs.ox.ac.uk"), Collections.<String>emptyList()); @@ -632,7 +698,7 @@ for(int i = 0; i < questionNodes.getLength(); i++) { - // if(i>3) break; // TODO: remove + if(i>=MAXIMUM_QUESTIONS) break; // TODO: remove String question; String query; Set<String> answers = new HashSet<String>(); @@ -785,7 +851,7 @@ private final QueryTestData testData; private final Knowledgebase knowledgeBase; - static private final PartOfSpeechTagger posTagger = new SynchronizedStanfordPartOfSpeechTagger(); + static private final PartOfSpeechTagger posTagger = PRETAGGED? null: new SynchronizedStanfordPartOfSpeechTagger(); static private final WordNet wordnet = new WordNet(); static private final Options options = new Options(); @@ -832,7 +898,7 @@ { logger.error(String.format("Exception for question \"%s\": %s",question,e.getLocalizedMessage())); e.printStackTrace(); - return LearnStatus.EXCEPTION; + return LearnStatus.exceptionStatus(e); } return LearnStatus.OK; } @@ -917,9 +983,9 @@ { Integer id = question2Id.get(question); if(id==null) {System.err.println(question);continue;} - out.println( - "<tr><td>"+question+"</td>"+ - "<td>"+evaluation.testData.id2LearnStatus.get(id)+"</td></tr>"); + out.println( + "<tr><td>"+question+"</td>"+ + "<td>"+evaluation.testData.id2LearnStatus.get(id)+"</td></tr>"); } } out.println("</table>\n</body>\n</html>"); @@ -935,7 +1001,7 @@ try { PrintWriter out = new PrintWriter(link); - out.println("<html>"); + out.println("<!DOCTYPE html><html>"); out.println("<head><style type='text/css'>"); out.println(".added {text-color:green;}"); out.println(".added li {list-style: none;margin-left: 0;padding-left: -2em;text-indent: -2em;color:darkgreen;}"); @@ -956,10 +1022,10 @@ return "<a href='"+link.getAbsolutePath()+"'>change</a>"; } - static void generateHTML() + static void generateHTML(String title) { StringBuilder sb = new StringBuilder(); - sb.append("<html>\n<body>\n<table style='width:100%'>\n"); + sb.append("<!DOCTYPE html><html><head><title>"+title+"</title></head>\n<body>\n<table style='width:100%'>\n"); SortedMap<Long,Evaluation> evaluations = Evaluation.read(); // SortedSet<Long> timestampsDescending = new TreeSet<Long>(Collections.reverseOrder()); // timestampsDescending.addAll(evaluations.keySet()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-08-13 06:15:32
|
Revision: 3825 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3825&view=rev Author: lorenz_b Date: 2012-08-13 06:15:24 +0000 (Mon, 13 Aug 2012) Log Message: ----------- Testing new learning. Modified Paths: -------------- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 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 2012-08-13 06:12:58 UTC (rev 3824) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 2012-08-13 06:15:24 UTC (rev 3825) @@ -10,7 +10,9 @@ import java.io.ObjectOutputStream; import java.io.PrintWriter; import java.io.Serializable; +import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; +import java.net.URLDecoder; import java.text.DateFormat; import java.util.Collection; import java.util.Collections; @@ -50,6 +52,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.common.index.HierarchicalIndex; import org.dllearner.common.index.Index; import org.dllearner.common.index.MappingBasedIndex; import org.dllearner.common.index.SOLRIndex; @@ -95,7 +98,7 @@ /*@Test*/ public void testDBpedia() throws Exception {test("QALD 2 Benchmark ideally tagged", new File(getClass().getClassLoader().getResource("tbsl/evaluation/qald2-dbpedia-train-tagged(ideal).xml").getFile()), - SparqlEndpoint.getEndpointDBpediaLiveAKSW(),dbpediaLiveCache);} + SparqlEndpoint.getEndpointDBpedia(),dbpediaLiveCache);} //@Test public void testOxford() {test(new File(""),"");} @Test public void justTestTheLastWorkingOnesDBpedia() throws Exception @@ -428,18 +431,18 @@ Map<Integer,Future<LearnStatus>> futures = new HashMap<Integer,Future<LearnStatus>>(); // List<FutureTask> todo = new ArrayList<FutureTask>(id2Question.size()); - ExecutorService service = Executors.newFixedThreadPool(10); + ExecutorService service = Executors.newFixedThreadPool(1); for(int i: id2Question.keySet()) - { + {//if(i != 78)continue; futures.put(i,service.submit(new LearnQueryCallable(id2Question.get(i),i, testData,kb))); } for(int i: id2Question.keySet()) - { + {//if(i != 78)continue; String question = id2Question.get(i); try { - testData.id2LearnStatus.put(i,futures.get(i).get(30, TimeUnit.SECONDS)); + testData.id2LearnStatus.put(i,futures.get(i).get(30, TimeUnit.MINUTES)); } catch (InterruptedException e) { @@ -613,7 +616,9 @@ // resourcesIndex.setSortField("pagerank"); Index classesIndex = new SOLRIndex("http://dbpedia.aksw.org:8080/solr/dbpedia_classes"); Index propertiesIndex = new SOLRIndex("http://dbpedia.aksw.org:8080/solr/dbpedia_properties"); - + SOLRIndex boa_propertiesIndex = new SOLRIndex("http://139.18.2.173:8080/solr/boa_fact_detail"); + boa_propertiesIndex.setSortField("boa-score"); + propertiesIndex = new HierarchicalIndex(boa_propertiesIndex, propertiesIndex); MappingBasedIndex mappingIndex= new MappingBasedIndex( SPARQLTemplateBasedLearner2.class.getClassLoader().getResource("test/dbpedia_class_mappings.txt").getPath(), SPARQLTemplateBasedLearner2.class.getClassLoader().getResource("test/dbpedia_resource_mappings.txt").getPath(), @@ -786,7 +791,7 @@ if(node!=null&&node.isResource()) { String uri=node.asResource().getURI(); - uris.add(uri); + uris.add(urlDecode(uri)); } else // there is no variable "uri" { @@ -799,7 +804,7 @@ { variable = "?"+varName; String uri=node2.asResource().getURI(); - uris.add(uri); + uris.add(urlDecode(uri)); continue resultsetloop; } } @@ -808,6 +813,17 @@ } return uris; } + + private static String urlDecode(String url){ + String decodedURL = null; + try { + decodedURL = URLDecoder.decode(url, "UTF-8"); + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return decodedURL; + } // private ResultSet executeOxfordSelect(String query){return SparqlQuery.convertJSONtoResultSet(oxfordCache.executeSelectQuery(oxfordEndpoint, query));} @@ -871,7 +887,7 @@ { // learn query // TODO: change to knowledgebase parameter - SPARQLTemplateBasedLearner2 learner = new SPARQLTemplateBasedLearner2(createDBpediaLiveKnowledgebase(dbpediaLiveCache),posTagger,wordnet,options); + SPARQLTemplateBasedLearner3 learner = new SPARQLTemplateBasedLearner3(createDBpediaLiveKnowledgebase(dbpediaLiveCache),posTagger,wordnet,options); // SPARQLTemplateBasedLearner2 dbpediaLiveLearner = new SPARQLTemplateBasedLearner2(createDBpediaLiveKnowledgebase(dbpediaLiveCache)); learner.init(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-08-22 13:41:14
|
Revision: 3828 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3828&view=rev Author: lorenz_b Date: 2012-08-22 13:41:04 +0000 (Wed, 22 Aug 2012) Log Message: ----------- Added missing init method in UNIT test. Modified Paths: -------------- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 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 2012-08-22 13:40:11 UTC (rev 3827) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 2012-08-22 13:41:04 UTC (rev 3828) @@ -178,10 +178,12 @@ { // see http://jena.apache.org/documentation/javadoc/jena/com/hp/hpl/jena/rdf/model/Model.html#read%28java.io.InputStream,%20java.lang.String,%20java.lang.String%29 String ending = s.substring(s.lastIndexOf('.')+1, s.length()); - String type = (ending.equals("ttl")||ending.equals("nt"))?"N3":ending.equals("owl")?"RDF/XML":String.valueOf(Integer.valueOf("filetype "+ending+" not handled.")); + String type = (ending.equals("ttl")||ending.equals("nt"))?"TURTLE":ending.equals("owl")?"RDF/XML":String.valueOf(Integer.valueOf("filetype "+ending+" not handled.")); // switch(type) {case "ttl":type="TURTLE";break;case "owl":type="RDF/XML";break;default:throw new RuntimeException("filetype "+ending+" not handled.");} // no Java 1.7 :-( - try{m.read(getClass().getClassLoader().getResourceAsStream("oxford/"+s),null, type);} - catch(RuntimeException e) {throw new RuntimeException("Could not read into model: "+s,e);} + try{ +// m.read(new FileInputStream(new File("/home/lorenz/arbeit/papers/question-answering-iswc-2012/data/"+s)), null, type);}catch (FileNotFoundException e) {} + m.read(getClass().getClassLoader().getResourceAsStream("oxford/"+s),null, type);} + catch(RuntimeException e) {throw new RuntimeException("Could not read into model: "+s,e);} } // test("Oxford evaluation questions", new File(getClass().getClassLoader().getResource("tbsl/evaluation/qald2-dbpedia-train-tagged(ideal).xml").getFile()), // SparqlEndpoint.getEndpointDBpediaLiveAKSW(),dbpediaLiveCache); @@ -994,6 +996,11 @@ ); learner = new SPARQLTemplateBasedLearner2(model,mappingIndex,pretagged?null:POSTaggerHolder.posTagger); + try { + learner.init(); + } catch (ComponentInitException e) { + e.printStackTrace(); + } } @@ -1024,7 +1031,7 @@ } catch(Exception e) { - logger.error(String.format("Exception for question \"%s\": %s",question,e.getLocalizedMessage())); + logger.error(String.format("Exception for question %d \"%s\": %s",id, question,e.getLocalizedMessage())); e.printStackTrace(); return LearnStatus.exceptionStatus(e); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lor...@us...> - 2012-08-23 13:13:51
|
Revision: 3833 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3833&view=rev Author: lorenz_b Date: 2012-08-23 13:13:39 +0000 (Thu, 23 Aug 2012) Log Message: ----------- Set lexicon in learning algorithm for Oxford knowledgebase. Modified Paths: -------------- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 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 2012-08-23 12:55:25 UTC (rev 3832) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner3Test.java 2012-08-23 13:13:39 UTC (rev 3833) @@ -864,6 +864,8 @@ learner = new SPARQLTemplateBasedLearner2(model,mappingIndex,pretagged?null:POSTaggerHolder.posTagger); try {learner.init();} catch (ComponentInitException e) {throw new RuntimeException(e);} + learner.setGrammarFiles(new String[]{"tbsl/lexicon/english.lex","tbsl/lexicon/english_oxford.lex"}); + learner.setUseDomainRangeRestriction(false); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |