#======================================================
#
PROJET NUAGE
# Le programme du parcours de l'arborescence
# Auteur: Zahir MAAFA
# Derniere mise à jour: 25 mai 2006
#=====================================================
#!/usr/bin/perl
use warnings;
use diagnostics;
use strict;
<<DOC;
Usage: perl projet_n.pl
<nom-du-repertoire> <chemin à
Treetagger.exe> <chemin à AltovaXSLT.exe>
Le programme prend en entrée le nom du répertoire contenant les fichiers à traiter
et les chemins d'acces à treetagger.exe et AltovaXSLT.exe
et produit en sortie une arborescence des fichiers résultats des traitements
DOC
#==== LE PROGRAMME PRINCIPAL ======================
#======================= declaration des variables
#=========================== caracteres spéciaux =========================
my
$cs="ƒŒœµÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöùúûüýþÿŸ";
#=========================================================================
my $ctt=$ARGV[1];# chemin d'acces au dossier contenant Treetagger Windows
my $cpxsl=$ARGV[2];# chemin d'accés au processeur xslt
my $rep="$ARGV[0]"; # le repertoire en entrée
my $nbase; # le niveau des repertoires à regrouper
my $i=0;
$rep=~s/[\/]$//; # supprimer le slash final
$ctt=~s/(.*)\/bin\/tree-tagger\.exe.*/$1/;
$ctt=~s/\/cygdrive\/c/c:/;
$cpxsl=~s/(.*)\/AltovaXSLT\.exe.*/$1/;
$cpxsl=~s/\/cygdrive\/c/c:/;
choix(); # fixer les Paramètres
#=================== le parcours de l'arbre
mkdir 'corpus_res';
&parcoursarborescencefichiers($rep,'corpus_res');
# Génération des graphes
&gengraphe("corpus_res");
exit;
#=========== FIN DU PROGRAMME PRINCIPAL ===============
#======================================================
# Choisir la maniere de regrouper les fichiers
#======================================================
sub choix
{
print "\n\n\n\n==============================================\n";
print "
\n
PROJET
NUAGE
\n";
print "\n==============================================\n";
print "\n Veuillez choisir un regroupement des fichiers:\n\n";
print "\n1- regroupement par l'heure d'arrivée. \n";
print "\n2- regroupement par jour. \n";
print "\n3- regroupement par mois. \n\n";
$nbase=<STDIN>;
$nbase--;
}
#======================================================
# La procedure de parcours: parcoursarborescencefichier
#======================================================
sub parcoursarborescencefichiers {
#======== Déclaration des variables===========
my $path = $_[0];
my $pathr=$_[1];
my $f;
my $ligne;
my $file1;
my $file;
my $i=0;
my $DUMPFULL1=""; # le flux de sortie
#=============================================
opendir(DIR, $path) or die "can't open $path: $!\n";
my @files = readdir(DIR);
closedir(DIR);
foreach my $file (@files) {
next if $file =~ /^\.\.?$/;
# mettre le nom du repertoirre dans $file1
$file1 = $path."/".$file;
if (-d $file1) { my $pathr1= $pathr;
if ( niveau($file1)> $nbase)
{
$pathr1= $pathr."/".$file;
mkdir $pathr1;
}
&parcoursarborescencefichiers($file1,$pathr1);
#recurse!
}
if (-f $file1) {
$DUMPFULL1="";
# lecture du contnu du fichier xml en entrée
#les fichiers à traiter commence par "0," ou par "AFP-stories"
if (($file=~/^0,.+xml/) or ($file=~/AFP-stories.*xml/))
{
print $file."\n";
$i++;
if (!open (FR,">".$pathr."/"."corpus_tag$i.txt"))
{ die "Pb a l'ouverture du corpus résultat"};
# Attention au codage
if ($file1=~/AFP/)
{
open (FPUT,'<:encoding(utf8)',"$file1");
}
else
{
open (FPUT,'<:encoding(iso-8859-1)',"$file1");
}
$f='';
while (defined( $ligne=<FPUT>))
{
$ligne=~s/\n/ /;
$f=$f.$ligne;
}
# extraire les contenus des balises description
while ($f=~s/<description>([^<]*)<\/description>//)
{
$DUMPFULL1=$DUMPFULL1.$1." "; # séparer par un espace pour
eviter de coller deux mots
}
while ($DUMPFULL1=~m/&#([0-9]+);/)
{$DUMPFULL1=~s/&#([0-9]+);/chr($1)/ge;}
$DUMPFULL1=~s/([^a-zA-Z0-9$cs])/\n$1\n/g; # un mot par ligne
$DUMPFULL1=~s/\s+/\n/g;
$DUMPFULL1=~s/\n\n+/\n/g;
print FR $DUMPFULL1;
close(FPUT);
# Étiquetage
system("$ctt/bin/tree-tagger.exe -token -lemma -no-unknown
$ctt/lib/french.par $pathr/corpus_tag$i.txt
$pathr/corpus_tag_et$i.txt");
# Recherche des noms et adjectifs
system ("perl trouve_terme_mod.pl
$pathr/corpus_tag_et$i.txt patron-2.txt >
$pathr/corpus_tag_res_ex$i.txt");
}
}
}
if ($i>0)
{
regrouper("$pathr/corpus_tag","$pathr/corpus_T.txt");
regrouper("$pathr/corpus_tag_et","$pathr/corpus_E.txt");
rim("$pathr/corpus_tag_et","$pathr/corpus_IM.txt"); # creation du fichier des fenetres
regrouper("$pathr/corpus_tag_res_ex","$pathr/corpus_XT.txt");
system ("/bin/rm.exe $pathr/corpus_tag*");
}
}
#===================================================
# permet de regrouper les fichiers intermédiaires
#===================================================
sub regrouper
{
my $i=1;
my $fich=$_[0];
my $line;
open (RH,">>"." $_[1]");
while (open(GR,"<"."$fich$i.txt"))
{
while ( $line=<GR>)
{
print RH $line;
}
$i++;
close (GR);
}
close(RH);
}
#================================================
# Générer le fichier des fenêtres
#===============================================
sub rim
{
my $i=1;
my $fich=$_[0];
my $line;
while (open(GR,"<"."$fich$i.txt "))
{
system("perl fich_fenetres.pl $fich$i.txt $_[1]");
$i++;
close (GR);
}
}
#=========================================================
# à partir d'un dossier donné calcule le nombre
# des sous dossiers à parcourir pour ateindre les fils XML
#==========================================================
sub niveau
{
my $pt;
my $jn;
my $in=0;
$pt=$_[0];
while ( -d $pt)
{
$in++;
print "$pt"."\n";
opendir(DIR, $pt) or die "can't open $pt: $!\n";
my @fich = readdir(DIR);
$jn=0;
while ($fich[$jn]=~/^\..*/) {$jn++}
$pt=$pt."/"."$fich[$jn]";
closedir(DIR);
}
return $in;
}
#=====================================================
# Génération des graphes de BO4 et de l’information
mutuelle
#=====================================================
sub gengraphe {
#======== Déclaration des variables===========
my $path = $_[0];
#=============================================
opendir(DIR, $path) or die "can't open $path: $!\n";
my @files = readdir(DIR);
closedir(DIR);
foreach my $file (@files) {
next if $file =~ /^\.\.?$/;
# mettre le nom du repertoire dans $file
$file = $path."/".$file;
if (-d $file) {
&gengraphe($file);
}
if (-f $file) {
# le graphe des listes NOM adjectif (BO4)
if ($file=~/corpus_XT\.txt/)
{
system ("perl patron2graphm.pl $file $path");
system ("\'$cpxsl\'/AltovaXSLT.exe -xml $path/patron-graphml.xml -xsl
GraphML2Pajek.xsl -out $path/corpus_P.net");
system ("/bin/unix2dos.exe $path/corpus_P.net");
}
#========= le gaphe de l'information mutuelle
if ($file=~/corpus_IM\.txt/)
{
system ("/bin/unix2dos.exe $file");
system ("perl FaitIndexDeFenetres.pl $file >
$path/fich.index.xml");
system ("perl FaitCooccurrencesDansFenetre.pl $file \'A|N\'
20 3 > $path/fcooc.xml ");
system ("perl CooccurrencesDansFenetre2IM.pl $path/fich.index.xml
$path/fcooc.xml 5 > $path/fich_IM.xml ");
system ("perl IM2GraphML.pl $path/fich_IM.xml 8 9.0
>$path/grIM.xml ");
system ("\'$cpxsl\'/AltovaXSLT.exe -xml $path/grIM.xml -xsl
GraphML2Pajek1.xsl -out $path/corpus_IM.net");
system ("/bin/unix2dos.exe $path/corpus_IM.net");
}
}
}
}