Comment j’ai fouillé dans des dizaines de milliers de notices Wikipédia

Pour réaliser le Top 50 des sites d’info les plus cités sur Wikipedia, j’ai utilisé une série d’outils dont je m’étais parfois déjà servi dans d’autres projets :

  • J’ai repéré des séries de notices intéressantes grâce à l’outil CatScan proposé par Wikipédia.
  • J’ai utilisé des techniques de data scraping pour parcourir automatiquement des milliers de notices avec l’extension Firefox Outwit Hub.
  • J’ai nettoyé les résultats obtenu grâce à Open Refine.
  • J’ai dressé les classements avec Google Sheets, le tableur de Google Drive.
  • J’ai réalisé les graphiques avec Datawrapper.
  • J’ai présenté les tableaux de façon interactive avec le plug-in JQuery Datatables.

Comme chacun de ces services peut vous intéresser, je reviens pas à pas dans cet article sur la méthode utilisée, en donnant des liens vers les fichiers de données obtenues.  N’hésitez pas à réutiliser ces dernières pour d’autres travaux, et tenez-moi au courant de vos trouvailles dans les commentaires.

A plusieurs reprises, j’ai fait des choix qui m’ont semblé cohérents avec l’objectif de ce projet. Que vous soyez wikipédien ou journaliste, vous aurez sans doute envie de les discuter, ce que je vous encourage fortement à faire, je suis là pour ça.

1. Bâtir un échantillon avec CatScan

La première difficulté, c’était de trouver une série de notices Wikipédia pertinentes.

J’ai d’abord pensé à programmer Outwit Hub pour en collecter de façon totalement aléatoires, en utilisant par exemple le lien « Explorer au hasard » de l’encyclopédie. Mais mon « robot » s’est vite perdu dans des fiches sans lien avec l’actualité ou dans diverses pages de listes.

