Intercept Interview 02: développeur utilisant un jeu de données

2019-11-16T23:00:00Z
Script de l’interview

Interview de @seb35

À propos de toi

Q: Quel est ton métier ?
R: Développeur et consultant sur MediaWiki, depuis trois ans. On aide des entreprises qui ont installé MediaWiki en interne. On fait de la formation, du support, de l’hébergement et du développement mais la plupart du temps les extensions suffisent. Avant ça j’ai fait une thèse de maths appliquées.
Q: Quelle est ta journée-type ?
R: Comme on est une petite boite, il n’y a pas vraiment de journée-type. Dans le cadre de mon travail je ne manipule pas de données libres, c’est plus en tant que hobby, à côté. Des institutions commencent à s’intéresser à Wikidata et se disent que qu’elles pourraient les prendre en compte d’une façon ou d’une autre. Parce que ça devient un point central dans le web sémantique, que l’on peut lier avec beaucoup de choses.
Q: Quel langage de programmation tu préfères ?
R: Je travaille beaucoup avec du PHP parce que c’est le langage de MediaWiki (et aussi du jQuery & JavaScript même si je n’y touche pas trop). Il y a aussi une partie dans MediaWiki qui est en nodejs (l’éditeur visuel). Je fais pas mal de Python (hors travail) et je me met de plus en plus à nodejs et JavaScript (Svelte, Sapper).

À propos des jeux de données

Q: Pourrais-tu définir avec tes mots ce qu’est un jeu de données ?
R: Ensemble de données organisées selon un référentiel, un schéma, un contexte donné.
Q: Pourrais-tu définir avec tes mots ce qu’est un jeu de données libre ?
R: Un jeu de données publiées sous licence libre (par exemple ODbL). Et aussi suffisamment documenté pour être utilisable. Souvent dans le monde du logiciel (et c’est pareil pour les données) s’il n’y a pas de documentation ce n’est pas très utilisable.

Utilisation des jeux de données

