From: <lor...@us...> - 2011-05-31 09:53:17
|
Revision: 2842 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2842&view=rev Author: lorenz_b Date: 2011-05-31 09:53:10 +0000 (Tue, 31 May 2011) Log Message: ----------- Added additional query generator which is ranks the URI candidates by string similarity. Made LingPipeNER object creation in Preprocessor class static, because otherwise the dictionary for LingPipe is loaded every time. Extended Eval script. Reverted to Solr 1.4.1 until new index for Solr 3.1 is created . Modified Paths: -------------- trunk/components-ext/pom.xml trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/ltag/parser/Preprocessor.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/LingPipeNER.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/StanfordPartOfSpeechTagger.java trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/Evaluation.java Added Paths: ----------- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/MultithreadedSPARQLQueryExecutor.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/Similarity.java Modified: trunk/components-ext/pom.xml =================================================================== --- trunk/components-ext/pom.xml 2011-05-30 09:14:36 UTC (rev 2841) +++ trunk/components-ext/pom.xml 2011-05-31 09:53:10 UTC (rev 2842) @@ -46,7 +46,7 @@ <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-core</artifactId> - <version>3.1.0</version> + <version>1.4.1</version> <type>jar</type> <scope>compile</scope> </dependency> Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner.java 2011-05-30 09:14:36 UTC (rev 2841) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner.java 2011-05-31 09:53:10 UTC (rev 2842) @@ -3,7 +3,9 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -23,7 +25,7 @@ import org.dllearner.algorithm.tbsl.sparql.SlotType; import org.dllearner.algorithm.tbsl.sparql.Template; import org.dllearner.algorithm.tbsl.templator.Templator; -import org.dllearner.core.ActiveLearningAlgorithm; +import org.dllearner.algorithm.tbsl.util.Similarity; import org.dllearner.core.Oracle; import org.dllearner.core.SparqlQueryLearningAlgorithm; import org.dllearner.kb.sparql.ExtractionDBCache; @@ -39,8 +41,12 @@ import com.jamonapi.Monitor; import com.jamonapi.MonitorFactory; -public class SPARQLTemplateBasedLearner implements ActiveLearningAlgorithm, SparqlQueryLearningAlgorithm{ +public class SPARQLTemplateBasedLearner implements SparqlQueryLearningAlgorithm{ + enum Ranking{ + LUCENE, SIMILARITY, NONE + } + private static final Logger logger = Logger.getLogger(SPARQLTemplateBasedLearner.class); private Monitor mon = MonitorFactory.getTimeMonitor("stbl"); @@ -48,8 +54,9 @@ private static final String SOLR_SERVER_URL = "http://139.18.2.173:8080/apache-solr-1.4.1"; private static final int RECURSION_DEPTH = 2; - private boolean USE_LUCENE_RANKING = true; + private Ranking ranking = Ranking.SIMILARITY; private boolean useRemoteEndpointValidation = true; + private boolean stopIfQueryResultNotEmpty = true; private SparqlEndpoint endpoint = SparqlEndpoint.getEndpointDBpediaLiveAKSW(); private ExtractionDBCache cache = new ExtractionDBCache("cache"); @@ -99,6 +106,10 @@ this.useRemoteEndpointValidation = useRemoteEndpointValidation; } + public void setRanking(Ranking ranking) { + this.ranking = ranking; + } + public void learnSPARQLQueries() throws NoTemplateFoundException{ learnedSPARQLQueries = new HashMap<String, List<String>>(); //generate SPARQL query templates @@ -116,12 +127,7 @@ } //generate SPARQL query candidates - Set<? extends Query> sparqlQueryCandidates; - if(USE_LUCENE_RANKING){ - sparqlQueryCandidates = getRatedSPARQLQueryCandidates(templates); - } else { - sparqlQueryCandidates = getSPARQLQueryCandidates(templates); - } + Collection<? extends Query> sparqlQueryCandidates = getSPARQLQueryCandidates(templates, ranking); //test candidates if(useRemoteEndpointValidation){ //on remote endpoint @@ -147,33 +153,14 @@ return workingModel; } -// private List<String> getSPARQLQueryCandidates(Set<Template> templates){ -// logger.info("Generating candidate SPARQL queries..."); -// mon.start(); -// List<String> queries = new ArrayList<String>(); -// Query query; -// for(Template template : templates){ -// query = template.getQuery(); -// queries.add(query.toString()); -// for(Slot slot : template.getSlots()){ -// Set<String> tmp = new HashSet<String>(); -// String var = slot.getAnchor(); -// List<String> words = slot.getWords(); -// for(String uri : getCandidateURIs(slot)){ -// for(String q : queries){ -// tmp.add(q.replace("?" + var, "<" + uri + ">")); -// } -// } -// if(!words.isEmpty()){ -// queries.clear(); -// queries.addAll(tmp); -// } -// } -// } -// mon.stop(); -// logger.info("Done in " + mon.getLastValue() + "ms."); -// return queries; -// } + private Collection<? extends Query> getSPARQLQueryCandidates(Set<Template> templates, Ranking ranking){ + switch(ranking){ + case LUCENE: return getSPARQLQueryCandidatesSortedByLucene(templates); + case SIMILARITY: return getSPARQLQueryCandidatesSortedBySimilarity(templates); + case NONE: return getSPARQLQueryCandidates(templates); + default: return null; + } + } private Set<Query> getSPARQLQueryCandidates(Set<Template> templates){ logger.info("Generating candidate SPARQL queries..."); @@ -233,7 +220,7 @@ return query2Score; } - private Set<RatedQuery> getRatedSPARQLQueryCandidates(Set<Template> templates){ + private Set<RatedQuery> getSPARQLQueryCandidatesSortedByLucene(Set<Template> templates){ logger.info("Generating candidate SPARQL queries..."); mon.start(); SortedSet<RatedQuery> ratedQueries = new TreeSet<RatedQuery>(); @@ -265,6 +252,35 @@ return ratedQueries; } + private List<Query> getSPARQLQueryCandidatesSortedBySimilarity(Set<Template> templates){ + logger.info("Generating candidate SPARQL queries..."); + mon.start(); + List<Query> queries = new ArrayList<Query>(); + + for(Template template : templates){ + queries.add(template.getQuery()); + for(Slot slot : template.getSlots()){ + List<Query> tmp = new ArrayList<Query>(); + String var = slot.getAnchor(); + List<String> words = slot.getWords(); + for(String uri : getCandidateURIsSortedBySimilarity(slot)){ + for(Query query : queries){ + Query newQuery = new Query(query); + newQuery.replaceVarWithURI(var, uri); + tmp.add(newQuery); + } + } + if(!words.isEmpty()){ + queries.clear(); + queries.addAll(tmp); + } + } + } + mon.stop(); + logger.info("Done in " + mon.getLastValue() + "ms."); + return queries; + } + private Set<String> getCandidateURIs(Slot slot){ logger.info("Generating candidate URIs for " + slot.getWords() + "..."); mon.start(); @@ -287,6 +303,59 @@ return uris; } + private List<String> getCandidateURIsSortedBySimilarity(Slot slot){ + List<String> sortedURIs = new ArrayList<String>(); + + SolrSearch index = getIndexBySlotType(slot); + + SortedSet<String> tmp; + List<String> uris; + for(String word : slot.getWords()){ + tmp = new TreeSet<String>(new StringSimilarityComparator(word)); + uris = index.getResources("label:\"" + word + "\""); + tmp.addAll(uris); + sortedURIs.addAll(tmp); + tmp.clear(); + } + + return sortedURIs; + } + + class StringSimilarityComparator implements Comparator<String>{ + private String s; + + public StringSimilarityComparator(String s) { + this.s = s; + } + + @Override + public int compare(String s1, String s2) { + double sim1 = Similarity.getSimilarity(s, s1); + double sim2 = Similarity.getSimilarity(s, s2); + + if(sim1 < sim2){ + return 1; + } else if(sim1 > sim2){ + return -1; + } else { + return s1.compareTo(s2); + } + } + + } + + private SolrSearch getIndexBySlotType(Slot slot){ + SolrSearch index = null; + if(slot.getSlotType() == SlotType.CLASS){ + index = class_index; + } else if(slot.getSlotType() == SlotType.PROPERTY){ + index = property_index; + } else if(slot.getSlotType() == SlotType.RESOURCE){ + index = resource_index; + } + return index; + } + private Map<String, Float> getCandidateURIsWithScore(Slot slot){ logger.info("Generating candidate URIs for " + slot.getWords() + "..."); mon.start(); @@ -310,7 +379,7 @@ return uri2Score; } - private void validateAgainstRemoteEndpoint(Set<? extends Query> queries){ + private void validateAgainstRemoteEndpoint(Collection<? extends Query> queries){ List<String> queryStrings = new ArrayList<String>(); for(Query query : queries){ queryStrings.add(query.toString()); @@ -326,6 +395,9 @@ List<String> results = getResultFromRemoteEndpoint(query); if(!results.isEmpty()){ learnedSPARQLQueries.put(query, results); + if(stopIfQueryResultNotEmpty){ + return; + } } logger.info("Result: " + results); } @@ -333,7 +405,7 @@ logger.info("Done in " + mon.getLastValue() + "ms."); } - private void validateAgainstLocalModel(Set<? extends Query> queries){ + private void validateAgainstLocalModel(Collection<? extends Query> queries){ List<String> queryStrings = new ArrayList<String>(); for(Query query : queries){ queryStrings.add(query.toString()); @@ -387,13 +459,15 @@ * @throws NoTemplateFoundException */ public static void main(String[] args) throws MalformedURLException, NoTemplateFoundException { - String question = "Give me all countries in Europe";//Give me all soccer clubs in Premier League"; + String question = "Give me all soccer clubs in Premier League"; +// String question = "Give me all films starring Brad Pitt"; SPARQLTemplateBasedLearner learner = new SPARQLTemplateBasedLearner(); SparqlEndpoint endpoint = new SparqlEndpoint(new URL("http://live.dbpedia.org/sparql"), Collections.<String>singletonList("http://dbpedia.org"), Collections.<String>emptyList()); learner.setEndpoint(endpoint); learner.setQuestion(question); learner.learnSPARQLQueries(); + System.out.println(learner.getBestSPARQLQuery()); } @@ -407,13 +481,8 @@ } @Override - public void setOracle(Oracle oracle) { - this.oracle = oracle; - } - - @Override public String getBestSPARQLQuery() { - return null; + return learnedSPARQLQueries.keySet().iterator().next(); } Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/ltag/parser/Preprocessor.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/ltag/parser/Preprocessor.java 2011-05-30 09:14:36 UTC (rev 2841) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/ltag/parser/Preprocessor.java 2011-05-31 09:53:10 UTC (rev 2842) @@ -15,6 +15,8 @@ static final String[] genericReplacements = { "\"", "", "'", "", "[!?.,;]", "" }; static final String[] englishReplacements = { "don't", "do not", "doesn't", "does not" }; + static NER ner = new LingPipeNER(); + public Preprocessor() { } @@ -186,7 +188,7 @@ "VB","VBD","VBG","VBN","VBP","VBZ","PASSIVE","PASSPART","VPASS","VPASSIN", "GERUNDIN","VPREP","WHEN","WHERE","IN","TO","DT"}; - NER ner = new LingPipeNER(); +// NER ner = new LingPipeNER(); List<String> namedentities = ner.getNamedEntitites(untagged); List<String> usefulnamedentities = new ArrayList<String>(); Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/LingPipeNER.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/LingPipeNER.java 2011-05-30 09:14:36 UTC (rev 2841) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/LingPipeNER.java 2011-05-31 09:53:10 UTC (rev 2842) @@ -5,6 +5,8 @@ import java.util.ArrayList; import java.util.List; +import org.apache.log4j.Logger; + import com.aliasi.chunk.Chunk; import com.aliasi.chunk.Chunker; import com.aliasi.chunk.Chunking; @@ -15,12 +17,14 @@ public class LingPipeNER implements NER{ - private static final String DICTIONARY_PATH = "src/main/resources/tbsl/models/dbpedia_lingpipe.dictionary"; + private static Logger logger = Logger.getLogger(LingPipeNER.class); + private static final String DICTIONARY_PATH = "tbsl/models/dbpedia_lingpipe.dictionary"; + private Chunker ner; public LingPipeNER() { - this(true, true); + this(true, false); } public LingPipeNER(boolean caseSensitive) { @@ -29,8 +33,12 @@ public LingPipeNER(boolean caseSensitive, boolean allMatches) { try { - Dictionary<String> dictionary = (Dictionary<String>) AbstractExternalizable.readObject(new File(DICTIONARY_PATH)); + long startTime = System.currentTimeMillis(); + logger.info("Initializing LingPipe NER..."); + String path = this.getClass().getClassLoader().getResource(DICTIONARY_PATH).getPath(); + Dictionary<String> dictionary = (Dictionary<String>) AbstractExternalizable.readObject(new File(path)); ner = new ExactDictionaryChunker(dictionary, IndoEuropeanTokenizerFactory.INSTANCE, allMatches, caseSensitive); + logger.info("Done in " + (System.currentTimeMillis()-startTime) + "ms."); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { 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 2011-05-30 09:14:36 UTC (rev 2841) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/StanfordPartOfSpeechTagger.java 2011-05-31 09:53:10 UTC (rev 2842) @@ -11,13 +11,14 @@ import edu.stanford.nlp.tagger.maxent.MaxentTagger; public class StanfordPartOfSpeechTagger implements PartOfSpeechTagger{ + + private static final String MODEL = "tbsl/models/bidirectional-distsim-wsj-0-18.tagger"; private MaxentTagger tagger; public StanfordPartOfSpeechTagger(){ try { -// String modelPath = ClassLoader.getSystemResource("tbsl/models/bidirectional-distsim-wsj-0-18.tagger").toString(); - String modelPath = "src/main/resources/tbsl/models/bidirectional-distsim-wsj-0-18.tagger"; + String modelPath = this.getClass().getClassLoader().getResource(MODEL).getPath(); tagger = new MaxentTagger(modelPath); } catch (IOException e) { e.printStackTrace(); Added: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/MultithreadedSPARQLQueryExecutor.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/MultithreadedSPARQLQueryExecutor.java (rev 0) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/MultithreadedSPARQLQueryExecutor.java 2011-05-31 09:53:10 UTC (rev 2842) @@ -0,0 +1,88 @@ +package org.dllearner.algorithm.tbsl.util; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + +import org.dllearner.kb.sparql.SparqlEndpoint; + +import com.hp.hpl.jena.query.ResultSet; +import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; + +public class MultithreadedSPARQLQueryExecutor { + + private int threadCount; + private SparqlEndpoint endpoint; + + private ExecutorService es; + + public MultithreadedSPARQLQueryExecutor(SparqlEndpoint endpoint) { + this(endpoint, Runtime.getRuntime().availableProcessors()); + } + + public MultithreadedSPARQLQueryExecutor(SparqlEndpoint endpoint, int threadCount) { + this.endpoint = endpoint; + this.threadCount = threadCount; + + es = Executors.newFixedThreadPool(threadCount); + } + + public List<ResultSet> executeQueries(List<String> queries){ + List<ResultSet> result = new ArrayList<ResultSet>(); + + Future<ResultSet>[] ret = new Future[queries.size()]; + + for(int i = 0; i < queries.size(); i++){ + ret[i] = es.submit(new SPARQLQueryExecutionTask(queries.get(i))); + } + + for (int i = 0; i < queries.size(); i++) { + try { + result.add(ret[i].get()); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + } + + return result; + } + + public void close(){ + es.shutdown(); + } + + private class SPARQLQueryExecutionTask implements Callable<ResultSet>{ + + private String query; + + public SPARQLQueryExecutionTask(String query){ + this.query = query; + } + + @Override + public ResultSet call() throws Exception { + QueryEngineHTTP queryExecution = new QueryEngineHTTP(endpoint.getURL().toString(), query); + for (String dgu : endpoint.getDefaultGraphURIs()) { + queryExecution.addDefaultGraph(dgu); + } + for (String ngu : endpoint.getNamedGraphURIs()) { + queryExecution.addNamedGraph(ngu); + } + + ResultSet rs = null; + if(query.contains("SELECT")){ + rs = queryExecution.execSelect(); + } else if(query.contains("ASK")){ + queryExecution.execAsk(); + } + return rs; + } + } + +} Property changes on: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/MultithreadedSPARQLQueryExecutor.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/Similarity.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/Similarity.java (rev 0) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/Similarity.java 2011-05-31 09:53:10 UTC (rev 2842) @@ -0,0 +1,23 @@ +package org.dllearner.algorithm.tbsl.util; + +import org.dllearner.algorithm.qtl.filters.I_Sub; + +import uk.ac.shef.wit.simmetrics.similaritymetrics.AbstractStringMetric; +import uk.ac.shef.wit.simmetrics.similaritymetrics.Levenshtein; +import uk.ac.shef.wit.simmetrics.similaritymetrics.QGramsDistance; + +public class Similarity { + + private static AbstractStringMetric qGramMetric = new QGramsDistance(); + private static AbstractStringMetric levensteinMetric = new Levenshtein(); + private static I_Sub substringMetric = new I_Sub(); + + public static double getSimilarity(String s1, String s2){ + float qGramSim = qGramMetric.getSimilarity(s1, s2); + float levensteinSim = levensteinMetric.getSimilarity(s1, s2); + double subStringSim = substringMetric.score(s1, s2, true); + + return (qGramSim + levensteinSim + subStringSim) / 3; + } + +} Property changes on: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/Similarity.java ___________________________________________________________________ Added: svn:mime-type + text/plain 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 2011-05-30 09:14:36 UTC (rev 2841) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/Evaluation.java 2011-05-31 09:53:10 UTC (rev 2842) @@ -31,15 +31,17 @@ import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.ResultSet; +import com.hp.hpl.jena.rdf.model.RDFNode; -public class Evaluation implements Oracle{ +public class Evaluation{ private static Logger logger = Logger.getLogger(Evaluation.class); private File evaluationFile; - private Map<String, String> question2query = new Hashtable<String, String>(); - private SortedMap<String, Set<String>> question2Answers = new TreeMap<String, Set<String>>(); + private Map<Integer, String> id2Question = new Hashtable<Integer, String>(); + private Map<Integer, String> id2Query = new Hashtable<Integer, String>(); + private SortedMap<Integer, Object> id2Answer = new TreeMap<Integer, Object>(); private SparqlEndpoint endpoint; @@ -64,11 +66,14 @@ Document doc = db.parse(file); doc.getDocumentElement().normalize(); NodeList questionNodes = doc.getElementsByTagName("question"); + int id; String question; String query; Set<String> answers; for(int i = 0; i < questionNodes.getLength(); i++){ Element questionNode = (Element) questionNodes.item(i); + //read question ID + id = Integer.valueOf(questionNode.getAttribute("id")); //Read question question = ((Element)questionNode.getElementsByTagName("string").item(0)).getChildNodes().item(0).getNodeValue().trim(); //Read SPARQL query @@ -81,7 +86,8 @@ // answers.add(((Element)answerNode.getElementsByTagName("uri").item(0)).getChildNodes().item(0).getNodeValue().trim()); // } - question2query.put(question, query); + id2Question.put(id, question); + id2Query.put(id, query); // question2Answers.put(question, answers); } @@ -98,13 +104,15 @@ } private void loadAnswers(){ + int questionId; String question; - Set<String> answers; - for(Entry<String, String> entry : question2query.entrySet()){ - question = entry.getKey(); + Object answer; + for(Entry<Integer, String> entry : id2Query.entrySet()){ + questionId = entry.getKey(); + question = entry.getValue(); try { - answers = getResources(entry.getValue()); - question2Answers.put(question, answers); + answer = getAnswerForSPARQLQuery(question, "uri"); + id2Answer.put(questionId, answer); } catch (Exception e) { e.printStackTrace(); } @@ -124,6 +132,40 @@ return resources; } + private Object getAnswerForSPARQLQuery(String query, String targetVar){ + logger.info("Query: " + query); + Object answer = null; + + if(query.contains("ASK")){ + answer = endpoint.executeAsk(query); + } else if(query.contains("COUNT")){ + + } else { + answer = new HashSet<String>(); + ResultSet rs = endpoint.executeSelect(query); + String variable; + if(rs.getResultVars().size() == 1){ + variable = rs.getResultVars().get(0); + } else { + variable = targetVar; + } + QuerySolution qs; + RDFNode node; + while(rs.hasNext()){ + qs = rs.next(); + node = qs.get(variable); + if(node.isURIResource()){ + ((HashSet)answer).add(node.asResource().getURI()); + } else if(node.isLiteral()){ + ((HashSet)answer).add(node.asLiteral().getLexicalForm()); + } + + } + } + logger.info("Answer: " + answer); + return answer; + } + public void setEndpoint(SparqlEndpoint endpoint){ this.endpoint = endpoint; } @@ -133,32 +175,43 @@ } public void run(){ - int cnt = 0; + SPARQLTemplateBasedLearner stbl = new SPARQLTemplateBasedLearner(); + int failed = 0; + int learnedCnt = 0; + int learnedCorrectlyCnt = 0; + int questionId; String question; - for(Entry<String, Set<String>> entry : question2Answers.entrySet()){ + Object answer; + for(Entry<Integer, String> entry : id2Question.entrySet()){ try { - question = entry.getKey(); - SPARQLTemplateBasedLearner stbl = new SPARQLTemplateBasedLearner(); + questionId = entry.getKey(); + question = entry.getValue(); + answer = id2Answer.get(questionId); + //set the question stbl.setQuestion(question); - stbl.setOracle(this); + //start learning stbl.learnSPARQLQueries(); - List<String> queries = stbl.getCurrentlyBestSPARQLQueries(1); - System.out.println(queries); + String learnedQuery = stbl.getBestSPARQLQuery(); + //get result for best learned query + Object learnedAnswer = getAnswerForSPARQLQuery(learnedQuery, "y"); + //compare to answers in target query + if(learnedAnswer.equals(answer)){ + learnedCorrectlyCnt++; + } else { + learnedCnt++; + } } catch (NoTemplateFoundException e) { e.printStackTrace(); - cnt++; + failed++; } catch(Exception e){ e.printStackTrace(); + failed++; } } + logger.info("Could generate SPARQL queries for " + learnedCnt + "/" + id2Question.size() + + " question from which " + learnedCorrectlyCnt + " are the correct answer."); } - @Override - public List<Double> classifyIndividuals(List<Individual> individuals) { - // TODO Auto-generated method stub - return null; - } - /** * @param args */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |