« LinkBot2 » : différence entre les versions

De Wikipast
Aller à la navigation Aller à la recherche
Ligne 58 : Ligne 58 :
Un exemple de fonctionnement/le résultat de la division en sous-pages pour la page [[Naissance]] qui remplit les deux critères par défaut (mins que 30kB en taille et plus que 150 Entrées dans la biographie chronologique).
Un exemple de fonctionnement/le résultat de la division en sous-pages pour la page [[Naissance]] qui remplit les deux critères par défaut (mins que 30kB en taille et plus que 150 Entrées dans la biographie chronologique).


==Discussion des performances==
==Discussion==
 
===Améliorations possibles===


===Complétion des liens===
===Complétion des liens===
====Performance====
Lors d'un test en lançant le bot seulement sur les dix premières pages du dump utilisé, le bot a effectué la complétion des liens en approximativement 5-6 sec.  
Lors d'un test en lançant le bot seulement sur les dix premières pages du dump utilisé, le bot a effectué la complétion des liens en approximativement 5-6 sec.  
Ce n'est pas très optimisé, mais cela parait difficile à améliorer. En effet, disons qu'il y a "m" nombre d'hypermots dans chaque entrée et qu'il y a en tout "n" entrées :
Ce n'est pas très optimisé, mais cela parait difficile à améliorer. En effet, disons qu'il y a "m" nombre d’hyper-mots dans chaque entrée et qu'il y a en tout "n" entrées :
* Alors le temps d'execution du bot sera en O(m*n) pour chaque page, donc s'il y a "k" pages l'execution totale du bot sera donc en O(k*m*n)
* Alors le temps d’exécution du bot sera en O(m*n) pour chaque page, donc s'il y a "k" pages l’exécution totale du bot sera donc en O(k*m*n)
C'est un ordre de grandeur assez élevé, en sachant que wikipast a plus d'un million de pages maintenant.
C'est un ordre de grandeur assez élevé, en sachant que wikipast a plus d'un million de pages maintenant.
=====Idées d'améliorations=====


===Division en sous-pages===
===Division en sous-pages===
====Performance====
La query qui cherche
=====Idées d'améliorations=====
*Comprendre différents formats de dates, et éventuellement modifier les dates des entrées pour les uniformiser
*Comprendre différents formats de dates, et éventuellement modifier les dates des entrées pour les uniformiser
*Pour la page d'un mot qui a été découpée en décennies, séparer la page qui comprend les liens vers les sous-pages de la page qui comprend toutes les entrées. Par exemple, pour [[Naissance]], séparer la page "Naissance" qui recenserait les liens (Naissance 1870-1879, Naissance 1880-1889, ...) de la page "Naissance (archive)" qui comprend toutes les entrées de datafications biographiques qui utilisent l'hypermot Naissance.
*Pour la page d'un mot qui a été découpée en décennies, séparer la page qui comprend les liens vers les sous-pages de la page qui comprend toutes les entrées. Par exemple, pour [[Naissance]], séparer la page "Naissance" qui recenserait les liens (Naissance 1870-1879, Naissance 1880-1889, ...) de la page "Naissance (archive)" qui comprend toutes les entrées de datafications biographiques qui utilisent l’hyper mot Naissance.


