Requêter le contenu de Wikipedia avec SPARQL

décembre 6, 2007

Pour prolonger le débat récent entre Thomas et Bruno sur RDF et XML, un petit exemple illustrant le fait que SPARQL permet de requêter un graphe RDF, même très grand, sans connaître a priori ni sa structure, ni l’ontologie sous-jacente.

DBpedia, dont je vous ai déjà parlé, définit une URI à partir de chaque article du Wikipedia anglais, cette URI identifiant le sujet de l’article, la chose dont il parle. En fait l’article parle en général de beaucoup de choses, mais il a un sujet principal, par principe même de l’encyclopédie : « un article, une chose décrite ». Lire le reste de cette entrée »


dbpedia, geonames et autres données ouvertes

janvier 30, 2007

J’ai déjà eu l’occasion de parler ici du tissage de la Toile, et du rôle qu’y jouent les vocabulaires de référence. Un autre aspect commence à se développer à grande échelle, c’est celui de la fédération des données, et en particulier des données ouvertes, publiées sur le Web, libres de droits et réutilisables. L’expérience de geonames.org dont nous avons déjà parlé à plusieurs reprises, est exemplaire, et pas seulement parce que votre serviteur y contribue en tant qu’éditeur de l’ontologie. En effet on y rencontre les questions de scalabilité (la base geonames contient actuellemnt plus de 6 300 000 objets), de qualité et d’intégration des données, d’environnement collaboratif, et de modèle économique. L’expérience devient de plus en plus intéressante avec l’entrée en scène du projet dbpedia.org, dont le but est de « RDF-iser » les données structurées extraites de Wikipedia. C’est à grande échelle ce que Thomas nous a expliqué en petit avec sa base « Music is Knowledge ». D’ailleurs la musique est en bonne place dans les données traitées dans les prototypes. Comme la base geonames intègre aussi des liens vers les articles Wikipedia documentant les objets géographiques, tout ce petit monde communique et cherche à se coordonner au mieux, entre autres à travers la toute nouvelle initiative Interlinking Open Data on the Semantic Web.

Pourquoi un vendeur de logiciel comme Mondeca s’intéresse-t-il de façon active à de telles initiatives? La plupart des projets de Mondeca concernent en effet des données internes aux entreprises, et semblent loin du monde des données ouvertes et du savoir partagé. Mais dans de nombreux domaines, entre autres le tourisme, la possibilité d’intégrer des données ouvertes aux données internes, sur la base de vocabulaires et de standards RDF communs, est susceptible d’apporter une plus-value qui n’est pas à négliger. Nous intégrons déjà les interfaces Google Maps, comme dans le portail de la Nièvre, mais une intégration supplémentaire par exemple des objets localisés par Geonames sur le territoire, des richesses du patrimoine local décrites dans Wikipedia, une indexation des milieux naturels et des problématiques d’environnement s’appuyant sur le thésaurus ouvert GEMET … et bien d’autres à venir … sont autant de « plus » que les communautés de savoir partagé peuvent apporter, et que la lingua franca RDF va faciliter. Et plutôt que d’attendre que tout cela arrive pour en récolter les fruits quels qu’ils soient, notre habitude à Mondeca est d’être pro-actifs dans toute cette évolution, et d’en anticiper les résultats. C’est ainsi que nous avons aidé l’an dernier l’INSEE à publier les données administratives de la France en RDF, données maintenant intégrées par geonames.org.

De plus la problématique de l’intégration des données ouvertes est de plus en plus similaire à celle qu’on rencontre dans l’entreprise pour l’intégration des données internes, tout aussi nombreuses et disparates, et le tissage de la Toile est une excellente école, surtout depuis que le Web sémantique commence à quitter les sphères académiques pour affronter la dure réalité des « vraies données du vrai monde ». Et chacun peut voir que la frontière entre données internes privées et données externes publiques et partagées devient de plus en plus artificielle et difficile à tracer, et qu’il serait vain de vouloir la marquer de barbelés ou de pare-feux, pour se retrancher d’un côté ou de l’autre. Bien sûr le modèle économique de tout cela n’est pas évident, et les déboires de l’édition musicale le montrent bien. Si les données sont publiques, les services qui permettent d’y accéder de façon intelligente feront la différence. Et bien sûr, plus les données publiques seront organisées intelligement, plus la tâche de tels services sera facilitée. C’est donc dans une stratégie « gagnant-gagnant » que s’inscrit la participation de Mondeca à de telles initiatives.


