1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242
| #!/usr/bin/perl
use strict;
use warnings;
use utf8;
use File::Spec; # Permet une meilleure gestion des noms des chemins sous tous les OS
use Data::Dumper qw(Dumper);
#==============================================================================================
# le but de ce tp est de prendre 5 documents text
#(contenat 5 domaine differents ) est les classifier selon leur domaine
# pour une solusion on propopse de creer 5 dic contenant des termes specifique a chaque domaines
# et calculer la distance entre chaque dic (vect de mots) et fichier text(vecteur de mots)
# et enfin prendre la valeur maximal
#================================================================================================
ActiverAccents();
my $RepBase = 'E:/_SITE/FondsDocumentaire/Spinoza';
my @Docs = ( 'ETH.txt', 'TRE.txt', 'TTP.txt', 'Citadelle.txt' );
my $DicoEth = File::Spec->catfile( $RepBase, 'DicoEth.txt' );
my $DicoAnt = File::Spec->catfile( $RepBase, 'DicoAnt.txt' );
my $DicoPol = File::Spec->catfile( $RepBase, 'DicoPol.txt' );
my $MotDico = File::Spec->catfile( $RepBase, 'MotDico.txt' );
my $fh_Eth;
open $fh_Eth, '<:utf8', $DicoEth or die("Impossible ouvrir $DicoEth");
my @dic_Ethique = <$fh_Eth>;
close $fh_Eth;
my $NbEth = scalar(@dic_Ethique);
#print $fh_Resul "@dic_Ethique\n";
my $fh_Ant;
open $fh_Ant, '<:utf8', $DicoAnt or die("Impossible ouvrir $DicoAnt");
my @dic_Anthropologie = <$fh_Ant>;
close $fh_Ant;
my $NbAnt = scalar(@dic_Anthropologie);
#print $fh_Resul "@dic_Anthropologie\n";
my $fh_Pol;
open $fh_Pol, '<:utf8', $DicoPol or die("Impossible ouvrir $DicoPol");
my @dic_Politique = <$fh_Pol>;
close $fh_Pol;
my $NbPol = scalar(@dic_Politique);
#print $fh_Resul "@dic_Politique\n";
# dic pour pour 3 domaines :
#my @dic_Ethique = ( "amour", "haine", "joie", "tristesse", "affections", "passions" );
#my @dic_Anthropologie = ( "amour", "haine", "entendement", "hommes", "fléau" );
#my @dic_Politique = ( "amour", "paix", "hommes", "passions", "vice", "réprimander" );
my $FicResultat = File::Spec->catfile( $RepBase, 'Resultat.txt' );
my $FicDeduction = File::Spec->catfile( $RepBase, 'Deduction.txt' );
my $fh_Resul;
my $fh_Deduc;
open $fh_Resul, '>:utf8', $FicResultat or die("Impossible ouvrir $FicResultat");
open $fh_Deduc, '>:utf8', $FicDeduction or die("Impossible ouvrir $FicDeduction");
my $fh_Dico;
open $fh_Dico, '<:utf8', $MotDico or die("Impossible ouvrir $MotDico");
my @TabMots = <$fh_Dico>;
close $fh_Dico;
#print $fh_Resul "@TabMots\n";
#my @TabMots = (
# "amour", "haine", "joie", "tristesse", "affections", "passions",
# "entendement", "hommes", "fléau",
# "paix", "vice", "réprimander",
#);
my @nom_recuperer = ();
foreach my $Document (@Docs) {
print $fh_Resul "\n\n=============================================";
print $fh_Resul "Traitement du fichier $Document :\n\n";
my $In_Fic = File::Spec->catfile( $RepBase, $Document );
my $fh_Entree;
open $fh_Entree, '<:utf8', $In_Fic
or die("Impossible ouvrir $In_Fic");
my %Comptage = ();
my $NbLigne;
while ( my $Ligne = <$fh_Entree> ) {
$NbLigne++;
foreach my $Mot (@TabMots) {
chomp $Mot;
if ( $Ligne =~ $Mot ) {
$Comptage{$Mot}++;
#print $fh_Resul "$Mot a la ligne $NbLigne\n";
}
}
}
#print $fh_Resul "\n\n";
while ( my ( $Mot, $Nb ) = each(%Comptage) ) {
print $fh_Resul "Le mot '$Mot' est present $Nb fois\n";
#remplir les mots trouver dans le tableau[] nom_recuperer
push @nom_recuperer, $Mot;
}
#print $fh_Resul "@nom_recuperer\t\n";
#comparez les mots avec les dico
my $Eth = compare_with_dic_Ethique($Document);
my $Ant = compare_with_dic_Anthropologie($Document);
my $Pol = compare_with_dic_Politique($Document);
print $fh_Deduc "\n\nDéduction :\n$Document est Ethique à $Eth%, Anthropologique à $Ant% et Politique à $Pol%\n\n";
close $fh_Entree;
}
close $fh_Resul;
close $fh_Deduc;
#################################
sub compare_with_dic_Ethique {
my ( $Document ) = @_;
print $fh_Resul "\n\nComparaison de $Document avec dic_Ethique\n ";
my $count = 0;
my %hash;
@hash{@nom_recuperer} = 0 .. $#nom_recuperer;
for my $val (@dic_Ethique) {
chomp $val;
if ( exists $hash{$val} ) {
print $fh_Resul "Le mot $val est présent dans dic_Ethique la position $hash{$val}.\n";
$count += 1;
} else {
print $fh_Resul "---->$val n'est pas dans dic_Ethique.\n";
}
}
my $pourcentage_appr = ( $count * 100 ) / $NbEth;
print $fh_Resul "\nLe nombre de mots du fichier $Document présents dans le dic_Ethique est $count ===>
le pourcentage par raport au dic_Ethique = $pourcentage_appr %";
return $pourcentage_appr;
}
sub compare_with_dic_Anthropologie {
my ( $Document ) = @_;
print $fh_Resul "\n\nComparaison de $Document avec dic_Anthropologie\n ";
my $count = 0;
my %hash;
@hash{@nom_recuperer} = 0 .. $#nom_recuperer;
for my $val (@dic_Anthropologie) {
chomp($val);
if ( exists $hash{$val} ) {
print $fh_Resul "Le mot $val est présent dans dic_Anthropologie la position $hash{$val}.\n";
$count += 1;
} else {
print $fh_Resul "---->$val n'est pas dans dic_Anthropologie.\n";
}
}
my $pourcentage_appr = ( $count * 100 ) / $NbAnt;
print $fh_Resul "\nLe nombre de mots du fichier $Document présents dans le dic_Anthropologie est $count ===>
le pourcentage par raport au dic_Anthropologie = $pourcentage_appr %";
return $pourcentage_appr;
}
sub compare_with_dic_Politique {
my ( $Document ) = @_;
print $fh_Resul "\n\nComparaison de $Document avec dic_Politique\n ";
my $count = 0;
my %hash;
@hash{@nom_recuperer} = 0 .. $#nom_recuperer;
for my $val (@dic_Politique) {
chomp($val);
if ( exists $hash{$val} ) {
print $fh_Resul "Le mot $val est présent dans dic_Politique la position $hash{$val}.\n";
$count += 1;
} else {
print $fh_Resul "---->$val n'est pas dans dic_Politique.\n";
}
}
my $pourcentage_appr = ( $count * 100 ) / $NbPol;
print $fh_Resul "\nLe nombre de mots du fichier $Document présents dans le dic_Politique est $count ===>
le pourcentage par raport au dic_Politique = $pourcentage_appr %";
return $pourcentage_appr;
}
#savoir le plus proche dictionaire a notre text-i- (le plus similaire ==>qui a un % elevé)
#==============================================================
# Pour avoir les accents sur la console DOS
# http://perl.developpez.com/faq/perl/?page=Terminal#AccentsDOS
#==============================================================
sub ActiverAccents {
my $encodage;
# Windows
if ( lc($^O) eq 'mswin32' ) {
eval {
my ($codepage) = ( `chcp` =~ m/:\s+(\d+)/ );
$encodage = "cp$codepage";
foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
binmode $h, ":encoding($encodage)";
}
};
}
else {
$encodage = `locale charmap`;
eval {
foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
binmode $h, ":encoding($encodage)";
}
};
}
return $encodage;
}
#Sinon :
#ü \x81 à \x85 è \x8A
#é \x82 ç \x87 ï \x8B
#â \x83 ê \x88 î \x8C
#ä \x84 ë \x89
=pod
Alors :
1-Jai créer 5 dictionnaires (avec seulement 3 mots pour un début )
2-Un tableau de mots qui contient tous les mots de ces 5 dictionnaires
3-je récupère les mots dun fichier texte(dans un tab @nom_recuperer)
4- je compare chaque dictionnaire avec le tableau récupèré et en calculent un pourcentage de similarité
********************************
A ce stade la jai confronté deux pb
A comment puis-je récupérer le pourcentage calculé dans chaque fonction - getVal dans java par exemple - pour faire la comparaison exp(si le pourcentage:
compare_with_dic_bio() > compare_with_dic_science() alors ce document appartient au domaine bio)
et la deuxième chose c'est que je veut généraliser le pg pour travailler avec plusieurs fichiers texte(ouverture et recherche ..)
pour enfin de compte les classifier selon leur domaines |
Partager