« Chronobot » : différence entre les versions

De Wikipast
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 22 : Ligne 22 :


==Algorithme==
==Algorithme==
L'algo général se trouve dans la fonction ''main_one_page.py'' si on veut gérer une seule page et ''main.py'' si on veut gérer toutes les pages retournées par ''select_page.py''. On analyse ci-dessous le cas général :
L'algo général se trouve dans la fonction ''main.py''. Il utilise la fonction ''main_one_page.py'' aui contient l'agorithme général.  
<nowiki>
from create_new_site import create_new_site
from create_site import create_site
from modify_links import modify_links
from place_evenement import place_evenement
from event_not_in_page import event_not_in_page
from recherchedates2 import recherchedates2
#ajouter ici les autres fonctions dont on aura besoin


<nowiki>
def main_one_page(page):
page_list=selectpage()
    page=page.replace(" ","_")
for page in page_list:
    #modifie les dates pour rediger vers une année
     main_one_page(page)
     modify_links(page)


now = datetime.datetime.now()
    #renvoie un array de deux colonnes: une colonne de dates et une colonne d'evenements
year=str(now.year)
    elements=recherchedates2(page)
month=str(now.month)
   
day=str(now.day)
    for element in elements:
hour=str(now.hour)
        evenement = element[1]
minute=str(now.minute)
        date      = element[0]
if len(month)==1:
        annee    = date[:4]
    month='0'+month
        #cree le site si il existe pas encore
if len(day)==1:
        create_site(annee)
    day='0'+day
             
if len(hour)==1:
        if event_not_in_page(annee,evenement):
    hour='0'+hour
            content=place_evenement(date,evenement)
if len(minute)==1:
            create_new_site(annee,content)
    minute='0'+minute


#fichier=open('lastdate.txt','w')
fichier.write(year+'-'+month+'-'+day+'T'+hour+':'+minute+':00z')
fichier.close()
</nowiki>
</nowiki>



Version du 16 mai 2017 à 20:31


Chronobot est un bot programmé en langage Python et qui agit sur des pages Wikipast. Il permet de regrouper tous les événements qui se sont passés en une année dans une même page

Fonctionnement

Chronobot va d'abord effectuer un scan sur l'ensemble des pages biographiques crées par les élèves du cours "Humanités Digitales" (2017). Il effectue ensuite un scan sur tous les événements relevés dans la page et en stocke la date (sous forme AAAA.MM.JJ) et la description dans une liste. Une fois cette liste en main, il crée une page pour chaque jour différent. Pour des raisons pratiques, il est plus logique de n'avoir qu'une seule page par année avec tous les événements relevés durant cette année classé chronologiquement. Pour ce faire, au lieu d'agir directement sur l'url de la page, Chronobot redirige chaque lien d'un jour vers l'url de l'année correspondante. Enfin, il y écrit l'événement dans l'ordre chronologique.La gestion des doublons est résolue ultérieurement.

Généralités

  • Concepteurs : Arnau Albà Jacas, Sonia Bouchiba, Jonathan Charrière, Sébastien Morel, Aurélien Verdier.
  • UserName : ChronoBOT

Liste des fonctions

Fonctions principales

  • select_page.py parcourt les différentes pages sur une séléection précise de Users (ceux du cours SHS) et en retourne les pages crées sous formes de chaînes brutes (String). Les images (.png) sont ôtées ainsi que
  • recherchedates.py prend en argument une page donnée (string) et en sort une liste année/événement
  • modify_links.py modifie toutes les pages des dates pour qu'elles soient redirigées vers la page de l'année.
  • create_new_site.py crée une page Wikipast avec le contenu donné
  • place_evenement.py reçoit les pages dans lesquelles elle doit écrire ainsi que les événements sous forme de chaîne. Elle a deux rôles majeures. D'une part, elle écrit (tout en s'adpatant aux différents formats de date) la date et l'événement dans la page. Simultanément, elle trie les événements dans l'ordre chronologique.
  • event_not_in_page.py gère les doublons en comparant deux strings-évenements caractère par caractère. Il considère ainsi deux évenements identiques s'ils contiennent les mêmes suites de caractères. Il ne tient pas compte des virgules (,), points (.) et espaces ( ) s'ils sont différents dans les deux strings.

Fonctions secondaires

  • retrieve_content.py prend en input le nom d'une page et retourne tout le texte contenu en syntaxe wiki.
  • split_date.py est utilisée par place_evenement.py.

Algorithme

L'algo général se trouve dans la fonction main.py. Il utilise la fonction main_one_page.py aui contient l'agorithme général.

from create_new_site import create_new_site
from create_site import create_site
from modify_links import modify_links
from place_evenement import place_evenement
from event_not_in_page import event_not_in_page
from recherchedates2 import recherchedates2
#ajouter ici les autres fonctions dont on aura besoin

def main_one_page(page):
    page=page.replace(" ","_")
    #modifie les dates pour rediger vers une année
    modify_links(page)

    #renvoie un array de deux colonnes: une colonne de dates et une colonne d'evenements
    elements=recherchedates2(page)
    
    for element in elements:
        evenement = element[1]
        date      = element[0]
        annee     = date[:4]
        #cree le site si il existe pas encore
        create_site(annee)
               
        if event_not_in_page(annee,evenement):
            content=place_evenement(date,evenement)
            create_new_site(annee,content)


Critiques et faiblesses du bot

  • Optimisation du code (plusieurs minutes pour s'exéctuer sur toutes les pages.)
  • Dates mal-écrites (par exemple inversion mois-jour pas prise en compte)
  • Si une année a déjà été crée avant notre bot et une phrase a été ajoutée, par exemeple "Grande année" redigirigée vers "1995" comportait une phrase commançant par "Grande année". Pour résoudre ce problème, deux solutions sont enbisageables : la première, assez radicale, est d'effacer la ligne en question dans la page Wikpast. La seconde (celle choisie, plus douce) est
  • Gestion des doublons : pourrait être amélioré dans la comparaison de deux événements similaires. Actuellement, seules deux événements écrits exactement pareils ne sont pas dédoublés (par la fonction event_not_in_page.py), mais on pourrait imaginer qu'un événement du type Mariage qui serait écrit comme "A se marie avec B" dans la page de A et "B ser marie avec B" dans la page de B, et qui serait donc relevé deux fois.