Q: Depuis combien de temps utilises-tu des jeux de données ?
R: Entre cinq et sept ans, mais de façon très parcellaire au début. Depuis deux ou trois ans je manipule plus de données.
Q: Quel genre de choses fais-tu ?
R: Je manipule le jeu de données législatives, la loi promulguée donc les données libres de la DILA (ftp://echanges.dila.gouv.fr/LEGI/) qui les met à disposition sous forme structurée.
Q: Tu fais quoi techniquement ?
R: Avec la loi promulguée j’ai commencé le projet (un ou deux mois après que ces données soient publiées) https://archeo-lex.fr/ qui reconstitue les textes de loi. Je prends toutes les données de la base LEGI sous forme XML, assez peu utilisable en tant que tel. Il y a beaucoup de contraintes techniques : ce sont environ un million de petit fichiers dans une arborescence profonde. Il faut arriver à comprendre la logique qui n’est pas forcément bien documentée. Et il faut parser tout ça. Cela demande du temps de calcul et du temps de compréhension de la structure. Avec ces textes je reconstitue l’historique des lois qui est juste implicite et je le rend explicite pour montrer ce qui a changé dans une loi, à tel moment.
Q: Tu te souviens d’un cas concret ou tu as eu à deviner quelque chose dans la structure ?
R: Les champs sont assez peu documentés. Récemment je me suis posé des questions sur les identifiants de cette base. Il y a deux identifiants principaux id et cid (je ne sais pas ce que veut dire cid). Pour chaque loi ils peuvent être identique mais pas forcément. Les cid sont presque uniques mais il y a des doubles. Les id sont uniques. Si je comprends bien, les cid servent à regrouper les lois lorsqu’elles sont renommées. Quand le titre de la loi change ou que certaines méta données de la loi changent, ils refont un autre id mais avec le même cid. Le cid c’est un groupe de lois qui sont censées être les mêmes.
Q: Tu l’as inféré par l’observation, donc ? Tu as eu confirmation de ta théorie ?
R: Pas encore. Il y a un autre projet libre qui permet de transformer ces données en base SQL, beaucoup plus utilisable. C’est le projet https://github.com/Legilibre/legi.py auquel je contribue et c’est ce que j’utilise dans Archéo Lex. En explorant la base j’ai pu inférer plus facilement la signification du champ cid.
Q: Est-ce qu’il t’es arrivé de te poser une question sur un champ et de trouver la réponse dans la documentation ?
R: Sur certains points oui. Sur les champs je ne crois pas. Mais il y a d’autres docs officielles et en croisant on trouve les informations.
Q: Est-ce que tu as discuté avec des gens pour avoir des informations ?
R: Un peu.
Q: Qui sont ces gens ? Des développeurs ? Des gens qui ont publié les données ?
R: J’ai eu un contact il y a très longtemps avec la DILA. Sinon j’ai discuté aussi avec l’auteur de legi.py et je continue de le faire. Il a fait une recherche d’anomalie à base de règles et les affiche sur http://anomalies.legilibre.fr/
Q: Quand tu te pose une question sur un jeu de données est ce que tu regarde d’abord dans la documentation ?
R: J’essaye d’abord de deviner.
Q: Est-ce qu’il y a d’autres logiciels que tu utilises pour manipuler ces données législatives ?
R: Pour les données de l’Assemblée, j’utilise tricoteuses.fr. Notamment toute la partie qui récupère les données libres de l’assemblée, les retraite et en fait des fichiers JSON petits et plus faciles à manipuler.
Q: Comment tu sais quand il y a des nouvelles version publiées ?
R: Les données de la DILA sont mises à jour quotidiennement vers 21h00 les jours de semaine. Avec legi.py on peut mettre a jour incrémentalement la base de données en 10/15min de temps de calcul.
Q: Comment tu as su que c’est mis à jour quotidiennement ?
R: J’ai constaté que c’était mis à jour quotidiennement.
Q: Est-ce qu’il est arrivé que les données de la DILA changement de structure ?
R: Pas dans les fichiers XML. Par contre il y a quelque années un autre dossier a été rajouté avec les identifiants ELI (standard européen).
Q: Comment tu as su qu’il avait été ajouté ?
R: Le programme legi.py a planté parce qu’il ne reconnaissait pas le nom de fichier dans le dossier. Donc il a fallu mettre à jour le logiciel.
Q: Est-ce qu’il y a des release notes ?
R: Pas à ma connaissance. Il y a des PDF sur le site de la DILA qui décrivent chacun des 15 jeux de données. Je suis familier des bases LEGI et JORF. Le PDF décrit la périodicité de mise à jour, le contenu, leur licence pour les données.
Q: Quand tu récupères les données, est-ce que tu retravailles le contenu avant de pouvoir l’exploiter ?
R: Globalement non. Je suis attentif à ne pas avoir d’impact éditorial. Je préfère reproduire les anomalies et j’affiche les données telles qu’elles sont. Je fais des transformations techniques en prenant soin de ne pas avoir d’impact sur le sens. Par exemple je convertis le texte HTML en Markdown pour épurer le texte. Le HTML est de mauvaise qualité. Il faut faire attention aux paragraphes (les alinéas) pour ne pas les fusionner par accident sinon les juristes ne s’y retrouvent pas, c’est un exemple de limite poreuse entre changements éditoriaux et changements sur le fond.

Publication de jeux de données

Q: Tu publies des données ?
R: Il y a environ 5,000 lois dans la base LEGI. Et environ 100,000 arrêts et décrets. Pour mieux gérer cette masse je stocke les métadonnées des lois dans le projet https://wikilex.seb35.fr/. Dans WikiLex il y a des liens pour trouver le texte correspondant dans Archéo Lex.
Q: Ces données que tu mets dans Wikibase, comment tu les documentes ?
R: Je reprends les champs de la base LEGI et la documentation, à l’intérieur de Wikibase.
Q: Est-ce que Wikibase publie des notifications quand il y a des changements de structure ?
R: On peut s’abonner aux changements sur un item.
Q: Mais pas sur une property ?
R: Non.
Q: Tu feras des release notes manuelles ?
R: Oui, au début ce sera manuel. C’est un projet naissant et je termine le script de conversion qui passe de la base SQL à Wikibase. Ça prendra un ou deux jours initialement mais l’ajout incrémental sera plus rapide. Les imports sont taggés de façon spécifique sur le site (bleu), alors qu’une valeur ajoutée manuellement est blanche. Les deux coexistent et on choisit (rend obsolète) les données importées pour préférer la valeur manuelle. Par exemple si on sait que l’item décrit le « Décret 78-302 » mais que l’import mentionne « Arrêté 78-302 », on rend obsolète la valeur qui est fausse.
Q: Dans l’hypothèse ou tu publie un jeu de données, est-ce que tu garantis qu’il est backward compatible ?
R: C’est à réfléchir. Sur la définition des propriétés je vais tenter d’utiliser l’ontologie ELI qui contient une quarantaine de propriétés. Je rentre cela à la main. Mais je me rend compte que ce n’est pas toujours très utilisable.