Knowledge is Music (et vice-versa) (3) – une liste d’entités nommées à partir de Wikipedia

décembre 14, 2006

[le post précédent décrit les objectifs et les étapes de ma petite expérience.]

Etape n°1 : modéliser une ontologie.
Mot d’ordre : « keep it simple »
En fait, j’ai choisi de rester tellement simple que parler d’ontologie n’a plus vraiment de sens ici, en tous cas pour l’instant : 2 classes d’objets, les « chanteurs » (singer) et les « groupes » (band). 2 propriétés : « à propos de » (about) (un lien vers une URL descriptive du chanteur ou du groupe en question), et « voir aussi » (see also) (une référence à un autre chanteur ou groupe de la base de connaissances).
Une sémantique au ras des paquerettes donc.

La distinction entre chanteurs et groupes tient au fait que Wikipedia les distingue dans son portail sur la musique française, donc autant garder la distinction – même si celle-ci n’est pas toujours claire (Manu Chao, un groupe ?).

Je n’ai pas pris la peine d’exprimer cette ontologie en OWL, mais implement en XTM, pour pouvoir l’importer directement dans ITM et paramétrer le logiciel.

mini-ontologie dans ITM

 

Etape n°2 : Constituer une liste d’entités.
Wikipedia contient pour ce faire 2 pages intéressantes : La liste des chanteurs français et francophones (600 entrées environ) et La liste des groupes musicaux français (130 entrées environ).

« Fichier > Enregistrer sous… » pour chacune de ces 2 pages, et un petit bout de XSLT permettent d’en extraire deux listes XMLisées propres, contenant pour chaque entrée le nom et l’URL Wikipedia associée :

<chanteur>
<nom>Dominique A</nom>
<url>http://fr.wikipedia.org/wiki/Dominique_A</url&gt;
</chanteur>
<chanteur>
<nom>Abd Al-Malik</nom>
<url>http://fr.wikipedia.org/wiki/Abd_al_Malik_%28chanteur%29</url&gt;
</chanteur>
<chanteur>
<nom>Myriam Abel</nom>
<url>http://fr.wikipedia.org/wiki/Myriam_Abel</url&gt;
</chanteur>

(note : les 2 pages de Wikipedia sont en fait malformées, et ne peuvent pas se traiter directement par XSLT; il faut d’abord passer par un copier-coller pour former un fichier HTML valide)
(note : dans les pages d’origine, on ignore les liens qui correspondent à des pages qui n’existent pas encore dans Wikipedia. Inutile de les sortir.)

De ce format initial, j’ai besoin de tirer 3 choses :

  1. Deux fichiers texte contenant respectivement la liste des noms des chanteurs et la liste des noms de groupes, pour alimenter les extractions linguistiques de Gate.
  2. Un fichier texte contenant la liste des URL des pages Wikipedia qui devront être analysées par Gate.
  3. Un fichier XTM Topic Maps permettant d’importer les chanteurs et les groupes dans ITM.

Pour les deux premiers éléments de cette liste, 2 feuilles de style très simples donnent respectivement comme résultat :
La liste des noms des chanteurs/groupes :

Dominique A
Abd Al-Malik
Myriam Abel
Salvatore Adamo
Isabelle Adjani
Admiral T
Akhenaton
(etc...)

Et la liste des URL des pages à traiter :

http://fr.wikipedia.org/wiki/Dominique_A
http://fr.wikipedia.org/wiki/Abd_al_Malik_%28chanteur%29
http://fr.wikipedia.org/wiki/Myriam_Abel
http://fr.wikipedia.org/wiki/Salvatore_Adamo
http://fr.wikipedia.org/wiki/Isabelle_Adjani
http://fr.wikipedia.org/wiki/Admiral_T
http://fr.wikipedia.org/wiki/Akhenaton_%28rappeur%29
(etc...)

En ce qui concerne la génération du XTM, c’est un tout petit plus compliqué, mais guère. Le résultat ressemble à ça :

<topic id="N10005">
<instanceOf>
<subjectIndicatorRef xlink:href="http://music.mondeca.com/music#Singer" mce_href="http://music.mondeca.com/music#Singer"/>
</instanceOf>
<subjectIdentity>
<subjectIndicatorRef xlink:href="http://fr.wikipedia.org/wiki/Dominique_A" mce_href="http://fr.wikipedia.org/wiki/Dominique_A"/>
</subjectIdentity>
<baseName>
<baseNameString>Dominique A</baseNameString>
</baseName>
<occurrence>
<instanceOf>
<subjectIndicatorRef xlink:href="http://music.mondeca.com/music#About" mce_href="http://music.mondeca.com/music#About"/>
</instanceOf>
<resourceRef xlink:href="http://fr.wikipedia.org/wiki/Dominique_A" mce_href="http://fr.wikipedia.org/wiki/Dominique_A"/>
</occurrence>
</topic>

