Package: legi
legi.py est un module python qui peut :créer une base de données SQLite à partir des archives de la base LEGImettre à jour automatiquement et incrémentalement cette BDDnormaliser les titres des textesconnecter les différentes versions d'un texte entre ellesanalyser les données pour détecterles anomaliesAvoir les lois françaises dans une base SQL permet aussi d'autres choses qui ne
sont pas encore implémentées directement dans legi.py, par exemple générer des
statistiques sur l'activité législative,trouver le texte le plus ancien encore
en vigueur, etc.Installationlegi.py a besoin delibarchiveethunspell. L'installation de ces dépendances varie selon le système d'exploitation :Arch Linux :pacman -S --needed libarchive hunspell hunspell-frMac OS X : la version delibarchiveinclue dans Mac OS X est obsolète, vous pouvez utiliserHomebrewpour installer une version récente en exécutantbrew install libarchive, puis indiquer au module Python qu'il doit utiliser cette version en ajoutant une variable d'environnement :export LIBARCHIVE="$(find "$(brew --cellar libarchive)" -name libarchive.13.dylib | sort | tail -1)"(cette commande peut être ajoutée au fichier d'initialisation de votre shell, typiquement~/.bashrcou~/.zshrc)Ubuntu :sudo apt-get install libarchive13 hunspell hunspell-fr libhunspell-devUne fois ces dépendances système installées, vous pouvez cloner le dépôt et utiliserpippour installer les modules python nécessaires :git clone https://github.com/Legilibre/legi.py.git
cd legi.py
python -m ensurepip
pip install -r requirements.txtlegi.py et les modules dont il dépend sont compatibles avec python 3.7, 3.8 et 3.9,
les versions antérieurs de python peuvent générer des erreurs.legi.py peut être utilisé comme dépendance d'un autre projet, il est disponible
sous forme de paquetdans PyPI.Création et maintenance de la BDDLa première étape est de télécharger les archives LEGI depuisftp://echanges.dila.gouv.fr/LEGI/:python -m legi.download ./tarballsLa deuxième étape est la conversion des archives en base SQLite :python -m legi.tar2sqlite legi.sqlite ./tarballs [--raw]Cette opération peut prendre de quelques minutes à plusieurs heures selon votre
machine et le nombre d'archives. Les deux caractéristiques importantes de votre
machine sont: le disque dur (un SSD est beaucoup plus rapide), et le processeur
(notamment sa fréquence, le nombre de cœurs importe peu car le travail n'est pas
parallèle).La taille du fichier SQLite créé est environ 4Go (en janvier 2020).L'option--rawdésactive le nettoyage des données, ajoutez-la si vous avez
besoin des données LEGI brutes.tar2sqlitepermet aussi de maintenir votre base de données à jour, il saute
automatiquement les archives qu'il a déjà traité. En général la DILA publie une
nouvelle archive à la fin de chaque jour ouvré, vous pouvez donc programmer
votre machine pour mettre à jour la BDD du mardi au samedi pendant la nuit, par
exemple aveccron:0 1 * * 2-6 ID=legi chronic ~/chemin/vers/legi.py/cron/cron.sh(chronicfait partie desmoreutils.)FonctionnalitésNormalisation des titres et numérosLe modulenormalizenettoie les titres et numéros des textes, des sections et
des articles afin qu'ils soient plus « standards ».Factorisation des textesLa "factorisation" connecte entre elles les différentes version d'un même texte.
La base LEGI n'a pas d'identifiant qui remplisse réellement ce rôle.Nettoyage des contenusLe modulehtmlpermet de nettoyer les contenus des textes. Il supprime :les espaces redondantes (whitespace collapse), sauf à l'intérieur des<pre>les attributs inutiles, par exempleidetdir="ltr"les éléments inutiles, par exemple un<span>sans attributsles éléments vides, sauf<td>et<th>En janvier 2020 il détecte 93 millions de caractères inutiles dans LEGI.Cette fonctionnalité n'est pas activée par défaut car elle est « destructrice »
et récente. Vous pouvez nettoyer tout l'HTML d'une base en exécutant la commandepython -m legi.html clean legi.sqlite(les modifications ne sont enregistrées
que si vous entrezyà la fin).Détection d'anomaliesLe moduleanomaliesest conçu pour détecter les incohérences dans les données afin de les signaler à la DILA. Le résultat est visible suranomalies.legilibre.fr. (cron/anomalies-cron.shest le script qui génère ce mini-site.)Pour détecter les anomalies actuellement présentes dans la base :python -m legi.anomalies legi.sqliteContribuerLesPull Requestssont bienvenues, n'hésitez pas àouvrir une discussionavant de commencer le travail, ça permet une meilleure coopération et coordination. Vous pouvez aussi vous présenter dansle salon.Testslegi.py utiliseToxpour tester le code sur plusieurs versions de Python. Installez-le si nécessaire puis lancez la commandetoxdans le dossier qui contient votre copie du dépôt legi.py.LicenceCC0 Public Domain DedicationHistorique du projetFin juin 2014 labase de données LEGIcontenant les lois françaises
a été libérée en Open Data. J'ai immédiatementcommencé le travailpour la convertir dans d'autres formats. Malheureusement, distrait par d'autres
choses à faire et un peu découragé par la structure médiocre des données j'ai
fini par laisser le projet de côté.En 2015 j'ai réouvert, nettoyé et publié mon code. J'ai ensuite été très occupé
à créerLiberapay.Fin 2016 j'ai à nouveau travaillé sur legi.py. Le projet progressa fortement,anomalies.legilibre.frfut créé.En février 2017 la version 0.1 est publiée.