« EliteBot » : différence entre les versions

De Wikipast
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Ligne 1 : Ligne 1 :
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.
Ce bot a pour objectif d'extraire  les données présentes (pour les individus seulement) de la base de donnée des Elites suisses et de les mettre sur Wikipast.


== Résumé des fonctionnalités ==
== Résumé des fonctionnalités ==
EliteBot va venir récupérer l'ensemble des Elites suisses disponibles sur [[le site des élites suisses | 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.
EliteBot va venir récupérer l'ensemble des Elites suisses disponibles sur [[le site des élites suisses | 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 scraping. 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 ==
== Description technique ==
Ligne 51 : Ligne 51 :
L'ID de l'élite renseigné sur le site des élites suisses est également conservé eadns infos[ID].
L'ID de l'élite renseigné sur le site des élites suisses est également conservé eadns infos[ID].


=== Formattage ===
=== Formatage ===
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.
Les données sont scrappées puis passées à un classe appelée PastaMaker qui se charge de les mettre au format Wikipast. Les données passées sont sous forme de dictionnaire. La clé de ce dictionnaire correspond au type de valeur correspondante, ce qui permet de formater les données selon la catégorie à laquelle elle appartient. Il y a 3 catégories qui sont formatées.
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 première est la biographie, est récupéré le nom et prénom de l'individu. Si la date de naissance et/ou la date de décès sont données, alors les évènements correspondants sont aussi générées.
La biographie doit imperativement etre donnée sans quoi le formattage ne sera pas correcte.
La biographie doit impérativement être donnée sans quoi le formatage 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.  
La deuxième est la formation. Un évènement "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éé.
Si il n'y pas de date pour la formation, l'évènement 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)
La troisième est la fonction. Nous n'avons pas réussi à trouver d'évènement correspondant et ainsi l'évènement comprend principalement le titre de la fonction. Il n'y a pas de format rigoureux pour les fonctions, rendant la tache compliquée et certaines informations ne peuvent pas être utilisées car il y a trop de contenus différents possibles(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éé.
Ici aussi, si il n'y pas de date pour la fonction, l'évènement 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
A travers toutes ces catégories plusieurs fonctions sont utilisés qui lisent et transforment par exemple les dates ou qui mettent la sources et les hypermots correctement.


=== Mise sur Wikipast ===
=== Mise sur Wikipast ===
Ligne 110 : Ligne 109 :
  *  [[2015]] / -. [[Regina Elisabeth  Aebi-Müller (84684)]] est Membre à [[Fonds national suisse de la recherche scientifique]] (conseil national de la recherche ) [source]
  *  [[2015]] / -. [[Regina Elisabeth  Aebi-Müller (84684)]] est Membre à [[Fonds national suisse de la recherche scientifique]] (conseil national de la recherche ) [source]
</nowiki>
</nowiki>
=== Performance du scrapping ===
=== Performance du scraping ===
 
L'algorithme de scraping va venir récupérer les données HTML de chaque page et ensuite les traiter. Après quelques essais, nous émettons une hypothèse sur le fonctionnement du site. Chaque page d'élite n'est pas conservée et une requête SQL permet d'afficher la page pour chaque requête utilisateur. Ainsi, l'affichage de la page prends quelques secondes. De plus, il ne semble pas que ces requêtes puissent se réaliser de manière parallèle. On est donc dans une queue de requête, et nous sommes donc dépendant de la vitesse de réponse de la base de donnée et de la création de la page.
 
Le temps de téléchargement de la page est conséquent devant celle du scraping et du temps d'exécution des autres scripts. Nous avons chronométré la performance de vitesse sur l'ensemble des élites dont le nom commence par B.
 
Le temps moyen de téléchargement d'une page est de XX secondes. Le temps moyen d'exécution du scraping est de XX secondes. Nous pouvons donc évaluer le temps de téléchargement et de scrap total pour l'ensemble du jeu de donnée à XX heures.
=== Analyse des performances sur l'ensemble du jeu de données ===
=== Analyse des performances sur l'ensemble du jeu de données ===
Nous remplirons cette partie après l'exécutions du bot.  
Nous remplirons cette partie après l'exécutions du bot.  
=== Améliorations possible ===
=== 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
* 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 utilisées.
* Le formattage n'utilise pas certaines inforamtion de catégories diverses, mais peut-être des analyses plus poussées pourraient en faire usage
* Le formatage n'utilise pas certaines informations de catégories diverses, mais peut-être des analyses plus poussées pourraient en faire usage.


== Code ==
== Code ==
Le code est entierement disponible sur GitHub [https://github.com/RaulinN/BA6_SHS_DH]
Le code est entièrement disponible sur GitHub [https://github.com/RaulinN/BA6_SHS_DH]

Version du 24 mai 2021 à 20:37

Ce bot a pour objectif d'extraire les données présentes (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 scraping. 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

Scraping

Le module de scraping 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. Nous utilisons le module BeautifulSoup4 pour scrapper le code HTML.

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].

{'Nom :': 'Abbet', 
'Prénom :': 'Raphaël', 
'Sexe :': 'H', 
'Nationalité :': 'Suisse', 
'Naissance:': '01/10/1940', 
'Décès:': '27.02.2018'}
Formation et parcours professionnel

Ces informations sont présentées sous forme de table. Dans le cas de la formation, il n'existe qu'une table. Dans le cas du parcours professionnel il peut exister plusieurs tables (avec des en-têtes différentes). Dans tous les cas, nous utilisons une fonction nommé tab_to_dic qui va, pour chaque ligne d'un tableau, ajouter un élément à un tableau de résultat. Ce dernier est un dictionnaire qui a pour clé les caractéristiques. La fonction permet également de désambiguer des header qui portent le même nom mais qui n'ont pas la même signification en fonction des catégories de sous-tableaux.

Ces tableaux sont conservés dans infos[formation] ou infos[fonc].

ID

L'ID de l'élite renseigné sur le site des élites suisses est également conservé eadns infos[ID].

Formatage

Les données sont scrappées puis passées à un classe appelée PastaMaker qui se charge de les mettre au format Wikipast. Les données passées sont sous forme de dictionnaire. La clé de ce dictionnaire correspond au type de valeur correspondante, ce qui permet de formater les données selon la catégorie à laquelle elle appartient. Il y a 3 catégories qui sont formatées.

La première est la biographie, où est récupéré le nom et prénom de l'individu. Si la date de naissance et/ou la date de décès sont données, alors les évènements correspondants sont aussi générées. La biographie doit impérativement être donnée sans quoi le formatage ne sera pas correcte.

La deuxième est la formation. Un évènement "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'évènement n'est pas créé.

La troisième est la fonction. Nous n'avons pas réussi à trouver d'évènement correspondant et ainsi l'évènement comprend principalement le titre de la fonction. Il n'y a pas de format rigoureux pour les fonctions, rendant la tache compliquée et certaines informations ne peuvent pas être utilisées car il y a trop de contenus différents possibles(lieu ou institutions ou même juste des lettres). Ici aussi, si il n'y pas de date pour la fonction, l'évènement 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 mettent la sources et les hypermots correctement.

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: Contenu de la page de Regina Elisabeth Aebi Müller 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 scraping

L'algorithme de scraping va venir récupérer les données HTML de chaque page et ensuite les traiter. Après quelques essais, nous émettons une hypothèse sur le fonctionnement du site. Chaque page d'élite n'est pas conservée et une requête SQL permet d'afficher la page pour chaque requête utilisateur. Ainsi, l'affichage de la page prends quelques secondes. De plus, il ne semble pas que ces requêtes puissent se réaliser de manière parallèle. On est donc dans une queue de requête, et nous sommes donc dépendant de la vitesse de réponse de la base de donnée et de la création de la page.

Le temps de téléchargement de la page est conséquent devant celle du scraping et du temps d'exécution des autres scripts. Nous avons chronométré la performance de vitesse sur l'ensemble des élites dont le nom commence par B.

Le temps moyen de téléchargement d'une page est de XX secondes. Le temps moyen d'exécution du scraping est de XX secondes. Nous pouvons donc évaluer le temps de téléchargement et de scrap total pour l'ensemble du jeu de donnée à XX heures.

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 utilisées.
  • Le formatage n'utilise pas certaines informations de catégories diverses, mais peut-être des analyses plus poussées pourraient en faire usage.

Code

Le code est entièrement disponible sur GitHub [3]