SPARQLBot
Résumés des fonctionnalités
Ce bot utilise la base de donnée SPARQL des archives du Temps pour générer automatiquement des pages en suivant un certain squelette. Ces pages serviront de base pour être complétée par un humain pour lequel le travail de recherche d'article aura déjà été fait.
Description technique
Le bot effectue une requête sur le endpoint SPARQL qui permet d'obtenir un grande de nombre de mention d'individu ainsi que des informations sur cette personne:
- Son nom
- Sa fonction
- Sa nationalité
- La date de l'article
- Le journal de l'article
- Le lien vers l'article
Le bot effectue deux requêtes. Une première pour obtenir une liste de 100 noms de personnes qui ont été mentionnées, nous avons limité les nationalités à la nationalité suisse afin de rester sur des personnes plus locales. La deuxième requête recherche tous les articles dans lesquels la personne a été mentionnée. Cette liste d'articles est ensuite nettoyée et filtrée pour ne garder que celle qui contiennent suffisamment d'information. Elle sont ensuite triées par date et un squelette de page est créé. Chaque mention sur le squelette suivant:
AAAA.MM.JJ/ -. Mention de PERSONNE en tant que FONCTION dans JOURNAL. SOURCE
Le bot vérifie ensuite que la page cible ne contient pas encore de texte. Et, le cas échéant envoie la modification de la page. Dans le futur, une liste des pages modifiées sera tenu à jour afin pour ne pas en perdre la trace si elles deviennent trop nombreuses.
Évaluation des performances
Aspect technique
Le bot a à la fois l'avantage et l'inconvénient d'utiliser la base de donnée SPARQL telle quelle. Ce qui implique une faible quantité de données accessible pour chaque personne et des temps de réponses assez haut.
Malgré quelques précautions prise pour ôter les potentiels doublons dans les recherches, certaines personnes présentes une fois en 'Marcel Dupond' puis en 'M. Dupond' seront introduites deux fois dans les pages. Il y a aussi des personnes dont nous n'avons pas le prénom. Nous avons donc décidé de ne pas créer des pages pour ces personnes, ainsi que d'enlever tous les prénoms abrégés.
Aussi, la grande quantité de données produit des pages très longues car nous ne pouvons pas juger de la pertinence des Mention des différents individus dans les articles. Principalement parce que cette information n'est pas mesurée dans la BDD et également car nous ne pouvons pas l'extraire, n'ayant pas accès au texte de l'article cité.
Aspect humain
D'un autre côté, la véracité des informations trouvées doit également être vérifiée.
Nous trouvons, pour les références de Louis Blondel, que toutes référencent effectivement une personne appelée Louis Blondel (et vraisemblablement la même personne), ce qui peut s'expliquer facilement par le fait que ce n'est pas un patronyme très courant. Si nous avions recherché quelqu'un appelé Pierre Favre (nous n'avons pas de statistiques exactes, mais nous avons parcouru quelques résultats, et beaucoup d'entre eux diffèrent), nous aurions sûrement eu beaucoup plus de confusions.
Nous avons également recherché la fonction, et nous avons seulement 3 erreurs sur 111. Ces erreurs proviennent de tournures de phrases qui placent la fonction avant le nom de Louis Blondel, et cela fausse la recherche. Nous pouvons cependant critiquer les fonctions reconnues de manière précise par sparql, car la majorité d'entre elles sont chef ou président, ce qui peut correspondre à être chef de plusieurs organisations différentes, ce qui est notamment le cas de Louis Blondel. Il a assumé la présidence de plusieurs organismes, et les articles ne se réfèrent pas tous au même organisme.
Nous avons par exemple ici la liste de fonctions qui sont associées au nom Pierre Favre, déjà discuté plus haut:
"vice-président de l' Alliance", 'roi', 'percussionniste suisse', 'percussionniste', 'notaire', 'historien', 'architecte', 'conservateur', 'directeur M', 'rédacteur', 'vice-président du C', 'vice-président', 'peintre', 'directeur', 'automobiliste', 'employé', 'capitaine', 'publiciste', 'alto', 'gouverneur', 'batteur suisse', 'éditeur', 'batteur', 'greffier', "ancien conseiller d'Etat", 'saxophoniste alto', 'motocycliste', 'chef', 'président de la commission', 'président', 'soliste alto', 'Président', 'vice-président des AGS'
.
Nous pouvons voir que cela est un nombre de fonctions beaucoup trop élevé pour qu'elles soient toutes endossées lors de la même vie.
Cela montre bien que pour certains noms plus communs, sparqul n'a pas la faculté de discernement entre les différentes personnes.
Post-lecture humaine
La principale modification des pages créées, à faire par des mains humaines, est de reformuler, et compléter, les informations fournies par le SPARQLBot. Les informations sont "triées", et les articles pertinents sont mis en avant. Beaucoup de formatage reste cependant à faire, et la gestion des erreurs de l'aspect humain reste également à faire par des humains.
Une autre des tâches de la relecture humaine des pages pourrait être d'aller lire les articles d'où sont tirés les informations, et d'ajouter la localisation à l'entrée dans la page (ce n'est pas une information à laquelle nous avons accès dans le endpoint). Cela pourrait notamment permettre au BioPathBot d'interagir avec le SPARQLBot.
Exemple de résultats
- 1911.03.08 / -. Mention de Louis Blondel en tant que lieutenant, dans Journal de Genève [1]
- 1914.04.05 / -. Mention de Louis Blondel en tant que secrétaire, dans Journal de Genève [2]
- 1914.09.24 / -. Mention de Louis Blondel en tant que président, dans Gazette de Lausanne [3]
- 1915.04.07 / -. Mention de Louis Blondel en tant que président, dans Journal de Genève [4]
- 1915.12.23 / -. Mention de Louis Blondel en tant que chef, dans Journal de Genève [5]
Planification du bot
Le bot devrait n'être exécute qu'une seule fois avec un grand nombre de personnes. Toutefois, il pourrait être exécuté en plusieurs fois car il maintient une liste des personnes ayant déjà été ajoutées.
Code
Le code source est disponible sur Github.
Utilisation du bot
- Installation des dépendances avec pip:
pip install -r requirements
- Génération du fichiers persons.json avec sparql pour 1000 personnes:
python sparqlutils.py 1000
- Envoi des personnes sur le wiki:
python pageutils.py