Le fichier XTM est « prêt à l’import » dans ITM. Il structure les informations conformément à l’ontologie définie à l’étape précédente (dans la mesure où on peut parler de structuration…) : des topics de classe « chanteur » ou « groupe », ayant pour nom le nom tiré de Wikipedia, pour subjectIdentity l’URL de leur page Wikipedia, et pour attribut « à propos de » la même URL. (note : l’URL est remise comme attribut en plus du PSI de façon à apparaitre dans les écrans par la suite)

Le fichier XTM est ensuite importé dans l’outil ITM. On peut donc déjà, à la fin de cette étape, y consulter les 2 listes des chanteurs et des groupes, avec pour chaque entrée un nom, un identifiant, et une page associée :


Liste initiale des groupes
Page initiale d’un groupe

Au total : 598 chanteurs et 138 groupes de musique.


Knowledge is Music (et vice-versa) (2) – un mashup musico-sémantique

décembre 10, 2006

[le post précédent explique d’où vient l’idée originale de cette expérience.]

Mon objectif : créer de façon automatisée, à partir de textes non-structurés, une base de connaissances sur les chanteurs et les groupes de musique français. La base de connaissances se restreindra à des relations simples entre chanteurs et/ou groupes de musique. Puis montrer comment cette base peut être exploitée et peut évoluer dans le temps.

Mes outils : si l’article de hackdiary cité dans le précédent post utilisait les webservices Yahoo, et de simples fichiers texte pour structurer ses données, je me propose de réaliser l’expérience avec des outils plus scalables et sur lesquels je peux avoir entièrement la main (impossible de modifier le comportement d’un webservice externe) :

  • Gate analyser le contenu des pages (Gate est une plateforme de développement d’applications de traitement automatique du langage développée par l’Université de Stanford)
  • ITM, la solution de Mondeca, pour la modélisation de l’ontologie, le stockage de la connaissance, et son exploitation.
  • JGraph pour la représentation graphique
  • Un soupçon de XSLT
  • Une pincée de Java

Ma source de connaissances : j’ai l’impression que « In Wikipedia We Trust » pourrait devenir la devise de beaucoup de gens ces temps-ci. Hé bien je vais moi-aussi supposer que Wikipedia est une source sûre, et en extraire la connaissance qui va alimenter mon petit prototype. (note : une autre bonne source aurait pu être le wiki de last.fm, mais je ne crois pas qu’il soit très fourni en artistes français)

Mon mot d’ordre : « keep it simple » ! compte-tenu de la complexité de la chaîne à mettre en place, je fais d’abord simple, voire très simple, et ensuite, si le temps le permet, j’augmenterai la complexité.

Les 4 étapes de base pour aller au bout de mon petit prototype sont :

  1. Modéliser une ontologie
  2. Constituer une liste d’entités (ici des noms de chanteurs et de groupes de musique), et importer cette liste dans la base de connaissances.
  3. L’étape clé : à l’aide de Gate et du module d’indexation d’ITM, analyser les pages de Wikipedia, pour en extraire des relations entre chanteurs et/ou groupes, et rajouter ces relations dans la base de connaissance.
  4. Utiliser la base de connaissances : la requêter et la visualiser avec JGraph.

D’autres étapes pourront venir se rajouter si l’expérience avec les 4 premières est concluante; comme par exemple la mise à jour périodique de la base de connaissance pour rendre compte des évolutions des pages Wikipedia, ou encore un export de la base en RDF.


Knowledge is Music (et vice-versa) (1)

décembre 8, 2006

