« DisambiguationBot » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 67 : | Ligne 67 : | ||
=== Discusion critique des performances === | === Discusion critique des performances === | ||
Concernant la lecture des pages, effectuer une requête à Wikipast pour chaque page, même en parallèle, est très long (~ | Concernant la lecture des pages, effectuer une requête à Wikipast pour chaque page, même en parallèle, est très long (~ 400 ms par groupe d'homonymes en série, ~ 30 ms en parallèle). De plus, Wikipast renvoie des erreurs HTTP 500 lorsqu'il reçoit trop de requêtes, probablement à cause d'un bug dans Mediawiki. | ||
Pour ces raisons, le bot utilise un dump de Wikipast en JSON. Comme le fichier est très lourd ( | Pour ces raisons, le bot utilise un dump de Wikipast en JSON. Comme le fichier est très lourd (2 Go) et qu'il est donc difficile de travailler dessus, le bot réécrit le fichier avec une page au format JSON par ligne, permettant ainsi une lecture individuelle des pages en accès direct (random access). La recherche d'une page se fait par dichotomie après un tri des pages (les pages sont déjà triées mais pas dans le même ordre que celui défini par Python). Il faut une vingtaine d'itérations (logarithme binaire du nombre total de pages, soit environ 10<sup>6</sup>) pour trouver une page, dont les dix premières sont mises en cache car les requêtes à ces pages seront probablement redondantes. | ||
Une optimisation supplémentaire permet un arrêt prématuré lorsqu'au moins toutes sauf une page d'un groupe ne correspondent pas à des | Une optimisation supplémentaire permet un arrêt prématuré lorsqu'au moins toutes sauf une page d'un groupe ne correspondent pas à des personnes ; la dernière page n'est alors pas analysée. Le temps de recherche étant très faible, l'essentiel du temps d'éxécution du bot est utilisé pour les requêtes à Wikidata, qui sont effectuées en parallèle avec une limite du nombre de connexions car le quota de Wikidata par adresse IP est assez faible. | ||
La vitesse finale est de ~ | La vitesse finale est de ~ 3 ms par groupe d'homonyme. | ||
Parmi les améliorations possibles : | Parmi les améliorations possibles : | ||
* Prendre avantage du fait que la liste des groupes d'homonymes est elle même triée. | * Prendre avantage du fait que la liste des groupes d'homonymes est elle même triée. | ||
* Par exemple, l'utilisation d'un cache LRU lors de la recherche par dichotomie pourrait améliorer la vitesse de recherche. | * Par exemple, l'utilisation d'un cache LRU lors de la recherche par dichotomie pourrait améliorer la vitesse de recherche. |
Version du 22 mai 2021 à 15:00
Le DisambiguationBot génére des pages homonymie des personnes sur Wikipast.
Résumé des fonctionnalités
Le bot a pour but de chercher des désambiguations dans les titres des toutes les pages. Mais seulement les pages qui sont identifiées comme une page d’une personne sont finalement pris en considération. Ensuite, il crée pour chaque désambiguations un page d’homonymie.
Description technique
Recherche des homonymies
Après tous titres des pages Wikipast sont récupérer, ils sont traité de sorte que :
- Ils sont écrits en lettre minuscule
- Ils ne contiennent pas des mots dans des parenthèse
- Ils ne contiennent que des lettres, ils ne contiennent ni des nombres ni des symboles
- Ils ne contiennent que des mots qui sont plus longue que 1 lettres
- Ex. ‘ (en) Alfonso Rodríguez G. from Ceballos’ -> ‘alfonso rodríguez from ceballos’
- Ex. ‘ 24 Préludes. Violoncelle, piano. Op. 47 (Auerbach) ’ -> ‘préludes violoncelle piano op’
- Ex. ‘ (en) Alfonso Rodríguez G. from Ceballos’ -> ‘alfonso rodríguez from ceballos’
Pour trouver les homonymies seulement le premier et dernier mot des titres sont comparés (en supposant que les titres sont des noms et le premier mot est le prénom et le dernier mot est le nom de famille). Aussi les titres qui se composent simplement d’un mot sont comparés. Car il existe beaucoup des pages de l’annuaire avec juste le nom de famille.
- Ex. ‘Alfred Martin’ -> ‘ alfred martin ’
- ‘Alfred Henri Martin’ -> ‘ alfred henri martin ’
- ‘Alfred Martin (19f0bfa)’ -> ‘ alfred martin ’
- ‘Alfred Henri Martin’ -> ‘ alfred henri martin ’
- Ex. ‘Alfred Martin’ -> ‘ alfred martin ’
Identification des pages des personnes
Après la recherche des homonymies, chaque page homonyme est lue pour en extraire les informations suivantes :
- année de naissance avec le mot-clé Naissance
- année de décès avec le mot-clé Décès
- fonctions avec les mots-clés Nomination et Election
- description Wikidata en anglais ou français lorsque l'identifiant correspondant est présent (généralement ajouté par let bot Wikidataficator)
La recherche des mots-clés essaie d'accepter un maximum de syntaxes, par exemple Election accepte la nomination de quelqu'un « en tant que », « comme » et « au poste de ». Néanmoins, les descriptions Wikidata fournissent l'essentiel des informations car elles sont généralement plus générales qu'une information sur une élection ou une nomination.
S'il y a au moins l'une des informations récupérées, alors on considère que la page en question correspond à une personne. S'il y a deux personnes au moins identifiées par groupe d'homonymie, alors on peut créer une page pour ce groupe.
La page d'homonymie résultante ressemble à ce qui est visible sur Wikipédia, par exemple avec la page Barry Barnes (disambiguation) :
[[Barry Barnes (disambiguation)|Barry Barnes]] peut désigner : * [[Barry K. Barnes]] (1906 – 1965), acteur britannique * [[Barry Barnes]], basketball coach
Il arrive souvent que les pages citées correspondent à la même personne, par exemple pour André Masson (disambuigation). Le bot ne fusionne pas ces pages, mais il est facile pour un utilisateur de remarquer les similitudes.
[[André Masson (disambuigation)|André Masson]] peut désigner : * [[André Masson]] (1896 – 1987), peintre français * [[André Masson (3b24eb9)]], peintre français * [[André Masson (44b9c7b)]], peintre français * [[André Masson (6df93be)]], peintre français * [[André Masson (d8fb9d8)]], économiste français
Création des pages homonymie
Discusion critique des performances
Concernant la lecture des pages, effectuer une requête à Wikipast pour chaque page, même en parallèle, est très long (~ 400 ms par groupe d'homonymes en série, ~ 30 ms en parallèle). De plus, Wikipast renvoie des erreurs HTTP 500 lorsqu'il reçoit trop de requêtes, probablement à cause d'un bug dans Mediawiki.
Pour ces raisons, le bot utilise un dump de Wikipast en JSON. Comme le fichier est très lourd (2 Go) et qu'il est donc difficile de travailler dessus, le bot réécrit le fichier avec une page au format JSON par ligne, permettant ainsi une lecture individuelle des pages en accès direct (random access). La recherche d'une page se fait par dichotomie après un tri des pages (les pages sont déjà triées mais pas dans le même ordre que celui défini par Python). Il faut une vingtaine d'itérations (logarithme binaire du nombre total de pages, soit environ 106) pour trouver une page, dont les dix premières sont mises en cache car les requêtes à ces pages seront probablement redondantes.
Une optimisation supplémentaire permet un arrêt prématuré lorsqu'au moins toutes sauf une page d'un groupe ne correspondent pas à des personnes ; la dernière page n'est alors pas analysée. Le temps de recherche étant très faible, l'essentiel du temps d'éxécution du bot est utilisé pour les requêtes à Wikidata, qui sont effectuées en parallèle avec une limite du nombre de connexions car le quota de Wikidata par adresse IP est assez faible.
La vitesse finale est de ~ 3 ms par groupe d'homonyme.
Parmi les améliorations possibles :
- Prendre avantage du fait que la liste des groupes d'homonymes est elle même triée.
- Par exemple, l'utilisation d'un cache LRU lors de la recherche par dichotomie pourrait améliorer la vitesse de recherche.