Legilibre / salon

Un salon pour les discussions générales autour du projet Légilibre
https://github.com/Legilibre/salon/issues
2 stars 0 forks source link

Fichiers doublon dans la base LEGI #11

Open Seb35 opened 7 years ago

Seb35 commented 7 years ago

Je n’avais pas remarqué ce phénomène avant que tu ne fasses la modification https://github.com/Legilibre/legi.py/pull/8, @Changaco. Est-ce que tu pourrais détailler ce que tu comprends de ce phénomène et le changement de comportement que tu as fait dans legi.py ?

En regardant les résultats dans duplicate_files de legi.py (je n’ai pas encore refait tourner legi.py avec la nouvelle version, j’essaye pour l’instant de comprendre au niveau des fichiers XML), je constate effectivement que certains fichiers XML (tous les sous-dossiers texte/version, texte/struct, articles et section_ta sont touchés) sont identiques ou très similaires, à la différence principale qu’ils n’ont pas le même CID, et parfois il y a des changements mineurs (j’ai vu : ajout de référence de lien, changement de la casse dans le titre d’un décret, changement d’état entre VIGUEUR_DIFF et VIGUEUR, changement de date de publication entre 2015-10-25 et 2999-01-01).

De ce que je vois dans duplicate_files, c’est que :

Les conclusions temporaires que je tire sont :

Tout complément d’information est le bienvenu !

Changaco commented 7 years ago

La source principale des doublons est la division de la base LEGI en 4 dossiers {code,TNC}_{vigueur,non_vigueur}:

select count(*) from duplicate_files where dossier <> other_dossier;
22519

Si je me souviens bien cette séparation obsolète en 4 parties servait à vendre des licences limitées à un dossier (par exemple uniquement les codes en vigueur) avant que LEGI ne soit libérée.

L'autre source de doublons est la réutilisation de certains id dans plusieurs cid. Il s'agit probablement d'une optimisation visant à ne pas attribuer un nouveau numéro à deux éléments identiques présents dans deux "versions" d'un même texte.

select count(*) from duplicate_files where cid <> other_cid;
244

Afin de pouvoir utiliser les id comme clés primaires legi.py doit se débarrasser des doublons. Pour ça il regarde la date de dernière modification du fichier (mtime) et utilise le plus récent. https://github.com/Legilibre/legi.py/pull/8 a ajouté le stockage des données des fichiers plus anciens dans duplicate_files.data pour que la base soit toujours complète.