==Code==
==Code==
Le code est disponible sur l'instance GitLab de l'EPFL. [https://gitlab.epfl.ch/digital_humanities_wikipast_linkbot2/linkbot2]
Le code est disponible sur l'instance GitLab de l'EPFL. [https://gitlab.epfl.ch/digital_humanities_wikipast_linkbot2/linkbot2]

Version du 25 mai 2021 à 19:32

Logo: Font in use CooperHewitt-Semibold designed by Chester Jenkins and licensed under Open Font License. Icon Designed by Alfredo @ IconsAlfredo.com

Résumé des fonctionnalités

LinkBot2 a comme but d'augmenter le nombre de liens entre les datafications biographiques sur Wikipast. Ceci est un but important afin de pouvoir augmenter la visibilité de Wikipast sur les moteurs de recherche (SEO).

Le bot a deux fonctionnalités principales:

  • Faire en sorte que sur chaque page de datafication biographique, chaque lien pointe sur une page qui, elle, pointe sur cette page en retour. Pour cela, le bot regarde dans un premier temps si la page pointée existe, et si ce n'est pas le cas, la créé. Puis il vérifie si la ligne qui comprend le lien est présente sur la page pointée. Si ce n'est pas le cas, il copie cette ligne et la colle dans la page pointée. Ce bout de texte comprend un lien qui pointe vers la page originale. Pour cette partie du bot, le code se base sur PageUpdaterBot et a été amélioré.
  • Diviser les pages comprenant un grand nombre d'entrées en tranches temporelles (décennies), afin d'éviter d'avoir des pages qui soient trop longues, et ainsi améliorer l'expérience d'utilisation pour un humain qui utilise le wiki.

Description technique

Le bot consiste de deux modules exécuté consécutivement qui accomplissent deux fonctionnalités principales:

  1. Compléter les liens entre les pages en créant les entrés réciproques manquantes pour chaque entrée d'une biographie chronologique.
  2. Division des pages trop longues en sous-pages en le regroupant par décennie

Compléter les liens

Le bot utilise un dump de wikipast en local, il faut donc avoir une archive correspondante pour lancer cette partie du bot. Il effectue une recherche sur ces différentes pages en local pour observer quelles entrées doivent être mises à jour et les pages qui doivent être créées. Le bot les créé ensuite sur le site wikipast et ajoute l'entrée sur la nouvelle page. Si la page existe déjà, le bot ajoute seulement l'entrée, si elle n'est pas déjà présente sur la page.

Exemple de fonctionnement

Prenons l'entrée suivante :

Ici, la page "2032" n'existe pas encore, le bot va donc créer cette page et y ajouter l'entrée complète. Mais le bot va aussi modifier les pages : "Lune", "Présentation", "Michael Jackson", pour y ajouter l'entrée si elle n'y est pas déjà présente.

Division en sous-pages

Hypothèses

Le bot suppose que pour cette opération:

  • Toutes les entrées des chronologique biographiques commencent avec un * et est suivi par une date et par un /.
  • Toutes les entrées se trouvent dans la même section du wikitext.
  • La date de chaque entrée d'une chronologie biographique * est dans le format yyyy.mm.dd, yyyy.mm ou bien yyyy. Les entrées qui ne suivent pas se format ne seront pas détectes et donc pas comptées.
  • Le flags LINKBOT2_SUBPAGE_FLAG = "<!--Automatically generated LinkBot2 subpage-->" et LINKBOT2_MOTHERPAGE_FLAG = "<!--Automatically generated LinkBot2 references to subpages-->" ne sont utilisé par aucun autre bot et n'ont pas été modifié/supprimé par les autres bots et utilisateurs humains sur le wiki.

Condition sur la division

La division d'une page en sous-pages est effectué si:

  • La page considéré n'est pas déjà une sous-page.
  • Le titre de la page n'est pas une date. (Pour éviter de diviser les pages comme 1997 p.ex)
  • La taille de la page dépasse un certain taux (par défaut 30kB).
  • ET le nombre d'entrées dans chronologie biographiques (caractérisés par * suivi par une date entre des [ ]) dépasse un certain nombre (par défaut 150 entrées).

Traitement des données

  1. Les candidats pour la division en sous-pages sont obtenue en effectuant une query sur les pages avec un taille minimale spécifié (par défaut 30kB). Ceci est réalisé en utilisant le paramètre "apminsize".
  1. Les pages dont leur titre est une date sont jartés.
  2. En suite le nombre d'entrées biographie chronologique est déterminé et les seulement les pages avec un minimum d'entrées et qui ne sont pas des sous-pages (grâce à un "tag") sont considérées pour la suite.
  3. Les pages restantes seront divisées en sous-pages
    1. Les entrées de biographie chronologiques sont triées et regroupé par décennie.
    2. Les sous-pages contenant les entrées correspondantes sont crées et marqué avec le tag <!--Automatically generated LinkBot2 subpage-->. De plus un lien vers la "page mère" (la super page qui est divisé) est crée sur les sous-pages
    3. Si jamais le tableau des sous-pages sur la "page mère" existe déjà il est supprimées. En écrasant tout le contenu entre les deux tags <!--Automatically generated LinkBot2 references to subpages-->
    4. La "page mère" obtient un tableau pointant vers ses propres sous-pages. Le contenu original de la page n'est pas supprimé.
La page Naissance après avoir été divisé
Naissance 1870-1879], une des sous-pages de Naissance

Exemple de fonctionnement

Un exemple de fonctionnement/le résultat de la division en sous-pages pour la page Naissance qui remplit les deux critères par défaut (mins que 30kB en taille et plus que 150 Entrées dans la biographie chronologique).

Discussion

Complétion des liens

Performance

Lors d'un test en lançant le bot seulement sur les dix premières pages du dump utilisé, le bot a effectué la complétion des liens en approximativement 5-6 sec. Ce n'est pas très optimisé, mais cela parait difficile à améliorer. En effet, disons qu'il y a "m" nombre d’hyper-mots dans chaque entrée et qu'il y a en tout "n" entrées :

  • Alors le temps d’exécution du bot sera en O(m*n) pour chaque page, donc s'il y a "k" pages l’exécution totale du bot sera donc en O(k*m*n)

C'est un ordre de grandeur assez élevé, en sachant que wikipast a plus d'un million de pages maintenant.

Idées d'améliorations

Division en sous-pages

Performance

La query qui cherche

Idées d'améliorations
  • Comprendre différents formats de dates, et éventuellement modifier les dates des entrées pour les uniformiser
  • Pour la page d'un mot qui a été découpée en décennies, séparer la page qui comprend les liens vers les sous-pages de la page qui comprend toutes les entrées. Par exemple, pour Naissance, séparer la page "Naissance" qui recenserait les liens (Naissance 1870-1879, Naissance 1880-1889, ...) de la page "Naissance (archive)" qui comprend toutes les entrées de datafications biographiques qui utilisent l’hyper mot Naissance.

Code

Le code est disponible sur l'instance GitLab de l'EPFL. [1]