From: <lor...@us...> - 2011-06-13 13:18:16
|
Revision: 2866 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=2866&view=rev Author: lorenz_b Date: 2011-06-13 13:18:07 +0000 (Mon, 13 Jun 2011) Log Message: ----------- Added some evaluation stuff. Removed unused lib folder. Modified Paths: -------------- trunk/components-ext/failed.txt trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sparql/Query.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/WordNet.java trunk/components-ext/src/main/resources/log4j.properties trunk/components-ext/src/test/java/org/dllearner/algorithm/qtl/ModelCreationTest.java trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/Evaluation.java trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/POStest.java trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TemplateGenerationTest.java trunk/components-ext/successful.txt Added Paths: ----------- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/LingPipeLemmatizer.java trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/LatexWriter.java trunk/components-ext/src/main/resources/tbsl/evaluation/praeambel.tex trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/MultithreadedSPARQLQueryExecutionTest.java Removed Paths: ------------- trunk/components-ext/src/main/resources/tbsl/lib/ Property Changed: ---------------- trunk/components-ext/ Property changes on: trunk/components-ext ___________________________________________________________________ Modified: svn:ignore - components-ext.iml target .classpath .project .settings + components-ext.iml target .classpath .project .settings log cache construct-cache Modified: trunk/components-ext/failed.txt =================================================================== --- trunk/components-ext/failed.txt 2011-06-10 14:37:59 UTC (rev 2865) +++ trunk/components-ext/failed.txt 2011-06-13 13:18:07 UTC (rev 2866) @@ -1,10 +1,6 @@ -Which/WDT presidents/NNS were/VBD born/VBN in/IN 1945/CD -List/VB all/DT episodes/NNS of/IN the/DT first/JJ season/NN of/IN the/DT HBO/NNP television/NN series/NN The/DT Sopranos/NNPS -Which/WDT people/NNS have/VBP as/IN their/PRP$ given/VBN name/NN Jimmy/NNP -Is/VBZ there/RB a/DT video/NN game/NN called/VBN Battle/NNP Chess/NNP -Which/WDT companies/NNS work/VBP in/IN the/DT aerospace/NN industry/NN as/RB well/RB as/IN on/IN nuclear/JJ reactor/NN technology/NN -Which/WDT cities/NNS have/VBP more/JJR than/IN 2/CD million/CD inhabitants/NNS -Who/WP has/VBZ been/VBN the/DT 5th/JJ president/NN of/IN the/DT United/NNP States/NNPS of/IN America/NNP -In/IN which/WDT films/NNS did/VBD Julia/NNP Roberts/NNP as/RB well/RB as/IN Richard/NNP Gere/NNP play/VB -Who/WP wrote/VBD the/DT book/NN The/DT pillars/NNS of/IN the/DT Earth/NNP -Which/WDT organizations/NNS were/VBD founded/VBN in/IN 1950/CD +How/WRB tall/JJ is/VBZ Claudia/NNP Schiffer/NNP +Is/NNP Egypts/NNPS largest/JJS city/NN also/RB its/PRP$ capital/NN +Which/WDT states/VBZ border/VBZ Utah/NNP +In/IN which/WDT films/NNS directed/VBN by/IN Garry/NNP Marshall/NNP was/VBD Julia/NNP Roberts/NNP starring/VBG +Was/VBD US/NNP president/NNP Jackson/NNP involved/VBD in/IN a/DT war/NN +Which/WDT countries/NNS in/IN the/DT European/NNP Union/NNP adopted/VBD the/DT Euro/NNP 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-06-10 14:37:59 UTC (rev 2865) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/learning/SPARQLTemplateBasedLearner.java 2011-06-13 13:18:07 UTC (rev 2866) @@ -18,9 +18,12 @@ import org.apache.log4j.Logger; import org.dllearner.algorithm.qtl.util.ModelGenerator; import org.dllearner.algorithm.qtl.util.ModelGenerator.Strategy; +import org.dllearner.algorithm.tbsl.nlp.Lemmatizer; +import org.dllearner.algorithm.tbsl.nlp.LingPipeLemmatizer; import org.dllearner.algorithm.tbsl.search.SolrSearch; import org.dllearner.algorithm.tbsl.sparql.Query; import org.dllearner.algorithm.tbsl.sparql.RatedQuery; +import org.dllearner.algorithm.tbsl.sparql.SPARQL_Prefix; import org.dllearner.algorithm.tbsl.sparql.Slot; import org.dllearner.algorithm.tbsl.sparql.SlotType; import org.dllearner.algorithm.tbsl.sparql.Template; @@ -38,6 +41,9 @@ import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; +import com.hp.hpl.jena.sparql.vocabulary.FOAF; +import com.hp.hpl.jena.vocabulary.RDF; +import com.hp.hpl.jena.vocabulary.RDFS; import com.jamonapi.Monitor; import com.jamonapi.MonitorFactory; @@ -71,9 +77,19 @@ private Oracle oracle; + private Map<String, List<String>> resourcesURICache; + private Map<String, List<String>> classesURICache; + private Map<String, List<String>> propertiesURICache; + private Map<String, List<String>> learnedSPARQLQueries; + private Set<Template> templates; + private Collection<? extends Query> sparqlQueryCandidates; + private Map<String, String> prefixMap; + private Lemmatizer lemmatizer = new LingPipeLemmatizer();// StanfordLemmatizer(); + + public SPARQLTemplateBasedLearner(){ resource_index = new SolrSearch(SOLR_SERVER_URL + "/dbpedia_resources"); resource_index.setHitsPerPage(TOP_K); @@ -85,6 +101,15 @@ Set<String> predicateFilters = new HashSet<String>(); predicateFilters.add("http://dbpedia.org/ontology/wikiPageWikiLink"); predicateFilters.add("http://dbpedia.org/property/wikiPageUsesTemplate"); + + prefixMap = new HashMap<String, String>(); + prefixMap.put(RDF.getURI(), "rdf"); + prefixMap.put(RDFS.getURI(), "rdfs"); + prefixMap.put("http://dbpedia.org/ontology/", "dbo"); + prefixMap.put("http://dbpedia.org/property/", "dbp"); + prefixMap.put("http://dbpedia.org/resource/", "dbr"); + prefixMap.put(FOAF.getURI(), "foaf"); + modelGenenerator = new ModelGenerator(endpoint, predicateFilters); templateGenerator = new Templator(); @@ -112,10 +137,13 @@ public void learnSPARQLQueries() throws NoTemplateFoundException{ learnedSPARQLQueries = new HashMap<String, List<String>>(); + resourcesURICache = new HashMap<String, List<String>>(); + classesURICache = new HashMap<String, List<String>>(); + propertiesURICache = new HashMap<String, List<String>>(); //generate SPARQL query templates logger.info("Generating SPARQL query templates..."); mon.start(); - Set<Template> templates = templateGenerator.buildTemplates(question); + templates = templateGenerator.buildTemplates(question); mon.stop(); logger.info("Done in " + mon.getLastValue() + "ms."); if(templates.isEmpty()){ @@ -127,7 +155,7 @@ } //generate SPARQL query candidates - Collection<? extends Query> sparqlQueryCandidates = getSPARQLQueryCandidates(templates, ranking); + sparqlQueryCandidates = getSPARQLQueryCandidates(templates, ranking); //test candidates if(useRemoteEndpointValidation){ //on remote endpoint @@ -138,6 +166,48 @@ } + public List<String> getSPARQLQueries() throws NoTemplateFoundException{ + logger.info("Generating SPARQL query templates..."); + mon.start(); + templates = templateGenerator.buildTemplates(question); + mon.stop(); + logger.info("Done in " + mon.getLastValue() + "ms."); + if(templates.isEmpty()){ + throw new NoTemplateFoundException(); + } + logger.info("Templates:"); + for(Template t : templates){ + logger.info(t); + } + + //generate SPARQL query candidates + logger.info("Generating SPARQL query candidates..."); + mon.start(); + sparqlQueryCandidates = getSPARQLQueryCandidates(templates, ranking); + mon.stop(); + logger.info("Done in " + mon.getLastValue() + "ms."); + + List<String> queries = new ArrayList<String>(); + for(Query q : sparqlQueryCandidates){ + queries.add(q.toString()); + } + + return queries; + } + + public Set<Template> getTemplates(){ + return templates; + } + + public List<String> getGeneratedSPARQLQueries(){ + List<String> queries = new ArrayList<String>(); + for(Query q : sparqlQueryCandidates){ + queries.add(q.toString()); + } + + return queries; + } + private Model getWorkingModel(List<String> resources){ logger.info("Generating local model..."); mon.start(); @@ -256,21 +326,37 @@ logger.info("Generating candidate SPARQL queries..."); mon.start(); List<Query> queries = new ArrayList<Query>(); - + List<String> uriCandidates; 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)){ + SPARQL_Prefix prefix = null; + uriCandidates = getCandidateURIsSortedBySimilarity(slot); + for(String uri : uriCandidates){ + for(Entry<String, String> uri2prefix : prefixMap.entrySet()){ + if(uri.startsWith(uri2prefix.getKey())){ + prefix = new SPARQL_Prefix(uri2prefix.getValue(), uri2prefix.getKey()); + uri = uri.replace(uri2prefix.getKey(), uri2prefix.getValue() + ":"); + break; + } + } for(Query query : queries){ Query newQuery = new Query(query); - newQuery.replaceVarWithURI(var, uri); + if(prefix != null){ + newQuery.addPrefix(prefix); + newQuery.replaceVarWithPrefixedURI(var, uri); + } else { + newQuery.replaceVarWithURI(var, uri); + } + tmp.add(newQuery); } + prefix = null; } - if(!words.isEmpty()){ + if(!words.isEmpty() && !uriCandidates.isEmpty()){ queries.clear(); queries.addAll(tmp); } @@ -304,23 +390,65 @@ } private List<String> getCandidateURIsSortedBySimilarity(Slot slot){ + logger.info("Generating URI candidates for " + slot.getWords() + "..."); + mon.start(); List<String> sortedURIs = new ArrayList<String>(); - + //get the appropriate index based on slot type SolrSearch index = getIndexBySlotType(slot); + //get the appropriate cache for URIs to avoid redundant queries to index + Map<String, List<String>> uriCache = getCacheBySlotType(slot); SortedSet<String> tmp; List<String> uris; - for(String word : slot.getWords()){ + + //prune the word list with lemmatizer only when slot type is not RESOURCE + List<String> words; + if(slot.getSlotType() == SlotType.RESOURCE){ + words = slot.getWords(); + } else { + words = getLemmatizedWords(slot.getWords()); + } + + for(String word : words){ tmp = new TreeSet<String>(new StringSimilarityComparator(word)); - uris = index.getResources("label:\"" + word + "\""); + uris = uriCache.get(word); + if(uris == null){ + uris = index.getResources("label:\"" + word + "\""); + uriCache.put(word, uris); + } tmp.addAll(uris); sortedURIs.addAll(tmp); tmp.clear(); } - + mon.stop(); + logger.info("Done in " + mon.getLastValue() + "ms."); + logger.info("URIs: " + sortedURIs); return sortedURIs; } + private List<String> getLemmatizedWords(List<String> words){ + logger.info("Pruning word list " + words + "..."); + mon.start(); + List<String> pruned = new ArrayList<String>(); + for(String word : words){ + //currently only stem single words + if(word.contains(" ")){ + pruned.add(word); + } else { + String lemWord = lemmatizer.stem(word); + new LingPipeLemmatizer().stem(word); + if(!pruned.contains(lemWord)){ + pruned.add(lemWord); + } + } + + } + mon.stop(); + logger.info("Done in " + mon.getLastValue() + "ms."); + logger.info("Pruned list: " + pruned); + return pruned; + } + class StringSimilarityComparator implements Comparator<String>{ private String s; @@ -330,6 +458,7 @@ @Override public int compare(String s1, String s2) { + double sim1 = Similarity.getSimilarity(s, s1); double sim2 = Similarity.getSimilarity(s, s2); @@ -356,6 +485,18 @@ return index; } + private Map<String, List<String>> getCacheBySlotType(Slot slot){ + Map<String, List<String>> cache = null; + if(slot.getSlotType() == SlotType.CLASS){ + cache = classesURICache; + } else if(slot.getSlotType() == SlotType.PROPERTY){ + cache = propertiesURICache; + } else if(slot.getSlotType() == SlotType.RESOURCE){ + cache = resourcesURICache; + } + return cache; + } + private Map<String, Float> getCandidateURIsWithScore(Slot slot){ logger.info("Generating candidate URIs for " + slot.getWords() + "..."); mon.start(); @@ -431,11 +572,17 @@ private List<String> getResultFromRemoteEndpoint(String query){ List<String> resources = new ArrayList<String>(); - ResultSet rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query + " LIMIT 10")); - QuerySolution qs; - while(rs.hasNext()){ - qs = rs.next(); - resources.add(qs.get("y").toString()); + try { + ResultSet rs = SparqlQuery.convertJSONtoResultSet(cache.executeSelectQuery(endpoint, query + " LIMIT 10")); + QuerySolution qs; + String projectionVar; + while(rs.hasNext()){ + qs = rs.next(); + projectionVar = qs.varNames().next(); + resources.add(qs.get(projectionVar).toString()); + } + } catch (Exception e) { + logger.error("Query execution failed.", e); } return resources; } @@ -459,7 +606,10 @@ * @throws NoTemplateFoundException */ public static void main(String[] args) throws MalformedURLException, NoTemplateFoundException { - String question = "Give me all soccer clubs in Premier League"; +// Logger.getLogger(DefaultHttpParams.class).setLevel(Level.OFF); +// Logger.getLogger(HttpClient.class).setLevel(Level.OFF); +// Logger.getLogger(HttpMethodBase.class).setLevel(Level.OFF); + String question = "Who are the presidents of the United States?"; // String question = "Give me all films starring Brad Pitt"; SPARQLTemplateBasedLearner learner = new SPARQLTemplateBasedLearner(); SparqlEndpoint endpoint = new SparqlEndpoint(new URL("http://live.dbpedia.org/sparql"), @@ -482,7 +632,11 @@ @Override public String getBestSPARQLQuery() { - return learnedSPARQLQueries.keySet().iterator().next(); + if(!learnedSPARQLQueries.isEmpty()){ + return learnedSPARQLQueries.keySet().iterator().next(); + } else { + return null; + } } Added: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/LingPipeLemmatizer.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/LingPipeLemmatizer.java (rev 0) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/LingPipeLemmatizer.java 2011-06-13 13:18:07 UTC (rev 2866) @@ -0,0 +1,29 @@ +package org.dllearner.algorithm.tbsl.nlp; + +import java.util.ArrayList; +import java.util.List; + +import com.aliasi.tokenizer.PorterStemmerTokenizerFactory; + +public class LingPipeLemmatizer implements Lemmatizer { + + @Override + public String stem(String word) { + return PorterStemmerTokenizerFactory.stem(word); + } + + @Override + public String stem(String word, String tag) { + return PorterStemmerTokenizerFactory.stem(word); + } + + @Override + public List<String> stem(List<String> words) { + List<String> stemmedWords = new ArrayList<String>(); + for(String word : words){ + stemmedWords.add(stem(word)); + } + return stemmedWords; + } + +} Property changes on: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/nlp/LingPipeLemmatizer.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sparql/Query.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sparql/Query.java 2011-06-10 14:37:59 UTC (rev 2865) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/sparql/Query.java 2011-06-13 13:18:07 UTC (rev 2866) @@ -355,6 +355,37 @@ } } + + public void replaceVarWithPrefixedURI(String var, String uri){ + SPARQL_Value subject; + SPARQL_Value property; + SPARQL_Value object; + + for(SPARQL_Triple triple : conditions){ + subject = triple.getVariable(); + property = triple.getProperty(); + object = triple.getValue(); + if(subject.isVariable()){ + if(subject.getName().equals(var)){ + subject.setName(uri); + subject.setIsVariable(false); + } + } + if(property.isVariable()){ + if(property.getName().equals(var)){ + property.setName(uri); + property.setIsVariable(false); + } + } + if(object.isVariable()){ + if(object.getName().equals(var)){ + object.setName(uri); + object.setIsVariable(false); + } + } + + } + } @Override public int hashCode() { Modified: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/WordNet.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/WordNet.java 2011-06-10 14:37:59 UTC (rev 2865) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/templator/WordNet.java 2011-06-13 13:18:07 UTC (rev 2866) @@ -8,7 +8,7 @@ public class WordNet { - public String path; + public String path = "tbsl/dict/"; public WordNetDatabase database; public WordNet(String s) { @@ -16,7 +16,7 @@ } public WordNet() { - path = "src/main/resources/tbsl/dict/"; + path = this.getClass().getClassLoader().getResource(path).getPath(); } public void setWordNetPath(String s) { Added: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/LatexWriter.java =================================================================== --- trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/LatexWriter.java (rev 0) +++ trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/LatexWriter.java 2011-06-13 13:18:07 UTC (rev 2866) @@ -0,0 +1,112 @@ +package org.dllearner.algorithm.tbsl.util; + +import java.io.BufferedWriter; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Writer; +import java.util.Scanner; + +public class LatexWriter { + + private static String NL = System.getProperty("line.separator"); + private static final String PRAEAMBEL_FILE = "tbsl/evaluation/praeambel.tex"; + private StringBuilder sb; + + public LatexWriter() { + sb = new StringBuilder(); + + loadPraeambel(); + } + + private void loadPraeambel(){ + try { + Scanner scanner = new Scanner(new FileInputStream(this.getClass().getClassLoader().getResource(PRAEAMBEL_FILE).getPath())); + try { + while (scanner.hasNextLine()){ + sb.append(scanner.nextLine() + NL); + } + } + finally{ + scanner.close(); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + + public void makeTitle(){ + sb.append("\\maketitle\n"); + } + + public void buildTableOfContents(){ + sb.append("\\tableofcontents\n"); + sb.append("\\newpage\n"); + } + + public void beginDocument(){ + sb.append("\\begin{document}\n"); + makeTitle(); + buildTableOfContents(); + } + + public void endDocument(){ + sb.append("\\end{document}"); + } + + public void beginSection(String title){ + sb.append("\\section{").append(title).append("}\n"); + } + + public void beginSubsection(String title){ + sb.append("\\subsection*{").append(title).append("}\n"); + sb.append("\\addcontentsline{toc}{subsection}{").append(title).append("}\n"); + } + + public void beginSubSubsection(String title){ + sb.append("\\subsubsection*{").append(title).append("}\n"); + sb.append("\\addcontentsline{toc}{subsubsection}{").append(title).append("}\n"); + } + + public void beginEnumeration(){ + sb.append("\\begin{enumerate}\n"); + } + + public void endEnumeration(){ + sb.append("\\end{enumerate}\n"); + } + + public void beginEnumerationItem(){ + sb.append("\\item{\n"); + } + + public void endEnumerationItem(){ + sb.append("}\n"); + } + + public void addListing(String listing){ + sb.append("\\begin{lstlisting}[language=SPARQL, basicstyle=\\scriptsize, showstringspaces=false]\n"); + sb.append(listing).append("\n"); + sb.append("\\end{lstlisting}\n"); + } + + public void addText(String text){ + sb.append(text).append("\n"); + } + + public void write(String file){ + try { + Writer output = new BufferedWriter(new FileWriter(file)); + try { + output.write( sb.toString() ); + } + finally { + output.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + +} Property changes on: trunk/components-ext/src/main/java/org/dllearner/algorithm/tbsl/util/LatexWriter.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: trunk/components-ext/src/main/resources/log4j.properties =================================================================== --- trunk/components-ext/src/main/resources/log4j.properties 2011-06-10 14:37:59 UTC (rev 2865) +++ trunk/components-ext/src/main/resources/log4j.properties 2011-06-13 13:18:07 UTC (rev 2866) @@ -25,7 +25,7 @@ # appenders are the output-targets defined above # loglevels: trace, debug, info, warn, error, fatal # -log4j.rootLogger=debug, stdout +log4j.rootLogger=INFO, stdout #, file @@ -42,6 +42,8 @@ ####SOLR log4j.category.org.apache.solr.level = OFF +log4j.logger.org.apache.http=OFF +log4j.logger.org.apache.http.wire=OFF Added: trunk/components-ext/src/main/resources/tbsl/evaluation/praeambel.tex =================================================================== --- trunk/components-ext/src/main/resources/tbsl/evaluation/praeambel.tex (rev 0) +++ trunk/components-ext/src/main/resources/tbsl/evaluation/praeambel.tex 2011-06-13 13:18:07 UTC (rev 2866) @@ -0,0 +1,44 @@ +\documentclass[a4paper,10pt]{article} +\usepackage{lmodern} +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +% \usepackage{ngerman} +% \usepackage{picins} + +% \usepackage{beamerthemetree} + +\usepackage{color} +\usepackage{colortbl} +\usepackage{rotating,makecell} +\usepackage[hypertex]{hyperref} + +\usepackage{listings} + +\usepackage{graphicx} +%\usepackage{verbatim} +\usepackage{moreverb} + + +\lstdefinelanguage{SPARQL} +{ + morestring=[b]", +% morestring=[s]{>}{<}, + morecomment=[s]{<?}{?>}, + stringstyle=\color{black}, + identifierstyle=\color{black}, + keywordstyle=\color{blue}, + morekeywords={OPTIONAL, SELECT, DISTINCT, WHERE, FILTER, BOUND, UNION, PREFIX} +} + +\lstset{ + emph={OPTIONAL, SELECT, BOUND, DISTINCT, WHERE, FILTER, BOUND, UNION, PREFIX}, emphstyle=\color{blue}, + emph={[2]some,only,min,max,and,or,that,not}, emphstyle={[2]\color{red}}, + aboveskip={0 em}, + belowskip={0 em}, + literate={ö}{{\"o}}1 + {ä}{{\"a}}1 + {ü}{{\"u}}1 +} + +%opening +\title{Evaluation} Modified: trunk/components-ext/src/test/java/org/dllearner/algorithm/qtl/ModelCreationTest.java =================================================================== --- trunk/components-ext/src/test/java/org/dllearner/algorithm/qtl/ModelCreationTest.java 2011-06-10 14:37:59 UTC (rev 2865) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/qtl/ModelCreationTest.java 2011-06-13 13:18:07 UTC (rev 2866) @@ -122,7 +122,7 @@ int proCnt = Runtime.getRuntime().availableProcessors(); logger.info("Number of processor: " + proCnt); Future<Model>[] ret = new Future[proCnt]; - List<String> queries = queries = createSearchQueries("Hamburg", "Vienna", "Stuttgart", "Frankfurt", "Kiel");;//createQueries(resource, proCnt); + List<String> queries = createSearchQueries("Hamburg", "Vienna", "Stuttgart", "Frankfurt", "Kiel");;//createQueries(resource, proCnt); ExecutorService es = Executors.newFixedThreadPool(proCnt); for(int i = 0; i < 5; i++){ 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-06-10 14:37:59 UTC (rev 2865) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/Evaluation.java 2011-06-13 13:18:07 UTC (rev 2866) @@ -1,11 +1,15 @@ package org.dllearner.algorithm.tbsl; +import java.io.BufferedWriter; import java.io.File; +import java.io.FileWriter; import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.io.Writer; +import java.net.URLDecoder; +import java.util.Collection; import java.util.HashSet; -import java.util.Hashtable; import java.util.List; -import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.SortedMap; @@ -18,11 +22,15 @@ import org.aksw.commons.sparql.core.SparqlEndpoint; import org.aksw.commons.sparql.core.decorator.CachingSparqlEndpoint; import org.aksw.commons.sparql.core.impl.HttpSparqlEndpoint; +import org.apache.log4j.FileAppender; +import org.apache.log4j.Layout; +import org.apache.log4j.Level; import org.apache.log4j.Logger; +import org.apache.log4j.PatternLayout; import org.dllearner.algorithm.tbsl.learning.NoTemplateFoundException; import org.dllearner.algorithm.tbsl.learning.SPARQLTemplateBasedLearner; -import org.dllearner.core.Oracle; -import org.dllearner.core.owl.Individual; +import org.dllearner.algorithm.tbsl.sparql.Template; +import org.dllearner.algorithm.tbsl.util.LatexWriter; import org.w3c.dom.DOMException; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -39,8 +47,8 @@ private File evaluationFile; - private Map<Integer, String> id2Question = new Hashtable<Integer, String>(); - private Map<Integer, String> id2Query = new Hashtable<Integer, String>(); + 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 SparqlEndpoint endpoint; @@ -133,14 +141,12 @@ } private Object getAnswerForSPARQLQuery(String query, String targetVar){ - logger.info("Query: " + query); + logger.debug("Query: " + query); Object answer = null; if(query.contains("ASK")){ answer = endpoint.executeAsk(query); - } else if(query.contains("COUNT")){ - - } else { + } else { answer = new HashSet<String>(); ResultSet rs = endpoint.executeSelect(query); String variable; @@ -162,7 +168,7 @@ } } - logger.info("Answer: " + answer); + logger.debug("Answer: " + answer); return answer; } @@ -174,48 +180,263 @@ stbl.setUseRemoteEndpointValidation(useRemoteValidation); } + public void run(){ - SPARQLTemplateBasedLearner stbl = new SPARQLTemplateBasedLearner(); - int failed = 0; - int learnedCnt = 0; - int learnedCorrectlyCnt = 0; + int topN2Print = 25; + + int questionId; String question; + String query; Object answer; + LatexWriter latex = new LatexWriter(); + latex.beginDocument(); + int i = 0; for(Entry<Integer, String> entry : id2Question.entrySet()){ + if(i++ == 1)break; try { questionId = entry.getKey(); question = entry.getValue(); + query = id2Query.get(questionId); answer = id2Answer.get(questionId); + logger.info("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); + logger.info("QUESTION: " + question + "\n"); + logger.info("TARGET QUERY:\n" + query + "\n"); + + + //write new section for query + latex.beginSection(question); + //write subsection for target + latex.beginSubsection("Target"); + //write subsubsection for target query + latex.beginSubSubsection("Query"); + latex.addListing(query); + //write subsubsection for target result + latex.beginSubSubsection("Result" + ((answer instanceof Collection<?>) ? "(" + ((Collection)answer).size()+")" : "")); + latex.addText(escapeAnswerString(answer)); + //set the question stbl.setQuestion(question); //start learning stbl.learnSPARQLQueries(); + //get the best learned query 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++; + //get result for best learned query if exists + Object learnedAnswer = null; + if(learnedQuery != null){ + learnedAnswer = getAnswerForSPARQLQuery(learnedQuery, "y"); } + //get the generated SPARQL query candidates + List<String> queries = stbl.getGeneratedSPARQLQueries(); + //get the used templates + Set<Template> templates = stbl.getTemplates(); + + //start output + //write templates subsection + latex.beginSubsection("Templates (" + templates.size() + ")"); + latex.beginEnumeration(); + for(Template t : templates){ + latex.beginEnumerationItem(); + latex.addListing(t.toString()); + latex.endEnumerationItem(); + } + latex.endEnumeration(); + + //write generated queries subsection + latex.beginSubsection("Top " + topN2Print + " generated queries (max. " + queries.size() + ")"); + logger.info("LEARNED QUERIES(#" + queries.size() + "):\n"); + int cnt = 1; + if(!queries.isEmpty()){ + latex.beginEnumeration(); + } + //print queries to log file + for(String q : queries){ + logger.info("QUERY " + cnt++ + ":\n" + q + "\n"); + logger.info("--------"); + } + //print top n queries to latex file + int max = Math.min(topN2Print, queries.size()); + for(int j = 0; j < max; j++){ + latex.beginEnumerationItem(); + latex.addListing(queries.get(j)); + latex.endEnumerationItem(); + } + if(!queries.isEmpty()){ + latex.endEnumeration(); + } + + //write solution subsection if exists + if(learnedQuery != null){ + latex.beginSubsection("Solution"); + latex.beginSubSubsection("Query"); + latex.addListing(learnedQuery); + latex.beginSubSubsection("Result" + ((learnedAnswer instanceof Collection<?>) ? "(" + ((Collection)learnedAnswer).size()+")" : "")); + latex.addText(escapeAnswerString(learnedAnswer, answer)); + } + + } catch (NoTemplateFoundException e) { e.printStackTrace(); - failed++; + logger.error("Template generation failed"); } catch(Exception e){ e.printStackTrace(); - failed++; + logger.error("ERROR"); } } - logger.info("Could generate SPARQL queries for " + learnedCnt + "/" + id2Question.size() - + " question from which " + learnedCorrectlyCnt + " are the correct answer."); + latex.endDocument(); + latex.write("log/evaluation.tex"); } + + public void run_without_testing_answer(){ + int topN2Print = 25; + + + int questionId; + String question; + String query; + Object answer; + LatexWriter latex = new LatexWriter(); + latex.beginDocument(); + int i = 0; + for(Entry<Integer, String> entry : id2Question.entrySet()){ + if(i++ == 1)break; + try { + questionId = entry.getKey(); + question = entry.getValue(); + query = id2Query.get(questionId); + answer = id2Answer.get(questionId); + logger.info("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); + logger.info("QUESTION: " + question + "\n"); + logger.info("TARGET QUERY:\n" + query + "\n"); + + + //write new section for query + latex.beginSection(question); + //write subsection for target + latex.beginSubsection("Target"); + //write subsubsection for target query + latex.beginSubSubsection("Query"); + latex.addListing(query); + //write subsubsection for target result + latex.beginSubSubsection("Result" + ((answer instanceof Collection<?>) ? "(" + ((Collection)answer).size()+")" : "")); + latex.addText(escapeAnswerString(answer)); + + //set the question + stbl.setQuestion(question); + //get the generated SPARQL query candidates + List<String> queries = stbl.getSPARQLQueries(); + //get the used templates + Set<Template> templates = stbl.getTemplates(); + + //start output + //write templates subsection + latex.beginSubsection("Templates (" + templates.size() + ")"); + latex.beginEnumeration(); + for(Template t : templates){ + latex.beginEnumerationItem(); + latex.addListing(t.toString()); + latex.endEnumerationItem(); + } + latex.endEnumeration(); + + //write generated queries subsection + latex.beginSubsection("Top " + topN2Print + " generated queries (max. " + queries.size() + ")"); + logger.info("LEARNED QUERIES(#" + queries.size() + "):\n"); + int cnt = 1; + if(!queries.isEmpty()){ + latex.beginEnumeration(); + } + //print queries to log file + for(String q : queries){ + logger.info("QUERY " + cnt++ + ":\n" + q + "\n"); + logger.info("--------"); + } + //print top n queries to latex file + int max = Math.min(topN2Print, queries.size()); + for(int j = 0; j < max; j++){ + latex.beginEnumerationItem(); + latex.addListing(queries.get(j)); + latex.endEnumerationItem(); + } + if(!queries.isEmpty()){ + latex.endEnumeration(); + } + + + } catch (NoTemplateFoundException e) { + e.printStackTrace(); + logger.error("Template generation failed"); + } catch(Exception e){ + e.printStackTrace(); + logger.error("ERROR"); + } + } + latex.endDocument(); + latex.write("log/evaluation.tex"); + } + private String escapeAnswerString(Object learnedAnswer, Object targetAnswer){ + if(learnedAnswer instanceof Collection<?>){ + Collection<?> target = (Collection<?>) targetAnswer; + StringBuilder sb = new StringBuilder(); + try { + int i = 1; + for(String s : (Collection<String>)learnedAnswer){ + if(target.contains(s)){ + s = "\\textcolor{green}{" + s + "}"; + } + sb.append(URLDecoder.decode(s, "UTF-8").replace("_", "\\_").replace("http://dbpedia.org/resource/", "")).append(", "); + if(i % 2 == 0){ + sb.append("\n"); + } + i++; + } + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return sb.toString(); + } else { + return learnedAnswer.toString(); + } + + } + + private String escapeAnswerString(Object learnedAnswer){ + if(learnedAnswer instanceof Collection<?>){ + StringBuilder sb = new StringBuilder(); + try { + int i = 1; + for(String s : (Collection<String>)learnedAnswer){ + sb.append(URLDecoder.decode(s, "UTF-8").replace("_", "\\_").replace("http://dbpedia.org/resource/", "")).append(", "); + if(i % 2 == 0){ + sb.append("\n"); + } + i++; + } + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return sb.toString(); + } else { + return learnedAnswer.toString(); + } + + } /** * @param args + * @throws IOException */ - public static void main(String[] args) { + public static void main(String[] args) throws IOException { + Logger.getLogger(SPARQLTemplateBasedLearner.class).setLevel(Level.OFF); + Logger.getLogger(Evaluation.class).setLevel(Level.INFO); + Logger.getRootLogger().removeAllAppenders(); + Layout layout = new PatternLayout("%m%n"); + FileAppender fileAppender = new FileAppender( + layout, "log/evaluation.log", false); + fileAppender.setThreshold(Level.INFO); + Logger.getRootLogger().addAppender(fileAppender); + + File file = new File("src/main/resources/tbsl/evaluation/dbpedia-train.xml"); SparqlEndpoint endpoint = new CachingSparqlEndpoint(new HttpSparqlEndpoint("http://live.dbpedia.org/sparql/", "http://dbpedia.org/sparql"), "cache"); Added: trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/MultithreadedSPARQLQueryExecutionTest.java =================================================================== --- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/MultithreadedSPARQLQueryExecutionTest.java (rev 0) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/MultithreadedSPARQLQueryExecutionTest.java 2011-06-13 13:18:07 UTC (rev 2866) @@ -0,0 +1,103 @@ +package org.dllearner.algorithm.tbsl; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.dllearner.algorithm.tbsl.util.MultithreadedSPARQLQueryExecutor; +import org.dllearner.kb.sparql.SparqlEndpoint; +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 com.hp.hpl.jena.query.ResultSet; +import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; + +public class MultithreadedSPARQLQueryExecutionTest { + + /** + * @param args + */ + public static void main(String[] args) { + File file = new File("src/main/resources/tbsl/evaluation/dbpedia-train.xml"); + SparqlEndpoint endpoint = SparqlEndpoint.getEndpointDBpedia(); + + List<String> queries = new ArrayList<String>(); + try { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder db = dbf.newDocumentBuilder(); + Document doc = db.parse(file); + doc.getDocumentElement().normalize(); + NodeList questionNodes = doc.getElementsByTagName("question"); + String query; + for (int i = 0; i < questionNodes.getLength(); i++) { + Element questionNode = (Element) questionNodes.item(i); + // Read SPARQL query + query = ((Element) questionNode.getElementsByTagName("query").item(0)).getChildNodes().item(0) + .getNodeValue().trim(); + queries.add(query); + } + } catch (DOMException e) { + e.printStackTrace(); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + } catch (SAXException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + int threadCount = 5; + MultithreadedSPARQLQueryExecutor executor = new MultithreadedSPARQLQueryExecutor(endpoint, threadCount); + List<List<String>> lists = splitList(queries, threadCount); + long startTime = System.currentTimeMillis(); + for(List<String> list : lists){ + executor.executeQueries(list); + } + System.out.format("Multithreaded needed %d ms.\n", System.currentTimeMillis()-startTime); + executor.close(); + + + startTime = System.currentTimeMillis(); + for(String query : queries){ + executeSPARQLQuery(endpoint, query); + } + System.out.format("Sequentially needed %d ms.", System.currentTimeMillis()-startTime); + } + + public static <T> List<List<T>> splitList(List<T> list, int splitSize){ + List<List<T>> lists = new ArrayList<List<T>>(); + int partitionCount = list.size()/splitSize + 1; + for(int partition = 0; partition < partitionCount; partition++){ + int start = partition * splitSize; + int end = Math.min(start + splitSize, list.size()); + lists.add(list.subList(start, end)); + } + return lists; + } + + public static void executeSPARQLQuery(SparqlEndpoint endpoint, String query){ + 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(); + } + } + +} Property changes on: trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/MultithreadedSPARQLQueryExecutionTest.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/POStest.java =================================================================== --- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/POStest.java 2011-06-10 14:37:59 UTC (rev 2865) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/POStest.java 2011-06-13 13:18:07 UTC (rev 2866) @@ -5,6 +5,7 @@ import org.annolab.tt4j.TreeTaggerException; import org.dllearner.algorithm.tbsl.nlp.ApachePartOfSpeechTagger; +import org.dllearner.algorithm.tbsl.nlp.LingPipePartOfSpeechTagger; import org.dllearner.algorithm.tbsl.nlp.PartOfSpeechTagger; import org.dllearner.algorithm.tbsl.nlp.StanfordPartOfSpeechTagger; import org.dllearner.algorithm.tbsl.nlp.TreeTagger; @@ -13,17 +14,24 @@ public static void main(String[] args) throws IOException, ClassNotFoundException, TreeTaggerException { - String sentence = "Which rivers does the Brooklyn Bridge cross ?"; + String sentence = "When did Nirvana record Nevermind?"; +// String sentence = "Which rivers does the Brooklyn Bridge cross?"; + + //Stanford PartOfSpeechTagger tagger = new StanfordPartOfSpeechTagger(); long startTime = System.currentTimeMillis(); String tagged = tagger.tag(sentence); System.out.format("Tagged sentence with Stanford tagger (%d ms):\n", System.currentTimeMillis()-startTime); System.out.println(tagged + "\n"); - TreeTagger tt = new TreeTagger(); - tt.tag(sentence); +// //TreeTagger +// TreeTagger tt = new TreeTagger(); +// tt.tag(sentence); + + + //Apache OpenNLP tagger = new ApachePartOfSpeechTagger(); startTime = System.currentTimeMillis(); tagged = tagger.tag(sentence); @@ -31,13 +39,30 @@ startTime = System.currentTimeMillis(); System.out.println(tagged + "\n"); - + //Apache OpenNLP Top k startTime = System.currentTimeMillis(); List<String> topKTaggedSentences = tagger.tagTopK(sentence); System.out.format("Top k tags with Apache OpenNLP (%d ms):\n", System.currentTimeMillis()-startTime); for(String t : topKTaggedSentences){ System.out.println(t); } + + + //LingPipe + tagger = new LingPipePartOfSpeechTagger(); + startTime = System.currentTimeMillis(); + tagged = tagger.tag(sentence); + System.out.format("\nTagged sentence with LingPipe API (%d ms):\n", System.currentTimeMillis()-startTime); + startTime = System.currentTimeMillis(); + System.out.println(tagged + "\n"); + + //LingPipe Top k + startTime = System.currentTimeMillis(); + topKTaggedSentences = tagger.tagTopK(sentence); + System.out.format("Top k tags with LingPipe API (%d ms):\n", System.currentTimeMillis()-startTime); + for(String t : topKTaggedSentences){ + System.out.println(t); + } } } Modified: trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TemplateGenerationTest.java =================================================================== --- trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TemplateGenerationTest.java 2011-06-10 14:37:59 UTC (rev 2865) +++ trunk/components-ext/src/test/java/org/dllearner/algorithm/tbsl/TemplateGenerationTest.java 2011-06-13 13:18:07 UTC (rev 2866) @@ -60,7 +60,7 @@ */ public static void main(String[] args) { - File file = new File("src/main/resources/tbsl/evaluation/dbpedia-train-tagged(ideal).xml"); + File file = new File("src/main/resources/tbsl/evaluation/dbpedia-test-questions-tagged(ideal).xml"); List<String> questions = readQuestions(file); StringBuilder successful = new StringBuilder(); Modified: trunk/components-ext/successful.txt =================================================================== --- trunk/components-ext/successful.txt 2011-06-10 14:37:59 UTC (rev 2865) +++ trunk/components-ext/successful.txt 2011-06-13 13:18:07 UTC (rev 2866) @@ -1,177 +1,396 @@ ***************************************************************** -Give/VB me/PRP all/DT school/NN types/NNS +Which/WDT presidents/NNS of/IN the/DT United/NNP States/NNPS had/VBD more/JJR than/IN three/CD children/NNS >> QUERY: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> +SELECT ?x COUNT(?v0) AS ?c WHERE { + ?x ?p6 ?v1 . + ?x ?p5 ?y . + ?v0 rdf:type ?p4 . + ?x rdf:type ?p3 . + FILTER(?c > 3) . +} + +>> SLOTS: +v1: RESOURCE {United States} +p3: CLASS {presidents,president} +p4: CLASS {children,child,kid,youngster,minor} +p5: PROPERTY {had} +p6: PROPERTY {} +>> QUERY: + +PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> +PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + +SELECT ?x COUNT(?v0) AS ?c WHERE { + ?x ?p2 ?y . + ?v1 ?p0 ?x . + ?v0 rdf:type ?p1 . + FILTER(?c > 3) . +} + +>> SLOTS: +v1: RESOURCE {United States} +p0: PROPERTY {presidents,president} +p1: CLASS {children,child,kid,youngster,minor} +p2: PROPERTY {had} +***************************************************************** +Give/VB me/PRP the/DT official/JJ websites/NNS of/IN actors/NNS of/IN the/DT television/NN show/NN Charmed/VBN +>> QUERY: + +PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> +PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?y WHERE { - ?y rdf:type ?p0 . + ?y ?p5 ?j . + ?v3 ?p4 ?v0 . + ?v3 ?p8 ?y . + ?v3 rdf:type ?p7 . + ?v0 rdf:type ?p6 . } >> SLOTS: -p0: CLASS {school types} +v0: RESOURCE {Charmed} +p4: PROPERTY {} +p5: PROPERTY {official} +p6: CLASS {television show} +p7: CLASS {actors,actor,histrion,player,thespian} +p8: PROPERTY {websites,website,site} +>> QUERY: + +PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> +PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + +SELECT ?y WHERE { + ?y ?p9 ?j . + ?v0 rdf:type ?p11 . + ?v0 ?p12 ?v3 . + ?y rdf:type ?p13 . + ?y ?p10 ?v3 . +} + +>> SLOTS: +v0: RESOURCE {Charmed} +p9: PROPERTY {official} +p10: PROPERTY {} +p11: CLASS {television show} +p12: PROPERTY {actors,actor,histrion,player,thespian} +p13: CLASS {websites,website,site} +>> QUERY: + +PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> +PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + +SELECT ?y WHERE { + ?v0 rdf:type ?p16 . + ?y rdf:type ?p18 . + ?y ?p15 ?j . + ?v3 rdf:type ?p17 . + ?v3 ?p14 ?v0 . + ?y ?p14 ?v3 . +} + +>> SLOTS: +v0: RESOURCE {Charmed} +p14: PROPERTY {} +p15: PROPERTY {official} +p16: CLASS {television show} +p17: CLASS {actors,actor,histrion,player,thespian} +p18: CLASS {websites,website,site} +>> QUERY: + +PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> +PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + +SELECT ?y WHERE { + ?y ?p0 ?j . + ?v0 ?p2 ?v3 . + ?v3 ?p3 ?y . + ?v0 rdf:type ?p1 . +} + +>> SLOTS: +v0: RESOURCE {Charmed} +p0: PROPERTY {official} +p1: CLASS {television show} +p2: PROPERTY {actors,actor,histrion,player,thespian} +p3: PROPERTY {websites,website,site} ***************************************************************** -Who/WP are/VBP the/DT presidents/NNS of/IN the/DT United/NNP States/NNPS +Who/WP is/VBZ the/DT daughter/NN of/IN Bill/NNP Clinton/NNP married/VBN to/TO >> QUERY: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?y WHERE { - ?v0 ?p0 ?y . + ?v0 ?p1 ?x . + ?x ?p0 ?y . } >> SLOTS: -v0: RESOURCE {United States} -p0: PROPERTY {presidents,president} +v0: RESOURCE {Bill Clinton} +p0: PROPERTY {married} +p1: PROPERTY {daughter,girl} >> QUERY: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?y WHERE { - ?y rdf:type ?p1 . - ?y ?p2 ?v0 . + ?x ?p4 ?v0 . + ?x rdf:type ?p2 . + ?x ?p3 ?y . } >> SLOTS: -v0: RESOURCE {United States} -p1: CLASS {presidents,president} -p2: PROPERTY {} +v0: RESOURCE {Bill Clinton} +p2: CLASS {daughter,girl} +p3: PROPERTY {married} +p4: PROPERTY {} ***************************************************************** -Who/WP was/VBD the/DT wife/NN of/IN President/NNP Lincoln/NNP +Which/WDT river/NN does/VBZ the/DT Brooklyn/NNP Bridge/NNP cross/VB >> QUERY: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?y WHERE { - ?y rdf:type ?p1 . - ?y ?p2 ?v0 . + ?v0 ?p3 ?y . + ?v0 rdf:type ?p2 . } >> SLOTS: -v0: RESOURCE {President Lincoln} -p1: CLASS {wife} +v0: RESOURCE {Brooklyn Bridge} +p2: CLASS {river} +p3: PROPERTY {cross} +>> QUERY: + +PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> +PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + +SELECT ?y WHERE { + ?x ?p1 ?y . + ?y rdf:type ?p0 . +} + +>> SLOTS: +x: RESOURCE {Brooklyn Bridge} +p0: CLASS {river} +p1: PROPERTY {cross} +***************************************************************** +How/WRB many/JJ monarchical/JJ countries/NNS are/VBP there/RB in/IN Europe/NNP +>> QUERY: + +PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> +PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + +ASK WHERE { + ?y ?p1 ?j . + ?y rdf:type ?p0 . + ?y ?p2 ?v1 . + FILTER(?y == ?y) . +} + +>> SLOTS: +p0: CLASS {countries,state,nation,country,land} +p1: PROPERTY {monarchical} p2: PROPERTY {} +***************************************************************** +Where/WRB did/VBD Abraham/NNP Lincoln/NNP die/VB >> QUERY: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?y WHERE { + ?x ?p0 ?y . +} + +>> SLOTS: +x: RESOURCE {Abraham Lincoln} +p0: PROPERTY {diePlace} +***************************************************************** +Is/VBZ the/DT wife/NN of/IN President/NNP Obama/NNP called/VBD Michelle/NNP +>> QUERY: + +PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> +PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + +ASK WHERE { ?v0 ?p0 ?y . + ?y ?p1 'michelle' . } >> SLOTS: -v0: RESOURCE {President Lincoln} +v0: RESOURCE {President Obama} p0: PROPERTY {wife} +p1: PROPERTY {title,name} +>> QUERY: + +PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> +PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + +ASK WHERE { + ?y rdf:type ?p2 . + ?y ?p4 'michelle' . + ?y ?p3 ?v0 . +} + +>> SLOTS: +v0: RESOURCE {President Obama} +p2: CLASS {wife} +p3: PROPERTY {} +p4: PROPERTY {title,name} ***************************************************************** -Who/WP developed/VBD the/DT video/NN game/NN World/NN of/IN Warcraft/NNP +Which/WDT states/NNS of/IN Germany/NNP are/VBP governed/VBN by/IN the/DT Social/NNP Democratic/NNP Party/NNP >> QUERY: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?x WHERE { - ?v1 rdf:type ?p6 . - ?x ?p4 ?v1 . - ?v1 rdf:type ?p3 . - ?v1 ?p5 ?v0 . + ?v0 ?p1 ?x . + ?y ?p0 ?x . } >> SLOTS: -v0: RESOURCE {Warcraft} -p3: CLASS {video game} -p4: PROPERTY {developed} -p5: PROPERTY {} -p6: CLASS {World,universe,existence,creation,world} +y: RESOURCE {Social Democratic Party} +v0: RESOURCE {Germany} +p0: PROPERTY {governed} +p1: PROPERTY {states,state,province} >> QUERY: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?x WHERE { - ?x ?p1 ?v1 . - ?v1 rdf:type ?p0 . - ?v0 ?p2 ?v1 . + ?x ?p4 ?v0 . + ?x rdf:type ?p3 . + ?y ?p2 ?x . } >> SLOTS: -v0: RESOURCE {Warcraft} -p0: CLASS {video game} -p1: PROPERTY {developed} -p2: PROPERTY {World,universe,existence,creation,world} +y: RESOURCE {Social Democratic Party} +v0: RESOURCE {Germany} +p2: PROPERTY {governed} +p3: CLASS {states,state,province} +p4: PROPERTY {} ***************************************************************** -What/WP is/VBZ the/DT official/JJ website/NN of/IN Tom/NNP Hanks/NNP +Which/WDT US/NNP states/NNS possess/VBP gold/NN minerals/NNS >> QUERY: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> +SELECT ?x WHERE { + ?x rdf:type ?p2 . + ?x ?p1 ?j . + ?y rdf:type ?p3 . + ?x ?p0 ?y . +} + +>> SLOTS: +p0: PROPERTY {possess} +p1: PROPERTY {US} +p2: CLASS {states,state,province} +p3: CLASS {gold minerals} +***************************************************************** +In/IN which/WDT country/NN does/VBZ the/DT Nile/NNP start/VB +>> QUERY: + +PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> +PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + SELECT ?y WHERE { - ?y rdf:type ?p2 . - ?y ?p4 ?j . - ?y ?p3 ?v1 . + ?v0 ?p3 ?y . + ?v0 rdf:type ?p2 . } >> SLOTS: -v1: RESOURCE {Tom Hanks} -p2: CLASS {website,site} -p3: PROPERTY {} -p4: PROPERTY {official} +v0: RESOURCE {Nile} +p2: CLASS {country,state,nation,land,commonwealth} +p3: PROPERTY {start} >> QUERY: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?y WHERE { - ?v1 ?p1 ?y . - ?y ?p0 ?j . + ?y rdf:type ?p1 . + ?x ?p0 ?y . } >> SLOTS: -v1: RESOURCE {Tom Hanks} -p0: PROPERTY {official} -p1: PROPERTY {website,site} +x: RESOURCE {Nile} +p0: PROPERTY {start} +p1: CLASS {country,state,nation,land,commonwealth} ***************************************************************** -Who/WP produced/VBD the/DT most/JJS films/NNS +Which/WDT locations/NNS have/VBP more/JJR than/IN two/CD caves/NNS >> QUERY: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> -SELECT COUNT(?y) AS c2 WHERE { - ?x ?p1 ?y . +SELECT ?x COUNT(?v0) AS ?c WHERE { + ?x rdf:type ?p2 . + ?x ?p0 ?y . + ?v0 rdf:type ?p1 . + FILTER(?c > 2) . +} + +>> SLOTS: +p0: PROPERTY {have} +p1: CLASS {caves,cave} +p2: CLASS {locations,location} +***************************************************************** +Is/VBZ proinsulin/NNP a/DT protein/NN +>> QUERY: + +PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> +PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + +ASK WHERE { ?y rdf:type ?p0 . + FILTER(?y == ?y) . } -ORDER BY DESC(?c2) -LIMIT 1 OFFSET 0 >> SLOTS: -p0: CLASS {films,movie,film,picture,pic} -p1: PROPERTY {produced} +y: RESOURCE {proinsulin} +p0: CLASS {protein} ***************************************************************** -Which/WDT mountains/NNS are/VBP higher/JJR than/IN the/DT Nanga/NNP Parbat/NNP +Which/WDT classis/NN does/VBZ the/DT Millepede/NNP belong/VBP to/TO >> QUERY: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?y WHERE { - ?y ?p1 ?j . - ?v0 ?p1 ?i . + ?v0 ?p3 ?y . + ?v0 rdf:type ?p2 . +} + +>> SLOTS: +v0: RESOURCE {Millepede} +p2: CLASS {classis} +p3: PROPERTY {belong} +>> QUERY: + +PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> +PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + +SELECT ?y WHERE { + ?x ?p1 ?y . ?y rdf:type ?p0 . - FILTER(?j > ?i) . } >> SLOTS: -v0: RESOURCE {Nanga Parbat} -p0: CLASS {mountains,mountain,mount} -p1: PROPERTY {higherdegree} +x: RESOURCE {Millepede} +p0: CLASS {classis} +p1: PROPERTY {belong} ***************************************************************** -Who/WP created/VBD English/NNP Wikipedia/NNP +Who/WP created/VBD Goofy/NNP >> QUERY: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -182,79 +401,76 @@ } >> SLOTS: -y: RESOURCE {English Wikipedia} +y: RESOURCE {Goofy} p0: PROPERTY {created} ***************************************************************** -Give/VB me/PRP all/DT actors/NNS starring/VBG in/IN Batman/NNP Begins/NNPS +Give/VB me/PRP the/DT capitals/NNS of/IN all/DT US/NNP states/NNS >> QUERY: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?y WHERE { - ?y rdf:type ?p1 . - ?y ?p0 ?v1 . + ?v0 rdf:type ?p3 . + ?v0 ?p5 ?j . + ?y ?p6 ?v0 . + ?y rdf:type ?p4 . } >> SLOTS: -v1: RESOURCE {Batman Begins} -p0: PROPERTY {starring} -p1: CLASS {actors,actor,histrion,player,thespian} -***************************************************************** -Which/WDT software/NN has/VBZ been/VBN developed/VBN by/IN organizations/NNS founded/VBN in/IN California/NNP +p3: CLASS {states,state,province} +p4: CLASS {capitals,capital} +p5: PROPERTY {US} +p6: PROPERTY {} >> QUERY: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> -SELECT ?x WHERE { - ?y ?p0 ?v1 . - ?x rdf:type ?p2 . - ?y ?p1 ?x . - ?y rdf:type ?p3 . +SELECT ?y WHERE { + ?y ?p13 ?v0 . + ?v0 rdf:type ?p11 . + ?y rdf:type ?p10 . + ?v0 ?p12 ?j . } >> SLOTS: -v1: RESOURCE {California} -p0: PROPERTY {founded} -p1: PROPERTY {developed} -p2: CLASS {software,package} -p3: CLASS {organizations,organization,organisation} -***************************************************************** -Is/VBZ Christian/NNP Bale/NNP starring/VBG in/IN Batman/NNP Begins/NNPS +p10: CLASS {capitals,capital} +p11: CLASS {states,state,province} +p12: PROPERTY {US} +p13: PROPERTY {} >> QUERY: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> -ASK WHERE { - ?y ?p0 ?v0 . +SELECT ?y WHERE { + ?v0 ?p7 ?y . + ?v0 rdf:type ?p8 . + ?v0 ?p9 ?j . } >> SLOTS: -y: RESOURCE {Christian Bale} -v0: RESOURCE {Batman Begins} -p0: PROPERTY {starring} -***************************************************************** -Give/VB me/PRP the/DT websites/NNS of/IN companies/NNS with/IN more/JJR than/IN 500000/CD employees/NNS +p7: PROPERTY {capitals,capital} +p8: CLASS {states,state,province} +p9: PROPERTY {US} >> QUERY: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> -SELECT ?y COUNT(?v0) AS ?c WHERE { - ?v0 rdf:type ?p9 . - ?v1 ?p10 ?y . - ?v1 rdf:type ?p12 . - ?v1 ?p11 ?v2 . - FILTER(?c > 500000) . +SELECT ?y WHERE { + ?v0 rdf:type ?p0 . + ?v0 ?p1 ?y . + ?v0 ?p2 ?j . } >> SLOTS: -p9: CLASS {employees,employee} -p10: PROPERTY {websites,website,site} -p11: PROPERTY {} -p12: CLASS {companies,company} +p0: CLASS {states,state,province} +p1: PROPERTY {capitals,capital} +p2: PROPERTY {US} +***************************************************************** +Give/VB me/PRP all/DT cities/NNS in/IN New/NNP Jersey/NNP with/IN more/JJR than/IN 100000/CD inhabitants/NNS >> QUERY: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> @@ -262,577 +478,753 @@ SELECT ?y COUNT(?v0) AS ?c WHERE { ?y ?p6 ?v3 . - ?y ?p4 ?v1 . - ?y rdf:type ?p8 . + ?v3 ?p4 ?v2 . ?v0 rdf:type ?p5 . - ?v3 rdf:type ?p7 . - FILTER(?c > 500000) . + ?y rdf:type ?p7 . + FILTER(?c > 100000) . } >> SLOTS: +v3: RESOURCE {New Jersey} p4: PROPERTY {} -p5: CLASS {employees,employee} +p5: CLASS {inhabitants,inhabitant,habitant,dweller,denizen} p6: PROPERTY {} -p7: CLASS {companies,company} -p8: CLASS {websites,website,site} +p7: CLASS {cities,city,metropolis} >> QUERY: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?y COUNT(?v0) AS ?c WHERE { + ?y ?p1 ?v1 . + ?v0 rdf:type ?p0 . + ?y rdf:type ?p2 . + ?y ?p3 ?v3 . + FILTER(?c > 100000) . +} + +>> SLOTS: +p0: CLASS {inhabitants,inhabitant,habitant,dweller,denizen} +p1: PROPERTY {} +p2: CLASS {cities,city,metropolis} +p3: PROPERTY {} +***************************************************************** +Which/WDT museum/NN exhibits/VBZ The/DT Scream/NNP by/IN Munch/NNP +>> QUERY: + +PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> +PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> + +SELECT ?x WHERE { ?y ?p0 ?v1 . - ?v3 ?p3 ?y . - ?v3 rdf:type ?p2 . - ?v0 rdf:type ?p1 . - FILTER(?c > 500000) . + ?x rdf:type ?p2 . + ?x ?p1 ?y . } >> SLOTS: +y: RESOURCE {Scream} +v1: RESOURCE {Munch} p0: PROPERTY {} -p1: CLASS {employees,employee} -p2: CLASS {companies,company} -p3: PROPERTY {websites,website,site} +p1: PROPERTY {exhibits} +p2: CLASS {museum} +***************************************************************** +What/WP is/VBZ the/DT revenue/NN of/IN IBM/NNP >> QUERY: PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-s... [truncated message content] |