
Décembre 2012, Google propose le knowledge graphà ses utilisateurs français. Octobre 2012, l'Inria, le MinistÚre de la Culture et Wikimédia officialisent l'existence du dbpdia français sous le nom de code sémanticpédia. Ca bouge !
Et nos catalogues ? Comment les enrichir automatiquement avec dbpedia ?
Pour rĂ©pondre Ă cette question ouverte par Lully sur son blog, j'ai tentĂ© quelques observations et expĂ©riences avec le langage dâinterrogation SPARQL.
Certaines des requĂȘtes que vous aurez l'occasion de rencontrer peuvent sembler inutilies, des pages wikipĂ©dia existent pour dĂ©crire les mĂȘmes rĂ©sultats. Le but Ă©tait d'expĂ©rimenter. En outre, ces requĂȘtes peuvent ĂȘtre rĂ©utilisĂ©es pour en dĂ©couvrir plus.
LâidĂ©e de dĂ©part est de rĂ©cupĂ©rer la biographie des auteurs, musiciens et rĂ©alisateurs, ainsi que les prix et distinctions dont ils sont laurĂ©ats. Une fois ces donnĂ©es trouvĂ©es, il faudra ajouter un lien Ă chaque prix afin dâafficher tous les laurĂ©ats. Ceci Ă©tant dit, commençons lâexploration du web sĂ©mantique culturelle !
Exploration du graphe dâun auteur.
Observons la ressource Milan Kundera. Plusieurs informations sont disponibles :
- La propriĂ©tĂ© (appelĂ© aussi prĂ©dicat) rdfs:label pour le nom au format chaĂźne. Il faut donc lire : lâUri http://fr.dbpedia.org/page/Milan_Kundera a pour label (nom) la chaĂźne de catactĂšre Milan Kundera
- La propriété dbpedia-owl:abstract qui lie le sujet Milan Kundera au résumé de sa page wikipédia.
- La propriĂ©tĂ© dbpedia-owl:award pour les prix et autres distinctions reçues par lâauteur. Dans le cas de Kundera :
- La propriété prop-fr:distinctions pour les prix mais les objets sont au format chaßne de caractÚre.
A premiĂšre vue, on peut donc se dire que ces propriĂ©tĂ©s suffisent. Pourtant en suivant dbpedia-fr:Prix_MĂ©dicis, 21 auteurs sont liĂ©s au prix par lâintermĂ©diaire du prĂ©dicat « is dbpedia-owl:award of ». On peut aussi retrouver ces informations grĂące Ă la requĂȘte saisie dans lâĂ©diteur SPARQL qui retourne les rĂ©sultats:
SELECT?nomWHERE{{?auteurdbpedia-owl:award dbpedia-fr:Prix_Médicis}UNION{?auteurprop-fr:distinctions "Prix_Médicis"}?auteurrdfs:label ?nom.}ORDERBY?nom
Analyse quantitative des prix représentés
IntĂ©ressons nous maintenant au nombre de laurĂ©ats par prix littĂ©raires, essayons la requĂȘte suivante :
PREFIXcategorie:<http://fr.dbpedia.org/resource/Catégorie:>SELECT?nomPrix,(COUNT(?nom)AS?nombreLaureats)WHERE{# RécupÚre tous les graphes ayant un prédicat award?sdbpedia-owl:award ?prix{# Permet de récupérer tous les prix littéraires français{?prixdcterms:subject categorie:Prix_littéraire_en_France}UNION{?prixdbpedia-owl:wikiPageWikiLink dbpedia-fr:Prix_littéraire}?prixrdfs:label ?nomPrix.}?srdfs:label ?nom}ORDERBYDESC(?nombreLaureats)
Soient 166 prix dont 31 prix avec plus de 10 laurĂ©ats et 55 avec 1 seul laurĂ©at.Â
Cette solution Ă©tait la plus attirante. Simple (pas de traitement de chaĂźne, de filtre), rapide (un DESCIRBE de la ressource suffisait). Elle nâest pas pourtant exhaustive et ne rĂ©pond pas aux problĂšmes des homonymies. Par exemple, lâauteur de BD Boulet qui est dĂ©crit comme Ă©tant un boulet.
Il faut donc trouver une autre technique.
Et les catégories entrent en scÚne
La puissance de wikipédia et donc de dbpédia réside aussi dans la catégorisation des données qui ne ferait pas rougir un catalogueur. Ce principes va nous servir pour améliorer la qualité et la quantité des résultats retrouvés.
En regardant de nouveau la notice de Milan Kundera, le prĂ©dicat dcterms:subject retourne toutes les catĂ©gories de la page wikipĂ©dia de < target="_blank"href="http://fr.wikipedia.org/wiki/Milan_Kundera">lâauteur. Parmi ces catĂ©gories :
- dbpedia-fr:Catégorie:Lauréat_du_prix_mondial_Cino_Del_Duca
- dbpedia-fr:Catégorie:Lauréat_du_prix_Médicis_étranger
- dbpedia-fr:Catégorie:Lauréat_du_grand_prix_de_littérature_de_l'Académie_française
On rĂ©cupĂšre donc lâinformation pour le prix de lâacadĂ©mie française, mais on perd les prix de JĂ©rusalem, le Prix Herder et le Prix de la BnF. Par contre, quand on passe la requĂȘte suivant dans lâĂ©diteur SPARQL :
PREFIXcategorie:<http://fr.dbpedia.org/resource/Catégorie:>SELECT?nomWHERE{?auteurdcterms:subject categorie:Lauréat_du_prix_Médicis.?auteurrdfs:label ?nom.}ORDERBYDESC(?nom)
On obtient les rĂ©sultats suivants. Soient 53 rĂ©sultats pour le prix MĂ©dicis. Le compte est bon. Au moment de la gĂ©nĂ©ration de la base, le 2012 nâĂ©tait pas connu.
Pour un « grand prix », ça fonctionne mais pour les autres prix ? Essayons la requĂȘte suivante qui retourne le nombre de laurĂ©ats pour tous les prix littĂ©raires.
PREFIXcategorie:<http://fr.dbpedia.org/resource/Catégorie:>SELECTDISTINCT?nomPrix,(COUNT(?nom)AS?nombreLaureats)WHERE{?auteurdcterms:subject ?sujet.?auteurrdfs:label ?nom.{{#Récupération des sujets ayant un lien avec les prix littéraires.?sujetskos:broader categorie:Lauréat_de_prix_littéraire.?sujetrdfs:label ?nomPrix.}}}ORDERBYDESC(?nombreLaureats)
Soient 68 prix (donc moins que pour la mĂ©thode prĂ©cĂ©dente) mais seulement 9 prix avec moins de 10 laurĂ©ats.Â
Pour les autres prix,. le prix dĂ©cembre, ça marche (14). Prix de Flore (câest bon). Par contre, pour le prix Locus (28) par exemple, on est bien loin du compte. Pour sâen convaincre, la page wikipĂ©dia du prix.
La requĂȘte qui rĂ©cupĂšre tous les laurĂ©ats du MĂ©dicis et les informations biographiques.
PREFIXcategorie:<http://fr.dbpedia.org/resource/Catégorie:>SELECT?nom,?image,?abstractWHERE{?auteurdcterms:subject categorie:Lauréat_du_prix_Médicis.?auteurrdfs:label ?nom.OPTIONAL{?auteurdcterms:subject ?naissanceFILTERREGEX(?naissance, "Naissance_en_1", "i")}OPTIONAL{?auteurdbpedia-owl:thumbnail ?image}OPTIONAL{?auteurdbpedia-owl:abstract ?abstract}}ORDERBY?naissance
En conclusion
La seconde mĂ©thode semble donc plus complĂšte mais ça nâest toujours pas exhaustif. En plus, il va falloir spĂ©cifier que tel sujet est un prix et que tel autre nâest quâune date de naissance ou une fonction, donc rĂ©cupĂ©rer les sujets contenant « laurĂ©at », « meilleur » ou « prix ». On passera donc peut ĂȘtre Ă cĂŽtĂ© dâinformations intĂ©ressantes.
Une autre solution est de faire une union du champs « award » et du sujet filtré. Il faut donc faire « comprendre » au programme que la catégorie « Lauréat du prix Médicis » correspond à la ressource « Prix médicis ». Le problÚme ? La relation est la suivante :
CatĂ©gorie:LaurĂ©at_du_prix_MĂ©dicis â skos :broader -> dbpedia-fr:CatĂ©gorie:Prix_MĂ©dicis - is dcterms:subject of -> http://fr.dbpedia.org/page/Prix_MĂ©dicis
Cette relation ne fonctionnera pas dans tous les cas. En plus, si jâai bien compris, SPARQL nâest pas conçu comme un langage de recherche mais comme un langage de requĂȘte. Ce qui rĂ©duit encore le champ dâapplication.
Enfin dbpedia français est en encore en version bĂ©ta. Les rĂ©sultats dans ce cadre sont pourtant satisfaisants. Alors quâest ce quâon fait ? Le dbpedia français nâa que quelques mois et on peut imaginer que les mĂ©thodes de croisement des donnĂ©es vont sĂ»rement Ă©voluer pour parvenir Ă plus de prĂ©cision. Les articles wikipĂ©dia vont sâĂ©toffer. On pourrait mĂȘme imaginer (rĂȘvons⊠Câest quand mĂȘme le premier article du blog !) que les bibliothĂ©caires arrĂȘtent de cataloguer pour enrichir wikipĂ©dia qui enrichirait le catalogue !!!
Soyons optimistes⊠Une expĂ©rience dâenrichissement du catalogue peut donc ĂȘtre tentĂ©e. Ca tombe bien . Câest dĂ©jĂ fait. Vous pouvez voir une des notices de Milan Kundera et la liste des laurĂ©ats du prix MĂ©dicis Etranger Comment on fait ? Dans un prochain articleâŠÂ Â
UPDATE 18/01/2013 : DBpedia en français a réalisé une nouvelle extraction ce matin. Le prédicat dbpedia-owl:abstract a disparu.Dans tous les cas, une alternative est possible :
Interroger le chapitre en langue anglaise avec la requĂȘte suivante :
PREFIXdb:<http://dbpedia.org/resource/>PREFIXdbo:<http://dbpedia.org/ontology/>PREFIXdcterms:<http://purl.org/dc/terms/>Â SELECTDISTINCT?abstractWHERE{{?auteurrdfs:label "Milan Kundera"@fr}UNION{?auteurfoaf:name "Milan Kundera"@fr}.{?auteur a dbo:Person}UNION{?auteur a foaf:Person}{?auteurdbo:abstract ?abstract}.FILTER(LANG(?abstract)="fr")}
UPDATE 22/01/13 : AprÚs un mail à dbpedia fr, Julien Cojan m'a répondu qu'il avait déjà corrigé ce problÚme. Il m'invite aussi dans des cas similaires à interroger d'autres chapitres de dbpedia. C'est vraiment trÚs bien dbpedia !