Extraction du texte BAO1

Description

L'extraction des titres et descriptions est réalisée grâce à deux fonctions principales :


  • Repérer, en utilisant regex, les titres et les descriptions qui se trouvent entre les balises <titre></titre> et <description></description>.

  • Une partie du script perl pour l'extraction sur un seul fichier avec expression régulière :

                                            
    open my $input, "<:encoding(UTF-8)",$file;
    $/=undef; # par défaut cette variable contient \n
    my $ligne=<$input> ;
    close($input);
    # capter tous les éléments entre <titre></titre> et <description></descrptions>
    # grâce aux () qui entresitre les données qu'on peut récupérer avec $1 et $2
    # utiliser .+? pour ne pas être gourmand arrêter la capture juste avant </titre> et </descrption>
    # L'indication /gs est pour prendre tous les items et ne pas s'arrêter au premier
    while ($ligne=~/<item><title>(.+?)<\/title>.+?<description>(.+?)<\/description>/gs) {
        my $titre=&nettoyage($1);
        my $description=&nettoyage($2);
        # ne pas prendre en compte les éléments qui se répètent
        if (!(exists $dico_des_titres{$titre})) { 
            $dico_des_titres{$titre}=$description ;
            # écire dans le fichier .txt
            print $output "$titre \n";
            print $output "$description \n";
            print $output "----------------------------\n";
            # écrire dans le fichier .xml
            print $output2 "<item><titre>$titre</titre><description>$description</description>\n";
        }
    }
                                            
                                        
  • parcourir l'ensemble de l'arborescence RSS grâce à une fonction factorielle et faire l'extraction sur chaque fil RSS.
  • La fonction dans le script perl pour parcourir l'arborescence :

                                        
    sub parcoursarborescencefichiers {
        my $path = shift(@_);
        my $rubrique = shift(@_);
        my $output = shift(@_);
        my $output2 = shift(@_);
        my %dico_des_titres = shift(@_);
        # ouvrir le dossier et lire le contenu dedans 
        opendir(DIR, $path) or die "can't open $path: $!\n";
        my @files = readdir(DIR);
        closedir(DIR);
        # parcourir chaque élément
        # !! important, trier tous les sous-dossiers et fichiers en ordre, car Perl ne traite pas forcément les fichiers en ordre
        foreach my $file (@files) {
            next if $file =~ /^\.\.?$/;
            $file = $path."/".$file;
            # si c'est un dossier, on conitue le parcours
            if (-d $file) {
                print "On entre dans le REPERTOIRE : $file \n";
                &parcoursarborescencefichiers($file,$rubrique,$output,$output2,%dico_des_titres);	#recurse!
                print "On sort du REPERTOIRE :  $file \n";
            }
            # si c'est un fichier, on lit le fichier
            if (-f $file) {
                # fonction d'extraction présentée ci-dessus
            }
        }
    }
                                            
                                        
                                    
    Pour traiter les 3 rubriques en une seule fois, j'ai enregitré les trois rubriques dans une liste, et inséré la fonction de parcours-arborescence et la fonction d'extraction dans la boucle qui parcourt cette liste de rubriques. Ce traitement est aussi réalisé dans le script python, l'exemple montré ci-dessous est celui de perl.
                                    
    #obtenir l'extraction pour trois rubriques, en parcourant la liste des rubriques
    foreach my $r (@RUBRIQUES){
        # créer un dictionnaire vide qui enregistre les informations distingues (sans répétition) pour chaque rubrique
        my %dico_des_titres=();
        # créer un nouveau fichier .txt et un nouveau fichier .xml qui contient le numéro de rubrique 
        open my $output, ">:encoding(UTF-8)","$r-corpus-titre-description.txt";
        open my $output2, ">:encoding(UTF-8)","$r-corpus-titre-description.xml";
        print $output2 "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<corpus>\n";
        # parcourir l'arborescence et trouver les informations dans la rubrique ciblée
        # en prenant en compte les paramètres nom de l'arborescence, le numéro de rubrique, le fichier .txt, le fichier .xml, 
        # et le dictionnaire qui mémorise les informations déjà enregistrées
        &parcoursarborescencefichiers($rep,$r,$output,$output2,%dico_des_titres);
        print $output2 "</corpus>\n";
        close $output;
        close $output2;
    }
                                        
                                    
                                

    Résultats

    Commande Script
    perl parcours-arborescence-fichiers-BAO1-2022.pl ../path/to/corpus/2021 3210 3244 3246Voir le script perl en entier
    pyhon3 parcour-arborescence-ficheirs_BAO1.py ../path/to/corpus/2021 3210 3244 3246Voir le script python en entier