Sujet sur Wikipédia:Forum des nouveaux

Résumé par Litterae
Une réponse a été apportée à cette question.
Klymandre (discutercontributions)

Bonjour,

Nouveau et curieux, je me pose une question : Je suis sur la page des joueurs de tennis membres du top 10. Je me suis toujours demandé quelle était la taille moyenne des grands joueurs de tennis. Constatant que beaucoup de joueurs ont leur taille informée dans leur infobox (Par exemple, Henri Leconte : Taille/poids 1,85 m(6′ 1″)/79 kg(174 lb))

Existe-t-il une technique ou une astuce pour obtenir un tableau résumé sur une seule page qui contient le nom et le prénom de chaque joueur avec son paramètre "Taille/poids" juste à côté (afin de, par exemple, faire un copier-coller dans Excel pour y faire des calculs)

J'ai essayé l'outil Petscan, avec comme paramètre de catégorie "Joueur_de_tennis_membre_du_top_10" mais j'obtiens seulement la liste des noms et prénoms.

Cette histoire de joueurs de tennis avec leur taille est un exemple : j'aimerais savoir, de manière générale, si on pouvait créer ainsi des tableaux "Nom d'article - Paramètre d'infobox", listant tous les articles d'une même catégorie)

Si jamais quelqu'un a une idée... Merci d'avance

Arkanosis (discutercontributions)

Bonjour ,

J'allais te recommander d'utiliser autolist pour faire la requête sur Wikidata plutôt que sur Wikipédia, mais malheureusement, il semblerait que la taille et le poids soient des données moins bien renseignées sur Wikidata actuellement que sur la Wikipédia francophone, dommage…

