Nettoyer les textes adoptés de l’Assemblée nationale

Vous vous souvenez sans doute que j’ai voulu récupérer tous les textes adoptés par l’Assemblée nationale. Comme je n’ai pas trouvé de moyen de récupérer seulement les textes adoptés sous la forme de fichiers textes, j’ai téléchargé la version texte des pages web qui présentaient les textes.

Voici à quoi ressemble le début d’un fichier au hasard :

   Logo de l'Assemblee nationale
   Assemblee nationale
     * Accueil
     * Les
       deputes 
          * Le President
          * 577 deputes
          * Le Bureau
          * La Conference des Presidents
          * Les Groupes politiques
          * Statut des deputes
          * Deontologie
          * Elections legislatives
          * Anciens deputes
          * Contacter son depute
          * Ouvrir le menu dans l'hemicycle
     * Dans
       l'Hemicycle 
          * Ordre du jour
          * Calendrier de la session
          * Comptes rendus des seances
          * Scrutins
               * Les scrutins solennels
               * Tous les scrutins publics
          * Le Congres
          * Engagements de responsabilite et motions de censure
          * Budget et securite sociale
          * Assister `a une seance
          * Archives
               * XIIIe legislature
               * XIIe legislature
               * XIe legislature
               * Autres legislatures
          * Ouvrir le menu commissions et autres instances
     * Commissions et
       autres instances 
          * Agendas
          * Les Commissions permanentes
               * Affaires culturelles
               * Affaires economiques
               * Affaires etrangeres
               * Affaires sociales
               * Defense
               * Developpement durable
               * Finances
               * Lois
          * Autres commissions
               * Affaires europeennes
               * Commissions d'enquete
               * Commissions speciales
Début d'un fichier de texte adopté par l'Assemblée nationale

On le voit, il comporte toute sorte d’informations et de liens qui sont reproduits dans tous les fichiers, mais qui ne présentent aucun intérêt pour ce que je veux en faire, puisqu’ils ne font pas partie du texte adopté en lui-même. Je vais donc les supprimer.

La méthode que j’utilise a l’avantage d’être très rapide, même si elle n’est pas très précise : je vais supprimer toutes les lignes qui sont répétées très souvent (comme j’ai environ 830 fichiers, j’ai estimé qu’une ligne répétée plus de 800 fois sur l’ensemble du corpus était inutile). On voit bien les problèmes que cette méthode peut poser : certains passages qui font véritablement partie du texte adopté peuvent être répétés très souvent (on pense par exemple à une ligne comme « Article 1er »). Dans la mesure où je m’intéresse au « vrai » contenu et pas à tout ce péritexte, j’accepte le risque (en fait, la ligne « Article 1er » n’apparaît qu’un peu plus de 700 fois, elle est donc conservée).

Voici donc mon script, qui suit une logique simple : je commence par parcourir tous les textes, en comptant combien de fois chaque ligne apparaît. Je reprends alors les textes, en supprimant toutes les lignes qui apparaissent plus de 800 fois (naturellement, je pourrais fixer un autre nombre selon le nombre de fichiers à traiter, ou même le calculer à la volée). Quand on fait ce genre de manipulations, il est prudent de ne pas altérer les fichiers initiaux tant qu’on n’est pas sûr du résultat obtenu, j’enregistre donc les textes modifiés dans un nouveau répertoire que j’appelle textes_propres.

#! /usr/bin/env python3
import os, sys

# On récupère toutes les lignes
lignes = {}
for fichier in os.listdir("textes"):
    print(fichier)
    with open(os.path.join("textes", fichier)) as f:
        for l in f.readlines():
            if l in lignes:
                lignes[l] += 1
            else:
                lignes[l] = 1
# On supprime les lignes inutiles
# Les nouveaux fichiers sont écrits dans le répertoire textes_propres
# Si ce répertoire n'existe pas, on le crée
if not os.path.exists("textes_propres"):
    os.mkdir("textes_propres")
for fichier in os.listdir("textes"):
    print("Suppression dans %s" % fichier)
    with open(os.path.join("textes", fichier)) as f:
        gardees = [] # On crée une liste des lignes conservées
        for l in f.readlines():
            if not lignes[l] > 800:
                gardees.append(l)
        with open(os.path.join("textes_propres", fichier), "w") as fw:
            fw.writelines(gardees) # On écrit les lignes conservées dans un nouveau fichier
Script nettoyeur.py

 

Voir le script sur Github

,,,,