J’ai alors découvert CatScan et je m’en suis servi pour obtenir les liens de notices figurant dans toute une série de catégories et sous-catégories. En partant la catégorie Evenement de Wikipédia, j’ai sélectionné les sous-catégories suivantes (elles-mêmes divisées en une multitude de sous-catégories :

  • Evénement en cours
  • Evénement à venir
  • Evénement récent
  • Journée commémorative ou thématique
  • Massacre
  • Evénement historique en météorologie
  • Salon
  • Marche
  • Controverse
  • Festival

CatScan m’a renvoyé une liste de 16741 notices (sur un total de plus de 1,6 million publiés sur la Wikipédia en français, soit environ 1%) sur des sujets très variés. La taille de cette liste m’a paru suffisante — au-delà, les différents logiciels dont je me suis servi n’aurait de toute façon pas pu fonctionner correctement.

2. Programmer un scraper avec Outwit Hub

Bien que l’interface de ce logiciel de scraping soit intimidante (euphémisme), Outwit Hub n’est pas si compliqué à utiliser, une fois qu’on a digéré les tutoriels de base. Il suffit d’identifier où se trouvent dans le code source les informations qu’on recherche et comment elles sont structurées en langage HTML.

En l’occurrence, les liens se trouvant dans les parties qui m’intéressaient (« Notes et références » et « Voir aussi » notamment) sont dans des balises liens (« a ») portant la classe CSS « external text ».

Capture d’écran 2014-09-10 à 19.16.20
Capture d’écran de Outwit Hub

Il suffit alors de créer un « extracteur »,en indiquant à Outwit Hub les chaînes de caractères se trouvant juste avant et juste après l’information ciblée.  Par exemple, pour l’URL externe :

<a class=« external text » href= »

et

« >

Pour extraire plusieurs informations à la fois (l’URL, mais aussi le nom de domaine et le texte du lien), j’ai cependant dû construire une expression régulière. Sans vous faire un cours complet sur ces trucs-là (ce dont je serais bien incapable), sachez qu’on les croise un peu partout (de Yahoo Pipes à Adobe Indesign en passant par les différents languages de programmation).

Pour un non-développeur, c’est un peu pénible à apprendre, mais ça rend bien des services, ça en vaut donc la peine.  Après avoir pas mal transpiré, j’ai fini par bâtir l’expression suivante (sûrement perfectible, d’ailleurs) :

/class=« external text ».*href= »(http://.*?)(/.*?) »>(.*?)</a>/

Outwit Hub était alors paré pour le moment le plus agréable du projet, celui où l’ordinateur travaille à votre place : il a suffit de lui demander de passer cet extracteur sur chaque page de l’échantillon, puis d’exporter tous les résultats obtenus dans un gros fichier CSV (20 Mo).

3. Nettoyer les résultats avec Open Refine

Quand vous souhaiter intervenir sur de gros fichiers de données, les fonctionnalités les plus courantes (comme Rechercher / Remplacer) ne suffisent pas.

C’est là qu’Open Refine (anciennement Google Refine) se révèle particulièrement utile, parce qu’il permet de faire via une interface graphique très bien fichue des manipulations de tables qui doivent se faire sinon via des lignes de commande.

Là encore, il faut accepter de se plonger dans les tutoriels et les pages d’aide pour apprendre à effectuer les opérations souhaitées, mais c’est du temps bien investi, croyez-moi.

Dans le cadre de ce projet, je me suis servi de Google Refine pour présenter proprement chaque donnée dont j’avais besoin :

  • l’URL de la notice Wikipédia « scrapée »
  • l’URL du lien externe repéré
  • le nom de domaine du lien externe repéré (par exemple, slate.fr)
  • le texte du lien (souvent le titre de l’article)

J’ai aussi réparti ces noms de domaines en deux catégories : « Actu » et « Autres » (pour tous les liens vers des sites annuaires, institutionnels, ou personnels).

C’était l’étape la plus fastidieuse : pour éviter d’y passer la journée et de faire planter Open Refine, je me suis limité aux médias cités au moins 30 fois dans l’échantillon.

Certains sites dans cette liste avaient un statut ambigu : j’ai conservé ceux proposant à la fois des articles et des statistiques ou pages de référence (par exemple, Allociné), et d’exclure les purs annuaires (comme IMDB).

J’ai aussi pratiqué quelques regroupements, pour les sites possédant plusieurs sous-domaines (par exemple, en fusionnant les liens vers www.lefigaro.fr et elections.lefigaro.fr en lefigaro.fr).

Si ça vous intéresse d’explorer vous aussi ces données, vous pouvez télécharger l’intégralité des liens de l’échantillon ou l’intégralité des liens vers des sites de médias dans des fichiers CSV désormais nettoyés.

4. Dresser les classements avec Google Sheets

On approche du but : en important le CSV contenant tous les liens vers des sites de médias dans une feuille de calcul Google Sheets, il ne reste plus qu’à créer un rapport de tableau croisé dynamique chargé de compter le nombre de liens pour chaque nom de domaine.

Cette information est également disponible dans Open Refine, mais j’avais besoin d’une présentation par cellules pour pouvoir en faire un graphique dans la foulée.

(Je n’ai jamais vraiment compris comment fonctionnaient vraiment ces rapports, et je suis bien embêté quand je dois expliquer leur fonctionnement lors de formations. Je me contente d’essayer diverses combinaisons de lignes, de colonnes et de valeurs pour obtenir le résultat souhaité, ce qui finit toujours par arriver à force d’essais.)

5. Faire le graphique avec Datawrapper

Je ne sais pas s’il est possible de tomber amoureux d’un logiciel ou d’un service web, mais si c’est le cas, je dois confier une passion sans doute excessive pour Datawrapper — selon moi, Mirko Lorenz, son programmeur,  a déjà sa place réservée au paradis des développeurs.

Un copié/collé des données de Google Sheets et quelques réglages dans une interface merveilleusement bien pensée, et zou, le graphique est prêt.

6. Un tableau filtrable avec Datatables

A ma connaissance, il existe peu d’outils accessibles pour présenter de longues séries de données proprement à l’intérieur d’un article. Le plug-in JQuery Datatables fait ça vraiment très bien, mais il faut être suffisamment à l’aise en HTML, en CSS et en JQuery pour s’en servir.

J’ai donc récupéré le flux Json du Google Sheet pour bâtir dynamiquement le tableau contenant les 23 014 liens vers des sites de médias, et activé Datatables une fois la table terminée.

7. Des échantillons sur des thématiques

Pour continuer à explorer l’encyclopédie, j’ai choisi des thèmes plus précis et repéré des catégories (et leurs sous-catégories) de notices portant sur le sport, la politique, la Bretagne et la BD.

J’ai fait subir le traitement décrit ci-dessus aux liens externes ainsi repérés (ça va beaucoup plus vite la deuxième fois).

Voici les données récupérées, également dispos dans Google Sheet :

 

Partager cet article

Lien copié !
C'est nul, je veux de gros boutons colorés !

Partager cet article

Un peu d'inspiration !

Depuis 2014, j'accompagne des médias dans leurs projets et je mène mes propres expériences. Retrouvez les réalisations dont je suis le plus fier dans un portfolio qui vous donnera envie d'innover !

On en discute ?