EliteBot
Ce bot a comme but d'extraire les données présents (pour les individus seulement) de la base de donnée des Elites suisses et de les mettre sur wikipast.
Résumé des fonctionnalités
EliteBot va venir récupérer l'ensemble des Elites suisses disponibles sur https://www2.unil.ch/elitessuisses/index.php?page=accueil. Le robot va ensuite récupérer les informations liées aux données biographiques, à la formation et au parcours professionnel de l'élite. Ces fonctions sont développées dans le module de scrapping. Pour chacune de ces élites, les données brutes sont traitées et mises en forme au format Wikipast dans le module Formatage. Enfin, un dernier module permet d'identifier les pages à créer sur Wikipast (élites encore non renseignées) et les informations à rajouter dans les élites déjà existantes.
Description technique
Scrapping
Le module de scrapping permet de répondre à deux besoins : récupérer la liste des élites suisses disponibles sur le site et récupérer les données liées à la biographie, la formation et le parcours professionnel de l'élite.
Liste des élites suisses
La liste des élites suisses est contenue dans tous les tables contenues dans la table dont l'id est 'contleft' et dont les couleurs sont #D6E1EC ou #94D2E1. Nous récupérons ensuite le texte contenu dans le texte des balises 'a' correspondant au nom et prénom ainsi que l'ID qui est le nombre renseigné dans l'hyperlien de la balise. Nous ajoutons enfin ces informations à un tableau dont la clé est l'ID et la valeur est un tableau de la forme [Nom, Prénom].
Données d'une élite
Pour récupérer les données des élites, nous nous intéressons aux tables contenues dans la tableau dont l'id est 'contleft'. Nous distinguons enfin les tables dont nous souhaitons retirer les informations par leur attribut de classe. Nous récupérons, si existants, les données biographiques, la formation et le parcours professionnel. Les données respectives sont stockées dans un dictionnaire nommé infos avec la clé correspondante à la catégorie.
Le nom des catégories et des caractéristiques sont décrites dans keyword.py et sont identifiées à l'avance.
Données biographiques
Ce tableau se présente sous la forme de plusieurs lignes dont le premier élément est la caractéristique et le second la valeur de cette caractéristique. Nous allons conserver ces informations sous la forme d'un dictionnaire dont la clé est la caractéristique. Ce dictionnaire est ensuite conservé dans infos[biography].
Nous réalisons cependant une exception pour la date. En effet, le résultat initial donne par exemple pour Raphaël Abbet [1] :
{'Nom :': 'Abbet', 'Prénom :': 'Raphaël', 'Sexe :': 'H', 'Nationalité :': 'Suisse', 'Dates :': 'Naissance: 01/10/1940 Décès: 27.02.2018'}
En effet, l'attribut 'Dates' à des valeurs qui sont une concaténation de plusieurs attributs de dates avec leur valeur respective. Un traitement permet donc d'attribuer les dates de Naissance et de Décès comme des attributs du dictionnaire contenu dans infos[biography].
infos[biography] = {'Nom :': 'Abbet', 'Prénom :': 'Raphaël', 'Sexe :': 'H', 'Nationalité :': 'Suisse', 'Naissance:': '01/10/1940', 'Décès:': '27.02.2018'}
Nous utilisons le module BeautifulSoup4 pour scrapper le code HTML de chaque page d'intérêt.
Formattage
Les données sont scrappées passée à un classe appellée PastaMaker qui se charge de les mettre au format wikipasta. Les données passées sont sous forme de dictionnaire. La clé de ce dictionaire dit de quelle type de valeurs il s'agit, et formatte les données selon la catégorie auquel elle appartient. Il y a 3 categories qui sont formattées.
La premiere est la biographie, ou est recupéré le nom et prenom de l'individus. Si la date de naissance et/ou la date de décès sont données alors les evenements correspondants sont aussi générées. La biographie doit imperativement etre donnée sans quoi le formattage ne sera pas correcte.
La deuxième est la formation. Un evenement "Diplôme" est créé avec les informations présents, c'est-à-dire le nom de l'école, le titre obtenu et la spécialisation. Si il n'y pas de date pour la formation, l'évenement n'est pas créé.
La troisième est la fonction. Nous n'avons pas reussi à trouver d'évenement corresponant et ainsi l'évenement comprend principalement le titre de la fonction. Il n'y a pas de format rigouruex pour les fonction, rendant la tache compliqué et cetaines informations ne peuvent pas être utilisées car il y a trop d'informations differentes (lieu ou institutions ou même juste des lettres) Ici aussi, si il n'y pas de date pour la fonction, l'évenement n'est pas créé.
A travers toutes ces catégories plusieurs fonctions sont utilisés qui lisent et transforment par exemple les dates ou qui méttent la sources et les hypermots correctements
Mise sur Wikipast
Analyse des résultat
Exemple d'un résultat
Nous allons suivre la page de Regina Elisabeth Aebi-Müller et son parcours à travers EliteBot [2]
Voici la page telle qu'elle est sur elite suisse:
Et voici le resultat donné par le scrapping:
{'ID': 84684, 'Données biographiques': {'Nom :': 'Aebi-Müller', 'Prénom :': 'Regina Elisabeth ', 'Sexe :': 'F', 'Nationalité :': 'suisse', 'Naissance:': '1971'}, 'Formation': [{'année': '2000', 'titre': 'Doctorat', 'catégorie': 'droit', 'lieu': 'UniBe', 'pays': 'Suisse'}], 'Fonctions et mandats': [{'durée': '2005- (2020)', 'université': 'UniLu (faculté de droit)', 'fonction': 'professeur ordinaire'}, {'durée': '(2010)', 'université': 'UniLu (Rechtswissenschaftliche Fakultät)', 'fonction': 'doyen'}, {'durée': '(2015)- ≥ 2020', 'université': 'Fonds national suisse de la recherche scientifique (conseil national de la recherche )', 'fonction': 'Membre', 'discipline': 'division 4', '': '1'}] }
Un fois formatée ceci donne (où source est https://www2.unil.ch/elitessuisses/index.php?page=detailPerso&idIdentite=84684):
* [[1971]] / -. [[Naissance]] de [[Regina Elisabeth Aebi-Müller (84684)]] [source] * [[2000]] / [[Suisse]]. [[Diplôme]]: [[Regina Elisabeth Aebi-Müller (84684)]] diplomée de [[UniBe]] : Doctorat en droit [source] * [[2005]] / -. [[Regina Elisabeth Aebi-Müller (84684)]] est professeur ordinaire à [[UniLu]] (faculté de droit) [source] * [[2010]] / -. [[Regina Elisabeth Aebi-Müller (84684)]] est doyen à [[UniLu]] (Rechtswissenschaftliche Fakultät) [source] * [[2015]] / -. [[Regina Elisabeth Aebi-Müller (84684)]] est Membre à [[Fonds national suisse de la recherche scientifique]] (conseil national de la recherche ) [source]
Performance du scrapping
Analyse des performances sur l'ensemble du jeu de données
Nous remplirons cette partie après l'exécutions du bot.
Améliorations possible
- Sur certaines pages se trouve une partie militaire qui parles des mandats et succès des militaires et/ou une partie généalogie qui montre la famille de l'individus. Ces deux parties ne sont pas utlisées
- Le formattage n'utilise pas certaines inforamtion de catégories diverses, mais peut-être des analyses plus poussées pourraient en faire usage
Code
Le code est entierement disponible sur GitHub [3]