Accueil || BàO 1 || BàO 2 || BàO 3 || BàO 4 || Analyse

La première boîte à outils permet d'extraire les titres et descriptions des différents articles issus des différentes rubriques. Nous nous sommes intéressés aux rubriques: "Europe" "Culture" et "Société" de l'année 2017.


	#/usr/bin/perl
	<<DOC;
	JANVIER 2018
	 usage : perl parcours-arborescence-fichiers repertoire-a-parcourir rubrique
	 Par exemple : perl parcours-arborescence-fichiers-2018.pl 2017 3208
	 Le programme prend en entree le nom du repertoire contenant les fichiers a traiter et le "nom" de la rubrique a traiter
	DOC
	#-----------------------------------------------------------
	my $rep="$ARGV[0]";
	# On affecte la valeur de premier argument à entrer pour appeler le programme à $rep, il faudra entrer un répertoire
	my $rubrique="$ARGV[1]";
	# On affecte la valeur de deuxième argument à la rubrique, cette variable nous servira à ne sélectionner que certains fichiers de notre répertoire
	my%dico;
	open(FILEOUT, ">:encoding(utf8)", "$rubrique.txt"); #le premier fichier de sortie est en utf-8, et au format txt
	open(FILEOUT2, ">:encoding(utf8)", "$rubrique.xml"); #le deuxième fichier de sortie est lui au format xml

	# on s'assure que le nom du repertoire ne se termine pas par un "/"
	$rep=~ s/[\/]$//; # le répertoire peut avoir n'importe quel nom

	my $codage="utf-8"; #on entre le codage dans une variable pour pouvoir l'appeler dans le fichier xml que nous créons ensuite

	print FILEOUT2 "<?xml version=\"1.0\" encoding=\"$codage\" ?>\n";
	# première ligne d'un fichier xml bien formé avec la version et l'encodage
	print FILEOUT2 "<PARCOURS>\n"; # balise racine du fichier xml
	print FILEOUT2 "<NOM> Audrey GOMBAULT et Léo DE SOUSA, 2017-2018</NOM>\n"; # balise d'information
	print FILEOUT2 "<FILTRAGE>\n"; # annonce du début de extraction

	#----------------------------------------
	&parcoursarborescencefichiers($rep);	# on lance la recursion.... et elle se terminera après examen de toute l'arborescence
	# la fonction est décrite plus bas, le bloc ci-dessous ne sera parcouru qu'une fois que nos fichiers textes et xml seront pleins
	print FILEOUT2 "</FILTRAGE>\n"; #on referme les balises
	print FILEOUT2 "</PARCOURS>\n";
	close(FILEOUT2); # on ferme le fichier de sortie xml

	#----------------------------------------
	exit;
	#----------------------------------------------
	sub parcoursarborescencefichiers {
	    my $path = shift(@_);
	    # on sélectionne tout
	    opendir(DIR, $path) or die "can't open $path: $!\n"; # si on peut ouvrir le chemin on continue, sinon message d'erreur
	    my @files = readdir(DIR); # variable file reçoit la direction
	    closedir(DIR);
	    foreach my $file (@files) {
			next if $file =~ /^\.\.?$/;
			$file = $path."/".$file;
			if (-d $file) {
				print "<NOUVEAU REPERTOIRE> ==> ",$file,"\n"; #pour tout nouveau fichier trouvé, on indique où l'on se trouve
				&parcoursarborescencefichiers($file);	#recurse!
				print "<FIN REPERTOIRE> ==> ",$file,"\n";
			}
			if (-f $file) {
	            if ($file =~ /$rubrique.+\.xml$/) { # si le fichier trouvé appartient à la rubrique recherchée on continue
	                print "<",$i++,"> ==> ",$file,"\n"; # le compteur i est le nombre de jours extraits
	                my $texte="";
	                open(FILEIN, "<:encoding($codage)", $file);

	                while (my $ligne=<FILEIN>) {
	                    chomp $ligne;
	                    $ligne =~ s/\r//g;
	                    $texte = $texte . $ligne ;

	                }
	                $texte =~ s/> +</></g;
	    						$texte =~ s/&#38;#39;/'/g; # on nettoie une première fois de caractères non désirés
	                while ($texte =~ m/<item>.*?<title>(.+?)<\/title>.*?<description>(.+?)<\/description>.*?<\/item>/g){
	                  #on parcourt le fichier xml pour retrouver le motif
	                    my $titre = $1;
	                    my $description=$2;
	                    #print $titre;
	                    #$description =~ s/&lt;.+?&gt;$//g;
	                    if (!(exists $dico{$titre})){

	                        my ($titre_propre,$description_propre) = &nettoyage($titre,$description);
	                        # on affecte aux variables "propre" le résultat d'un passage par la fonction nettoyage définie plus bas
	                        print FILEOUT "$file\n$titre_propre\n$description_propre\n\n";
	                        # on écrit le nom de fichier, le titre nettoyé et la description nettoyée dans le document texte

	                        print FILEOUT2 "<item id=\"$file\"><titre>$titre_propre</titre>\n<description>$description_propre</description></item>\n";
	                        # on insère les mêmes données entre balises pour former le document XML

	                        $dico{$titre}=1;
							# il faut aussi creer le fichier XML...
	                        }
	                }
	                close FILEIN;
	            }
	        }
			}

	}
	#----------------------------------------------

	sub nettoyage {
	    my $var1 = shift(@_);
	    my $var2 = shift(@_);
	    $var1=~s/&lt;.+?&gt;//g;
	    $var1.=".";# nettoyage a completer...
	    $var2=~s/&lt;.+?&gt;//g; # nettoyage a completer...
	    return $var1,$var2 ;
	}


	# segmenter le fichier avant de l'envoyer a cordial, d'où l'utilite de tokenizer
	#perl tokenise-utf8.pl texteaetiqueter.txt | ./tree-tagger.exe(mac) french-utf8.par -lemma -token -no-unknown > resultat-token.txt
	# attention aux quotes dans le programme de tokenisation

	# perl treetagger2xml-utf8.pl resultat-token.txt "utf8"
	# necessite de unicode string library


			

Nous obtenons en sortie deux documents pour chaque rubrique, un document texte et un document XML :

DOCUMENTS TXT :

Les documents texte des rubriques 3214 (Europe), 3246 (Culture) et 3224 (Société) sont constitués du nom du fichier dont les titres et descriptions sont extraits, du titre et de la description. Le nom du fichier est ici en option, seulement pour faire beau, nous ne le mettons pas dans la Boîte à Outils 2 pour ne pas brusquer Cordial.

DOCUMENTS XML :

Les documents texte des rubriques 3214 (Europe), 3246 (Culture) et 3210 (Société) sont constitués du nom du fichier dont les titres et descriptions sont extraits dans la balise item, en "id", du titre et de la description entre balises propres. Le nom du fichier sera remplacé par un compteur de fichier dans la Boîte à Outils 2 pour afficher dans le tableau en Boîte à Outils 4.

haut de page