« GallicaSPARQLBot » : différence entre les versions
(Wikidataficator update) |
(Annulation des modifications 1313172 de Wikidataficator (discussion)) |
||
Ligne 10 : | Ligne 10 : | ||
* La date et le lieu de naissance de l'auteur | * La date et le lieu de naissance de l'auteur | ||
* La date et le lieu de mort de l'auteur | * La date et le lieu de mort de l'auteur | ||
* La liste des œuvres principales (selon la BnF) de l'auteur | * La liste des œuvres principales (selon la BnF) de l'auteur | ||
* Une image de profil de l'auteur (si elle existe) | * Une image de profil de l'auteur (si elle existe) | ||
Ligne 20 : | Ligne 17 : | ||
* La date de création de l’œuvre | * La date de création de l’œuvre | ||
* Le type de l’œuvre (Art Graphique, Livre, ...) | * Le type de l’œuvre (Art Graphique, Livre, ...) | ||
* Une illustration de l’œuvre (si elle existe) | * Une illustration de l’œuvre (si elle existe) | ||
Ligne 30 : | Ligne 25 : | ||
<pre> | <pre> | ||
[[DATE]] / [[LIEU]]. [[Naissance]] de [[AUTEUR]]. [PAGE BNF DE L'AUTEUR] | [[DATE]] / [[LIEU]]. [[Naissance]] de [[AUTEUR]]. [PAGE BNF DE L'AUTEUR] | ||
</pre> | </pre> | ||
<pre> | <pre> | ||
[[DATE]]. [[Naissance]] de [[AUTEUR]]. [PAGE BNF DE L'AUTEUR] | [[DATE]]. [[Naissance]] de [[AUTEUR]]. [PAGE BNF DE L'AUTEUR] | ||
</pre> | </pre> | ||
Ligne 44 : | Ligne 34 : | ||
<pre> | <pre> | ||
[[DATE]] / [[LIEU]]. [[Décès]] de [[AUTEUR]]. [PAGE BNF DE L'AUTEUR] | [[DATE]] / [[LIEU]]. [[Décès]] de [[AUTEUR]]. [PAGE BNF DE L'AUTEUR] | ||
</pre> | </pre> | ||
<pre> | <pre> | ||
[[DATE]]. [[Décès]] de [[AUTEUR]]. [PAGE BNF DE L'AUTEUR] | [[DATE]]. [[Décès]] de [[AUTEUR]]. [PAGE BNF DE L'AUTEUR] | ||
</pre> | </pre> | ||
Ligne 58 : | Ligne 43 : | ||
<pre> | <pre> | ||
[[DATE]]. [[Création]] par [[AUTEUR]] de [[ŒUVRE]] ([[TYPE]]). [PAGE BNF DE L'ŒUVRE] | [[DATE]]. [[Création]] par [[AUTEUR]] de [[ŒUVRE]] ([[TYPE]]). [PAGE BNF DE L'ŒUVRE] | ||
</pre> | </pre> | ||
<pre> | <pre> | ||
[[DATE]]. [[Création]] par [[AUTEUR]] de [[ŒUVRE]]. [PAGE BNF DE L'ŒUVRE] | [[DATE]]. [[Création]] par [[AUTEUR]] de [[ŒUVRE]]. [PAGE BNF DE L'ŒUVRE] | ||
</pre> | </pre> | ||
Ligne 74 : | Ligne 54 : | ||
La gestion des homonymes utilise la politique du « premier arrivé, premier servi ». En effet, si le bot veut insérer un auteur et que son nom n'existe pas encore sur Wikipast, alors sa page est créée normalement. A contrario, s'il existe déjà une page avec le nom de l'auteur, alors sa page est créée mais son titre sera composé du nom de l'auteur suivi d'un identifiant unique (UUID) (exemple: [[Johann Strauss (3bd88e1)]], père de [[Johann Strauss]]). | La gestion des homonymes utilise la politique du « premier arrivé, premier servi ». En effet, si le bot veut insérer un auteur et que son nom n'existe pas encore sur Wikipast, alors sa page est créée normalement. A contrario, s'il existe déjà une page avec le nom de l'auteur, alors sa page est créée mais son titre sera composé du nom de l'auteur suivi d'un identifiant unique (UUID) (exemple: [[Johann Strauss (3bd88e1)]], père de [[Johann Strauss]]). | ||
Afin d'éviter des collisions entre le nom de plusieurs œuvres ainsi qu'entre le nom d'une œuvre et celui d'un auteur, il a été choisi de nommer les œuvres de la façon suivante : ''Nom de l’œuvre (nom de l'auteur)'' (exemple : [[L'Ours dans un bateau (fable V) (Gravelot)]] ). | |||
== Discussion des performances == | == Discussion des performances == | ||
Ligne 94 : | Ligne 73 : | ||
L'ordre des évènements était également non trivial à gérer. Un simple algorithme de tri sur les évènements ne suffit pas pour [[Cicéron|les dates négatives]] et [[Syméon le Nouveau Théologien|changeant d'ordre de magnitude]]. Le bot en prend également compte. | L'ordre des évènements était également non trivial à gérer. Un simple algorithme de tri sur les évènements ne suffit pas pour [[Cicéron|les dates négatives]] et [[Syméon le Nouveau Théologien|changeant d'ordre de magnitude]]. Le bot en prend également compte. | ||
== Planification du bot == | == Planification du bot == | ||
Le bot est censé n'être exécuté qu'une seule fois. Tout changement de la base de donnée de la BnF devrait être géré par l'intermédiaire d'un autre bot, car la politique du [[GallicaSPARQLBot]] est de ne jamais écraser ou modifier une page déjà existante. | Le bot est censé n'être exécuté qu'une seule fois. Tout changement de la base de donnée de la BnF devrait être géré par l'intermédiaire d'un autre bot, car la politique du [[GallicaSPARQLBot]] est de ne jamais écraser ou modifier une page déjà existante. | ||
== Exemple de résultat == | == Exemple de résultat == | ||
Ligne 105 : | Ligne 87 : | ||
''Tiré de :'' [[Sénèque]] | ''Tiré de :'' [[Sénèque]] | ||
Wikidata: | Wikidata: ([https://www.wikidata.org/wiki/Q5 Q5]) | ||
BnF ID: [http://data.bnf.fr/ark:/12148/cb11887555p 11887555p] | BnF ID: [http://data.bnf.fr/ark:/12148/cb11887555p 11887555p] | ||
Ligne 124 : | Ligne 106 : | ||
*[[65]] / [[Rome]]. [[Décès]] de [[Sénèque]]. [http://data.bnf.fr/ark:/12148/cb11887555p] | *[[65]] / [[Rome]]. [[Décès]] de [[Sénèque]]. [http://data.bnf.fr/ark:/12148/cb11887555p] | ||
=== Œuvre === | === Œuvre === | ||
Ligne 129 : | Ligne 112 : | ||
''Tiré de :'' [[Histoire de la peinture en Italie (Stendhal)]] | ''Tiré de :'' [[Histoire de la peinture en Italie (Stendhal)]] | ||
Wikidata: | Wikidata: ([https://www.wikidata.org/wiki/Q386724 Q386724]) | ||
BnF ID: [https://data.bnf.fr/fr/14415306/stendhal_histoire_de_la_peinture_en_italie/ 14415306q] | BnF ID: [https://data.bnf.fr/fr/14415306/stendhal_histoire_de_la_peinture_en_italie/ 14415306q] | ||
Ligne 136 : | Ligne 119 : | ||
*[[1817]]. [[Création]] par [[Stendhal]] de [[Histoire de la peinture en Italie (Stendhal)|Histoire de la peinture en Italie]] ([[Peinture]]). [https://data.bnf.fr/fr/14415306/stendhal_histoire_de_la_peinture_en_italie/] | *[[1817]]. [[Création]] par [[Stendhal]] de [[Histoire de la peinture en Italie (Stendhal)|Histoire de la peinture en Italie]] ([[Peinture]]). [https://data.bnf.fr/fr/14415306/stendhal_histoire_de_la_peinture_en_italie/] | ||
== Code == | == Code == | ||
Le code source du bot est disponible sur [https://github.com/robinmamie/GallicaSPARQLBot| GitHub]. | Le code source du bot est disponible sur [https://github.com/robinmamie/GallicaSPARQLBot| GitHub]. |
Version du 20 mai 2019 à 11:00
Le GallicaSPARQLBot est un bot python complétant ou générant automatiquement des pages Wikipast à partir de la base de données de la Bibliothèque nationale de France (BnF).
Description technique
Formattage des données
Dans un premier temps, le bot cherche, à travers une requête SPARQL, l'intégralité des auteurs appartenant à la base de données de la BnF.
Ensuite, les données suivantes sont récupérées pour chaque auteur :
- La date et le lieu de naissance de l'auteur
- La date et le lieu de mort de l'auteur
- La liste des œuvres principales (selon la BnF) de l'auteur
- Une image de profil de l'auteur (si elle existe)
Enfin, les données suivantes sont récupérées pour chaque œuvre principale de l'auteur en question:
- La date de création de l’œuvre
- Le type de l’œuvre (Art Graphique, Livre, ...)
- Une illustration de l’œuvre (si elle existe)
A partir de ces données, le bot crée la page Wikipast liée à chaque auteur en y ajoutant un lien vers l'image de profil (si elle existe dans la BnF), leurs dates de naissance et de mort ainsi que ses œuvres principales (uniquement celles contenant une date). De manière analogue, une page Wikipast est créée pour chacune de ces œuvres avec une illustration (si elle existe dans la BnF). Ces ajouts sont chacun accompagnés de liens renvoyant vers le site de la BnF et sont normalisés de la façon suivante:
Pour la date de naissance, dépendamment de la mention du lieu:
[[DATE]] / [[LIEU]]. [[Naissance]] de [[AUTEUR]]. [PAGE BNF DE L'AUTEUR]
[[DATE]]. [[Naissance]] de [[AUTEUR]]. [PAGE BNF DE L'AUTEUR]
Pour la date de décès, dépendamment de la mention du lieu :
[[DATE]] / [[LIEU]]. [[Décès]] de [[AUTEUR]]. [PAGE BNF DE L'AUTEUR]
[[DATE]]. [[Décès]] de [[AUTEUR]]. [PAGE BNF DE L'AUTEUR]
Pour une œuvre, dépendamment de la mention de son type :
[[DATE]]. [[Création]] par [[AUTEUR]] de [[ŒUVRE]] ([[TYPE]]). [PAGE BNF DE L'ŒUVRE]
[[DATE]]. [[Création]] par [[AUTEUR]] de [[ŒUVRE]]. [PAGE BNF DE L'ŒUVRE]
Gestion des pages
Chacune des pages explorées par le bot est agrémentée de son type Wikidata et de son identifiant BnF (BnF id). Cela veut dire que si aucune ligne de contenu n'existe dans la base de donnée (naissance, décès ou création), alors la page est tout de même créée avec ces informations. La mention du type Wikidata permet aux autres bots de retrouver très facilement sur Wikipast tous les êtres humains (portant l'identification Q5) et toutes les œuvres (Q386724) grâce à une simple recherche. Cette fonction est par exemple utilisée par le Wikidataficator.
La gestion des homonymes utilise la politique du « premier arrivé, premier servi ». En effet, si le bot veut insérer un auteur et que son nom n'existe pas encore sur Wikipast, alors sa page est créée normalement. A contrario, s'il existe déjà une page avec le nom de l'auteur, alors sa page est créée mais son titre sera composé du nom de l'auteur suivi d'un identifiant unique (UUID) (exemple: Johann Strauss (3bd88e1), père de Johann Strauss).
Afin d'éviter des collisions entre le nom de plusieurs œuvres ainsi qu'entre le nom d'une œuvre et celui d'un auteur, il a été choisi de nommer les œuvres de la façon suivante : Nom de l’œuvre (nom de l'auteur) (exemple : L'Ours dans un bateau (fable V) (Gravelot) ).
Discussion des performances
Quantité produite
Le bot a créé environ 500'000 pages d'auteurs ainsi que 15'000 pages d'œuvres en un peu moins de 4 jours, ce qui est un laps de temps très raisonnable. La plupart des auteurs listés dans la base de données de la BnF n'ont malheureusement pas d'autre information que leur nom, donc une grande partie des pages créées est vide, mais exploitable grâce au tag wikidata et à l'identifiant BnF.
Difficultés rencontrées
Puisque le nombre de requêtes par seconde était très élevé (il y avait jusqu'à 200 fils d'exécutions en parallèle, mais en moyenne une trentaine), il pouvait arriver que des requêtes http n'arrivent pas à bon port. Cela crée donc des éléments manquants dans le résultat final. Seuls 1'500 liens sur le million traité n'ont pas été exécutés, et ont été relancés manuellement après la fin de l'exécution initiale. Finalement, aucun échec n'est à déplorer suite à cette intervention.
Le cas des auteurs existant déjà n'a été géré que suite à l'exécution initiale, afin d'éviter la création inutile de pages en cas de relancement (pour cause d'erreur, etc.)
Certaines œuvres présentaient un titre si long qu'il cassait la limite de caractères pour un titre de page sur Wikipast (256 bytes). Ce problème a été résolu après que quelques cas se soient présentés.
L'ordre des évènements était également non trivial à gérer. Un simple algorithme de tri sur les évènements ne suffit pas pour les dates négatives et changeant d'ordre de magnitude. Le bot en prend également compte.
Planification du bot
Le bot est censé n'être exécuté qu'une seule fois. Tout changement de la base de donnée de la BnF devrait être géré par l'intermédiaire d'un autre bot, car la politique du GallicaSPARQLBot est de ne jamais écraser ou modifier une page déjà existante.
Exemple de résultat
Auteur
Tiré de : Sénèque
Wikidata: (Q5)
BnF ID: 11887555p
- 41. Création par Sénèque de De la colère (Philosophie). [2]
- 54. Création par Sénèque de Apocoloquintose du divin Claude (Littératures). [3]
- 54. Création par Sénèque de De la constance du sage (Littératures). [4]
- 61. Création par Sénèque de De la vie heureuse (Philosophie). [5]
- 62. Création par Sénèque de Questions naturelles (Philosophie). [6]
- 63. Création par Sénèque de De la providence (Philosophie). [7]
Œuvre
Tiré de : Histoire de la peinture en Italie (Stendhal)
Wikidata: (Q386724)
BnF ID: 14415306q
Code
Le code source du bot est disponible sur GitHub.