« GallicaSPARQLBot » : différence entre les versions

De Wikipast
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
(Wikidataficator update)
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 17 : Ligne 20 :


* 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 25 : Ligne 30 :


<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 34 : Ligne 44 :


<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 43 : Ligne 58 :


<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 54 : Ligne 74 :


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)]] ).
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 73 : Ligne 94 :


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 87 : Ligne 105 :
''Tiré de :'' [[Sénèque]]
''Tiré de :'' [[Sénèque]]


Wikidata: ([https://www.wikidata.org/wiki/Q5 Q5])
Wikidata: [https://www.wikidata.org/wiki/GallicaSPARQLBot Match not found] ([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 106 : Ligne 124 :


*[[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 112 : Ligne 129 :
''Tiré de :'' [[Histoire de la peinture en Italie (Stendhal)]]
''Tiré de :'' [[Histoire de la peinture en Italie (Stendhal)]]


Wikidata: ([https://www.wikidata.org/wiki/Q386724 Q386724])
Wikidata: [https://www.wikidata.org/wiki/GallicaSPARQLBot Match not found] ([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 119 : Ligne 136 :


*[[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 à 10:57

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: Match not found (Q5)

BnF ID: 11887555p

Œuvre

Tiré de : Histoire de la peinture en Italie (Stendhal)

Wikidata: Match not found (Q386724)

BnF ID: 14415306q

bpt6k6215656z.thumbnail.jpg

Code

Le code source du bot est disponible sur GitHub.