Il y a quelque mois de cela (debut 2006), j’étais tombé sur cet article du site hackdiary. L’auteur (Matt Biddulph) y décrit comment, à partir d’une liste de noms de personnalités politiques anglaises, en utilisant Wikipedia et les webservices Yahoo de recherche et d’extraction de termes, il arrive à créer des liens entre les personnalités de la liste initiale. Le mécanisme est le suivant :

  1. pour chaque nom dans la liste, il fait une recherche via le webservice Yahoo. Cela donne une liste de page web de résultat
  2. parmi cette liste, il prend le premier des résultats venant de Wikipedia
  3. il appelle ensuite le webservice Yahoo d’extraction de termes sur cette page de wikipedia. Ce webservice renvoie une liste de mots ou d’expressions (dont des noms de personnalités) contenus dans la page.
  4. parmi cette liste de mots, il prend les noms de personnalités présents dans la liste initiale
  5. cela dessine ainsi un graphe des relations entre ces personnalités politiques :Graphe des personnalités politiques anglaises(par exemple, si on parle de Margaret Thatcher sur la page wikipedia de Tony Blair, alors il y a un lien, un « pointeur », de Blair vers Thatcher).

A l’époque, cet article avait été pour moi le premier exemple concret des possibilités offertes par les combinaisons de webservices, ce qu’on appelle aujourd’hui un « mashup ».

L’autre intérêt de cette expérience est de montrer comment il est possible de « créer du lien » de façon automatique. Le lien contextualise l’information, même s’il n’est pas sémantisé (mais c’est encore mieux quand il l’est); et c’est cette contextualisation qui, au-delà des simples informations ou attributs des personnalités en question, se rapproche le plus de ce qu’on pourrait appeler connaissance. C’est la même chose pour le web : ce qui a fait tout l’intérêt et la puissance du web, ce ne sont pas les pages, ce sont les liens entre les pages.

Je me propose donc de réitérer l’expérience dans cette série de post « Knowledge is Music (et vice-versa) », dans un autre domaine, celui de la musique, à une toute autre échelle, et avec d’autres outils… et autant utiliser ceux de Mondeca !


Wiki et Sémantique : marions-les, marions-les …

novembre 10, 2006

Découvert hier sur Planète Web Sémantique cet excellent billet présentant en détail l’intégration des technologies sémantiques aux technologies Wiki – et en français, chose assez rare pour être soulignée. L’auteur est ébloui à juste titre par ce beau mariage, mais ce qu’il ne dit pas, c’est qu’il s’agit là de la chronique d’un événement anoncé, qu’un observateur attentif aurait vu venir de loin.

J’ai déjà expliqué ailleurs (mais en anglais cette fois) que si ce mariage semble voué d’avance à la réussite, c’est que les futurs époux avaient déjà bien des choses en commun avant de se rencontrer. En effet les Wiki ont toujours fait de la sémantique sans le savoir, ou du moins sans le dire. J’ai découvert la technologie Wiki à la fin des années 1990 sur le WikiWikiWeb original de Ward Cunnigham, qui mérite encore la visite, tant par son contenu que pour sa forme, qui est restée identique depuis plus de dix ans. Bien sûr elle n’offre pas le luxe de fonctionnalités aujourd’hui disponible à l’éditeur de Wikipedia (que je suis de façon intermittente depuis sa création). Ce qui m’avait séduit à l’époque, autant sinon plus que le côté sympa-anarcho-collaboratif de la technologie, c’étaient ses principes architecturaux simplissimes, et fondamentalement sémantiques s’il en est.

  • Une page pour chaque chose, une chose pour chaque page, un nom unique pour la chose et la page. Pour employer la terminologie des Topic Maps, chaque page d’un Wiki est par définition, et de façon native, un indicateur de sujet. Que dit le Web Sémantique? « Donnez une URI à chaque chose, et documentez-là ». La technologie Wiki fait les deux choses de façon automatique, en tâche de fond du travail de l’éditeur.
  • Nommer, c’est relier. Soulignez le nom de la chose par un marquage spécifique, et il se transforme en lien vers la page de la chose. Que dit le Web sémantique? « Une URI est à la fois un nom et une adresse ». Le marquage Wiki associe les deux de façon automatique.

Ces principes se sont avérés robustes et scalables, comme le montre la croissance phénoménale de Wikipedia (taille de la base, nombre de collaborateurs et de requêtes, évolution des fonctionnalités). Se sont ajoutés au fil du temps des fonctionnalités comme la catégorisation, les pages d’homonymie, les modèles de métadonnées associées à une catégorie, etc …

Mais au fond que manquait-il au wiki, qu’il soit classique comme celui de Ward, ou plus sophistiqué comme Wikipedia, pour être prêt à la migration vers RDF? Simplement le typage des liens. Le type de marquage utilisé par les wiki sémantiques pour typer les liens ressemble furieusement à une variante de RDFa simplement adaptée à la syntaxe habituelle des wiki.