From 2aa0a88584935382cd1f62e9cae21c1154d2d2dc Mon Sep 17 00:00:00 2001 From: Morgan <morgan.ridel@insa-rouen.fr> Date: Mon, 16 Apr 2018 13:41:17 +0200 Subject: [PATCH] Ajout travail Morgan Ridel --- .../QuestionReponsesGeneralesFactory.java | 4 +- .../webSemantique/QuestionReponsesLivres.java | 112 ++++++++++++++++++ .../QuestionReponsesLivresFactory.java | 30 +++++ 3 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 src/fr/insarouen/asi/document/quizz/webSemantique/QuestionReponsesLivres.java create mode 100644 src/fr/insarouen/asi/document/quizz/webSemantique/QuestionReponsesLivresFactory.java diff --git a/src/fr/insarouen/asi/document/quizz/QuestionReponsesGeneralesFactory.java b/src/fr/insarouen/asi/document/quizz/QuestionReponsesGeneralesFactory.java index a672052..0131712 100644 --- a/src/fr/insarouen/asi/document/quizz/QuestionReponsesGeneralesFactory.java +++ b/src/fr/insarouen/asi/document/quizz/QuestionReponsesGeneralesFactory.java @@ -3,6 +3,7 @@ package fr.insarouen.asi.document.quizz; import fr.insarouen.asi.document.quizz.webSemantique.QuestionReponsesCapitalesFactory; import fr.insarouen.asi.document.quizz.webSemantique.QuestionReponsesTournoisTennisFactory; import fr.insarouen.asi.document.quizz.webSemantique.QuestionReponsesAuteursFactory; +import fr.insarouen.asi.document.quizz.webSemantique.QuestionReponsesLivresFactory; public class QuestionReponsesGeneralesFactory implements QuestionReponsesFactory { QuestionReponsesFactory[] lesFactories; @@ -11,7 +12,8 @@ public class QuestionReponsesGeneralesFactory implements QuestionReponsesFactory lesFactories = new QuestionReponsesFactory[]{new QuestionReponsesAdditionFactory(), new QuestionReponsesCapitalesFactory(), new QuestionReponsesTournoisTennisFactory(), - new QuestionReponsesAuteursFactory()}; + new QuestionReponsesAuteursFactory(), + new QuestionReponsesLivresFactory()}; } public QuestionReponses getQuestionReponses() { diff --git a/src/fr/insarouen/asi/document/quizz/webSemantique/QuestionReponsesLivres.java b/src/fr/insarouen/asi/document/quizz/webSemantique/QuestionReponsesLivres.java new file mode 100644 index 0000000..26e5558 --- /dev/null +++ b/src/fr/insarouen/asi/document/quizz/webSemantique/QuestionReponsesLivres.java @@ -0,0 +1,112 @@ +package fr.insarouen.asi.document.quizz.webSemantique; + +import fr.insarouen.asi.document.quizz.QuestionReponses; +import fr.insarouen.asi.document.quizz.Aleatoire; +import java.net.URL; +import java.net.MalformedURLException; +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.rdf.model.RDFNode; +import java.util.ArrayList; +import java.util.List; + +public class QuestionReponsesLivres extends QuestionReponsesFrDbpedia { + + String uriAuteur; + + + private static String getURILivre(String uriAuteur) { + String res = ""; + RDFNode rdfName; + String request = "SELECT distinct ?livre WHERE {\n"; + request = request + "?livre rdf:type <http://dbpedia.org/ontology/Book> .\n"; + request = request + "?livre <http://dbpedia.org/ontology/author> <"+ uriAuteur +"> .\n"; + request = request + "}\n"; + request = request + "ORDER BY RAND()\n"; + request = request + "LIMIT 1"; + for (QuerySolution solution : Outils.SPARQLQuerySolutions(getEntreeSparql(), getPrefixSparql(), request)) { + rdfName = solution.get("livre"); + res = rdfName.toString(); + } + return res; + } + + private static List<String> getURIAutresLivres(String uriAuteur) { + List<String> res = new ArrayList<String>(); + RDFNode rdfName; + String request = "select distinct ?livre where{\n"; + request = request + "?livre <http://dbpedia.org/ontology/author> ?auteur.\n"; + request = request + "?livre rdf:type <http://dbpedia.org/ontology/Book>.\n"; + request = request + "filter (?auteur != <"+uriAuteur+"> && isiri(?livre))}\nORDER BY RAND()\nLIMIT 20"; + + for (QuerySolution solution : Outils.SPARQLQuerySolutions(getEntreeSparql(), getPrefixSparql(), request)) { + rdfName = solution.get("?livre"); + res.add(rdfName.toString()); + } + return res; + } + + private static List<String> choisirLivres(List<String> ls, int nb) { + int pos; + List<String> res = new ArrayList<String>(); + for(int i=0;i<nb;i++) { + pos = Aleatoire.entierAleatoire(0, ls.size()); + res.add(ls.remove(pos)); + } + return res; + } + + private static String getNomLivre(String uri) { + String res = ""; + RDFNode rdfName; + String request = "select ?nom where{<"+uri+"> rdfs:label ?nom."; + request = request+"filter(langmatches(lang(?nom), 'fr'))}"; + for (QuerySolution solution : Outils.SPARQLQuerySolutions(getEntreeSparql(), getPrefixSparql(), request)) { + rdfName = solution.get("nom"); + res = langStringToString(rdfName.toString()); + } + return res; + } + + private static String getNomAuteur(String uri) { + String res = ""; + RDFNode rdfName; + + // String request = "select ?nom where{<"+uri+"> <http://fr.dbpedia.org/property/nom> ?nom."; + String request = "select ?nom where{<"+uri+"> rdfs:label ?nom."; + request = request+"filter(langmatches(lang(?nom), 'fr'))}"; + for (QuerySolution solution : Outils.SPARQLQuerySolutions(getEntreeSparql(), getPrefixSparql(), request)) { + rdfName = solution.get("nom"); + res = langStringToString(rdfName.toString()); + } + return res; + } + + private static List<String> getNomLivres(List<String> uris) { + List<String> res = new ArrayList<String>(); + for(String uri : uris) + res.add(getNomLivre(uri)); + return res; + } + + private static String[] getQuestions(String _uriAuteur) { + String[] res = new String[4]; + List<String> autres = getURIAutresLivres(_uriAuteur); + autres = choisirLivres(autres,3); + res[0] = getNomLivre(getURILivre(_uriAuteur)); + for(int i=0;i<autres.size();i++) + res[1+i] = getNomLivre(autres.get(i)); + return res; + } + + public QuestionReponsesLivres(String _uriAuteur) { + super(getQuestions(_uriAuteur),0); + uriAuteur = _uriAuteur; + } + + public String getDomaine() { + return "Littérature"; + } + public String getQuestion() { + return "Quel est le livre écrit par "+getNomAuteur(uriAuteur)+" ?"; + } +} diff --git a/src/fr/insarouen/asi/document/quizz/webSemantique/QuestionReponsesLivresFactory.java b/src/fr/insarouen/asi/document/quizz/webSemantique/QuestionReponsesLivresFactory.java new file mode 100644 index 0000000..52e2ce2 --- /dev/null +++ b/src/fr/insarouen/asi/document/quizz/webSemantique/QuestionReponsesLivresFactory.java @@ -0,0 +1,30 @@ +package fr.insarouen.asi.document.quizz.webSemantique; + +import fr.insarouen.asi.document.quizz.QuestionReponses; +import fr.insarouen.asi.document.quizz.QuestionReponsesFactory; +import java.util.Random; +import java.util.List; +import java.util.ArrayList; +import com.hp.hpl.jena.query.QuerySolution; +import com.hp.hpl.jena.rdf.model.RDFNode; + +public class QuestionReponsesLivresFactory implements QuestionReponsesFactory { + + // static private Random generateur = new Random(); + + private String getURIAuteur() { + String res = ""; + RDFNode rdfName; + String request = "SELECT distinct ?uriAuteur WHERE {\n" + "?livre rdf:type <http://dbpedia.org/ontology/Book> .\n" + "?livre <http://dbpedia.org/ontology/author> ?uriAuteur .\n" + "FILTER EXISTS { ?uriAuteur rdfs:label ?nom . }\n" + "}\n" + "ORDER BY RAND()\n" + "LIMIT 1"; + for (QuerySolution solution : Outils.SPARQLQuerySolutions(QuestionReponsesFrDbpedia.getEntreeSparql(), QuestionReponsesWebSemantique.getPrefixSparql(), request)) { + rdfName = solution.get("uriAuteur"); + res = rdfName.toString(); + } + return res; + } + + public QuestionReponses getQuestionReponses() { + String auteur = getURIAuteur(); + return new QuestionReponsesLivres(auteur); + } +} -- GitLab