BottinBot6

De Wikipast
Sauter à la navigation Sauter à la recherche

Introduction

Le bot BottinBot6 a pour but d'extraire, à partir des données provenant des anciens annuaires de Paris, des entrées data-biographiques respectant le format de Wikipast. Le but est de créer une page pour chaque personne différente qui a pu vivre à Paris. Cette page doit rassembler des informations du Bottin comme l’année, le travail ou encore l’adresse qui correspondent à cette même personne. Pour permettre cela, nous disposons du fichier données groupe 6, provenant de l’extraction de l’équipe du DHLAB :
Di Lenardo, I., Barman, R., Descombes, A., Kaplan F. (2019). Repopulating Paris: massive extraction of 4 Million addresses from city directories between 1839 and 1922, Digital Humanities conference DH2019, Utrecht, Pays-Bas, https://dev.clariah.nl/files/dh2019/boa/0878.html.
Pour donner un ordre d’idée, nos données contiennent 869 824 entrées, dont 228 108 noms uniques, 63 795 métiers uniques, 41 640 rues uniques. Nous disposons d’entrées correspondantes aux années : 1888 (101 782), 1890 (98 413), 1893 (101 588), 1894 (104 941), 1896 (111 475), 1897 (113 710), 1898 (117 566), 1900 (120 349).

Le code correspondant au projet est disponible sur github.

Résumé des fonctionnalités

Notre bot va accepter des entrées regroupés dans un fichier .csv du type :

directory,page,row,year,name,job,street,number,street_clean,street_only

L’idée est de transformer ces entrées, pour qu’elles correspondent à une ligne de databiographie. Le Bottin pouvant correspondre à une personne physique ou morale (entreprise), il était nécessaire pour nous de trouver une phrase qui pourrait correspondre aux deux. Nous avons choisi de rester plutôt proche du Bottin et d’adapter ce type d’entrées :

[year] / Paris. [name], [job], exerce son activité au [number_clean] [street_clean] ([url]). 

Cette entrée est ensuite transformée pour correspondre au code source de Wikipast :

* [[year]] / [[Paris]]. [[name], [[job]], exerce son activité au [[number_clean]] [[street_clean]]. [url] 

Nous avons tenté de nettoyer quelque peu les données, en utilisant des fonctions déjà à notre disposition, permettant par exemple de ne garder que le numéro (et éventuellement bis) pour number_clean.
Nous avons donc regroupé les entrées qui correspondent à une même personne, selon le critère assez sélectif suivant : même nom, même métier, même adresse (rue + numéro). Pour chaque personne correspondante à notre critère, nous disposons donc d’une liste des entrées databiographiques à insérer dans Wikipast. Il ne nous semblait malheureusement pas possible de savoir si une personne a changé de travail ou d’adresse, et dans le doute nous avons préféré créer une nouvelle page.
Les personnes qui possèdent le même nom dans nos entrées, mais qui ne satisfont pas notre critère sont traités comme "homonymes". Nous allons donc ajouter entre parenthèses leur métier et leur adresse dans le nom de leur page, ce qui permet de les distinguer et de disposer de noms de pages uniques. Pour aller un peu plus loin, nous avons créé un tableau rassemblant pour chaque nom qui apparait plusieurs fois, la liste des noms de pages correspondantes (du type nom (métier, adresse)). Cette DataFrame devant nous permettre de créer facilement ce que nous appelons des pages d’Homonymies.
Pour n’importer sur Wikipast seulement les données qui nous semblent correct, nous avons décidé de n’importer que les personnes qui disposent de deux entrées ou plus. Nous avons également retiré les entrées qui ne commencent pas par un caractère alpha-numérique.
Si le nom de page que nous avions choisis correspondait déjà à une page existante, nous avons décidé de changer éventuellement le nom de page (en ajoutant le travail et l'adresse si ce n'était pas déjà fait). Après ce changement de nom, il se peut que la page existe déjà également, et alors on ajoute simplement nos entrées à la fin.

Discussion critique des performances

Nous avons pu créer 193 669 pages correspondant à une personne. Seul 85 pages n'ont pas pu être créer, à cause de la présence du caractère '|' dans le titre. Nous avons également pu créer 31 297 pages d'homonymies. Nous avons donc pu contribuer à Wikipast en ajoutant 224 966‬ pages.

Ces importations ont nécessité du temps, nous avons donc procédé avec deux comptes de bots différents, agissant simultanément sur des parties différentes de notre DataFrame. La création de 20 000 pages prend en moyenne environ 49 minutes, il aura donc fallu environ 9 heures pour créer toutes nos pages (plus de 4h30 chacun). Nous avons importés nos pages par paquets de 10 000 à 20 000 entrées.

Exemples de résultats

Observons ici comment va être transformée la première ligne que nous possédons :

Fichier .csv

bpt6k9732740w,478,149,1894,Abry (Mme),directrice de l'école maternelle,rue Rodier,30.,rue Rodier,Rodier

Entrée générée

Regroupement des entrées correspondant à une même personne

Nom final de la page : Abry (Mme) (directrice de l'école maternelle, 30 rue Rodier)

Liste des entrées correspondantes:

Listes des homonymes

Nom final de la page d'Homonymies : Abry (Mme)

Liste des entrées correspondantes:

Pistes complémentaires

  • Mieux gérer la collaboration avec les autres bots : si le nom de page choisi existe déjà, vérifier si cette page correspond déjà à la même personne avant d'en créer une nouvelle : présence de la ville de Paris, même métier, même adresse, années plausibles (avec un intervalle comme +/- 50 ans).
  • Supprimer les sigles comme [NCt] (Notable Commerçant) des entrées
  • Repérer que pour certaines adresses que ce sont les mêmes :‎
    • N Boutet (ingénieur, 50 Saint-Placide) == ‎N Boutet (ingénieur, 50 rue Saint-Placide)
    • N Brancher (boucherie hippophagique, 87 rue de l'Abbé-Groult) == N Brancher (boucherie hippophagique, 87 rue de l'abbé-Groult)
  • Essayer d’enlever certaines erreurs d’OCR en utilisant la distance entre les entrées. Si par exemple on a deux entrées qui possèdent le même nom, la même adresse (rue + numéro), mais que le métier diffère seulement d’une lettre entre les deux entrées, on peut raisonnablement penser qu’il s’agit d’une erreur d’OCR. Il est alors plus logique de décider que l’entrée qui possède le plus de fréquence d’apparition correspond à la vraie, et celle qui n’apparait qu’une fois est une erreur d’OCR. Pour illustrer cet exemple, nous vous proposons l’exemple de « Pitt et Scott ». Cette idée permettrait de passer de 10 entrées à 13, en acceptant aussi « Seribe » au lieu de « Scribe », « Pitt et Seott » au lieu de Pitt et Scott », ou encore « agence marilime » à la place d’ « agence maritime ».
alternative à l'image
Exemple d'analyse pour le nom "Pitt et Scott" incluant certaines erreurs OCR que nous avons trouvés