Cela signifie donc que ces données ne sont pas encore toutes accessible de façon « structurée » et qu'il faut les extraire du code source des articles, ce qui n'est pas une choses toujours aisée. Dans le cas présent, le script suivant fait le gros du travail, mais nécessite de repasser derrière pour corriger les petites erreurs (j'ai fait ça rapidement, désolé) :

wget 'https://fr.wikipedia.org/w/api.php?action=query&list=categorymembers&cmtitle=Category:Joueur_de_tennis_membre_du_top_10&cmlimit=500&format=json' -O - | \
  jq -r '.query.categorymembers[].title' | \
  while read name; do
    wget 'https://fr.wikipedia.org/w/api.php?action=parse&page='$(echo $name | tr ' ' '_')'&section=0&prop=parsetree&format=json' -O - | \
      jq -r '.parse.parsetree[]' | \
      xml sel -T \
        -t \
        -o $name \
        -o ',' \
        -t -m '/root/template/part/value/template/part[name/text()="m"]' -v 'value' \
        -o ',' \
        -t -m '/root/template/part/value/template/part[name/text()="kg"]' -v 'value' \
        -n
  done > top10.csv

Voici le résultat que j'obtiens sans correction manuelle :

Amicalement

Klymandre (discutercontributions)

WOUAW ! Alors là, je suis bluffé ! C'est exactement ce que je voulais ! Du coup, j'ai pu corriger les petites erreurs de colonnes dans Excel facilement, et pour ceux que ça intéresse, la taille moyenne des joueurs de tennis membres du Top 10 est de 1M84. Le plus grand mesure 2m08 (John Isner - aussi le plus lourd avec 108KG), le plus petit est Harold Solomon (1M68, le seul joueur de moins d'1m70 et aussi le plus léger avec 59 KG)

Conclusion  : je vois donc qu'il s'agit d'un script qui me semble réutilisable ... Même sans être un kador de la programmation, j'imagine qu'en trifouillant "Category", name/text()="m" et name/text()="kg", on peut alors obtenir beaucoup de tableaux synthétiques.

Et question subsidiaire sous-jacente : de quel langage de script s'agit-il, et puis-je l'exécuter moi-même, ou dois-je demander à quelqu'un qui en a la permission ? Et si je peux l'exécuter moi-même, où dois-je le faire ?

Merci mille fois

Arkanosis (discutercontributions)

C'est réutilisable, mais uniquement avec des infobox bien structurées comme celle dont il est question ici. Je n'ai aucune idée de la proportion d'infobox aussi propres, mais je doute que ce soit généralisable à l'ensemble de l'encyclopédie (pour être honnête, si je voulais faire quelque chose de générique en attendant que Wikidata incorpore ces données, j'irai plutôt voir du côté de DBpedia qui a déjà fait le boulot d'extraction — un gros effort au départ pour se familiariser avec l'outil, mais beaucoup moins de travail sur le long terme).

Pour le langage, il s'agit de Bourne shell, avec les commandes Wget, jq et XMLStarlet qui ne sont pas toujours installées sous Linux, mais qui sont extrêmement pratiques. Si tu as un ordinateur sous Linux à ta disposition, tu peux exécuter ce code sans problème dans un terminal ; pas besoin d'avoir des droits particuliers sur Wikipédia (et pas d'inquiétude à avoir avec la licence : je place ça dans le domaine public).

Attention toutefois : l'API de Wikipédia ne renvoie qu'une partie des résultats à chaque requête (500 à 5000, selon les droits dont tu disposes). Ici, il y a peu de résultats, donc tout tient en une seule requête, mais dans d'autres cas, il sera peut-être nécessaire de boucler sur les pages de résultats pour les avoir tous.

Dans tous les cas, je reste à ta disposition si tu as des questions, ou si tu souhaites que j'exécute ce code pour d'autres recherches (dans la limite de ma disponibilité, bien sûr)

Amicalement

Klymandre (discutercontributions)

Oui, je suppose bien que l'extraction des données est directement liée à l'exhaustivité et la précision des données fournies dans les infobox (et dans les catégories).

Alors non, je ne dispose pas d'ordi sous Linux, j'ai Windows 7. Je pensais qu'il y avait une page ou l'on pouvait copier-coller ses scripts pour obtenir les résultats.

Je suis allé visiter DBPedia qui semble effectivement s'atteler à l'extraction de données sous forme de requêtes.

Bon bon bon... DBPedia, Bourne Shell, Wgest, XMLStarlet, API Wikipédia, ... Ca fait beaucoup de choses ! Je prends conscience que si je désire exploiter les données de Wikipédia de manière synthétique, je vais devoir m'atteler à maîtriser plusieurs pôles de compétences. (merci de ta proposition d'aide en cas de besoin, j'apprécie !)

Toutefois, ça me plairait assez de maîtriser plus intimement cette extraction de données. j'ai donc une question plus générale : existe-t-il un didacticiel, un MOOC, une page ou un site qui se propose d'expliquer l'approche de l'extraction des données aux novices tels que moi ?

Litterae (discutercontributions)

Arkanosis (discutercontributions)

C'est un bien vaste sujet, qui mêle tellement de technologies différentes qu'il est difficile de répondre à ta question en pointant une unique ressource.

Ceci étant dit, nulle raison de se décourager, bien au contraire : les outils n'ont jamais été aussi nombreux, aussi faciles d'utilisation et aussi bien documentés qu'aujourd'hui.

Je vais tâcher de faire de mon mieux en te suggérant deux approches très différentes, mais non exclusives

Avec plusieurs outils qui se complètent

Si tu te limites à Wikipédia et Wikidata pour le moment, tu peux déjà limiter ton apprentissage (dans un premier temps) à :

  • l'API, qui est documentée et « explorable » d'elle-même avec un simple navigateur (il ne faut pas avoir peur de prendre du temps pour jouer avec) ;
  • JSON, qui est un langage conceptuellement assez simple, et celui parlé par défaut par l'API ;
  • jq, qui fonctionne aussi sous Windows et qui est à la fois relativement simple et extrêmement capable et expressif pour manipuler du JSON et en extraire les données qui t'intéressent.

Avec cela, tu devrais déjà pouvoir t'amuser rapidement et acquérir assez de familiarité avec les bases de l'extraction de données pour aborder des sujets plus frustrants comme le HTML, le texte brut ou l'extraction de masse.

Je ne te cache pas qu'avec Windows 7, tu risques d'être vite freiné dans ton élan par la disponibilité très limitée d'outils corrects pour ce type d'activité. À défaut de passer à Windows 10 (qui commence tout juste à intégrer le minimum syndical pour travailler décemment — à commencer par Wget et un shell potable), tu pourrais envisager d'installer MSYS2 qui est une petite merveille te permettant de travailler confortablement avec une quantité non négligeable d'outils provenant d'Arch Linux et ce, sans quitter ta version préférée de Windows.

Avec un seul outil qui fait tout

Une toute autre approche serait de concentrer ton apprentissage sur un outil « tout en un » dédié à l'extraction de données. Le premier qui me vient à l'esprit est Scrapy, qui fonctionne aussi sous Windows et dont la documentation te permettra d'assimiler le nécessaire pour t'amuser, sans te perdre et ne plus savoir où donner de la tête.

Amicalement