IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

comment trouver plusieurs mots dans un fichier text


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 74
    Points : 67
    Points
    67
    Par défaut comment trouver plusieurs mots dans un fichier text
    Bonjours
    Voilà, j'ai un fichier texte là où je veux chercher des mots bien spécifiques (sport, foot, ...)
    Et les remplir dans un tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     
    use strict;
    use warnings;
    use Data::Dumper qw(Dumper);
    use 5.010;
    use switch;
    $|=1;
     
    my $file = 'test1.txt';
    my $file2 = 'test2.txt';
    my @mots = ();
     
    open(INPUT, $file) or die("Input file $file not found.\n");
     
    # Recheche .
    	while(my $line = <INPUT>) {
    		if($line =~ /(sport*)/ || $line =~ /(joue...*)/ || $line =~ /(foot...)/) {
    			print " mots :'$1'\n";
    			print "\n\n";
    			push @mots, $1;
                say Dumper \@mots;
     
    		}
    	}
     
     
     
     
     
    	print "\n\n";
    	print "le document un contient les mots suivant \n ";
    	foreach my $n (@mots) {
        say $n  ;
    }
     
     
     
    	close(INPUT);
    Le problème c'est que j'obtiens que la première partie (sport ) et si je remplace || par && j'obtiens rien


    en essayant avec switch

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    my $line = <INPUT>;
    	switch($line){
    		case 1 {if($line =~ /(sport)/ ) {
    			print " mots :'$1'\n";
    			print "\n\n";
    			push @mots, $1;
                say Dumper \@mots;
     
    		}}
              case 2 {if($line =~ /(foot*)/ ) {
    			print " mots :'$1'\n";
    			print "\n\n";
    			push @mots, $1;
                say Dumper \@mots;
     
    		}}                         
    	}
    mais j'obtiens rien
    Merci.

    Modification par lolo78: j'ai retiré le préfixe Perl 6 du titre de ton post, car il ne concerne pas Perl 6, mais bien Perl 5.

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 74
    Points : 67
    Points
    67
    Par défaut essai
    Avec cette façon le pg marche bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    # Recheche in file.
    	while(my $line = <INPUT>) {
    		if($line =~ /(sport)/) {
    			print "First match: '$1'\n";
    			print "\n\n";
    			push @mots, $1;
                say Dumper \@mots;
     
    		}
    		if($line =~ /(foot)/) {
    			print "First match: '$1'\n";
    			print "\n\n";
    			push @mots, $1;
                say Dumper \@mots;
     
    		}
    	}
    Mais est ce que je peux utiliser qu'une seul condition (supposons que je cherche 25 mots dans un fichier texte, donc sera inutile de déclarer 25 if {})

  3. #3
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour,
    Lorsque tu as ce genre de pb il te faut essayer de faire en sorte que les mots recherchés ne soient pas écrits en dur dans le programme, sinon chaque fois que tu fais une nouvelle recherche il faut modifier le programme !!
    Pour éviter une forêt d'ifs on peut mettre les mots à rechercher dans un tableau.

    Petit exemple vite fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
    use utf8;
    use File::Spec;														# Permet une meilleure gestion des noms des chemins sous tous les OS
     
    ActiverAccents();
     
    # l'argument prend en compte un fichier texte et une suite de mots à rechercher dans le texte
    my $Fichier = shift;
    my @TabMots = @ARGV;
    if (!$Fichier || !@TabMots ){
    	print "Il faut donner un nom de fichier en entrée suivi des mots recherchés\n";
    	print "Ex : perl Ethique.pl Ethique_APPUHN.txt Amour Joie Haine Tristesse\n";
    	exit;
    }
     
    my $RepBase = 'E:/_SITE/FondsDocumentaire/Spinoza';
    my $In_Fic  = File::Spec->catfile( $RepBase, $Fichier );
     
    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) {
    		if ($Ligne =~ $Mot) {
    			$Comptage{$Mot}++;
    			print "$Mot à la ligne $NbLigne\n";
    		}
    	}
    }
    print "\n\n";
    while( my ($Mot,$Nb) = each(%Comptage) ) {
       print "Le mot '$Mot' est présent $Nb fois\n";
    }
    close $fh_Entree;
     
     
     
    #==============================================================
    # 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
    E:\_SITE\FondsDocumentaire\Spinoza>perl Ethique.pl
    Il faut donner un nom de fichier en entrée suivi des mots recherchés
    Ex : perl Ethique.pl Ethique_APPUHN.txt Amour Joie Haine Tristesse

    E:\_SITE\FondsDocumentaire\Spinoza>perl Ethique.pl Ethique_APPUHN.txt Amour Joie Haine Tristesse

    ...
    ...
    Amour à la ligne 2299
    Haine à la ligne 2299
    Tristesse à la ligne 2312
    Amour à la ligne 2338
    Joie à la ligne 2338
    Haine à la ligne 2338
    Joie à la ligne 2371
    Joie à la ligne 2376
    Tristesse à la ligne 2376
    Tristesse à la ligne 2381
    Amour à la ligne 2384
    Tristesse à la ligne 2387
    Amour à la ligne 2395
    Amour à la ligne 2397
    Amour à la ligne 2400
    Amour à la ligne 2401
    Joie à la ligne 2439
    Joie à la ligne 2468
    Amour à la ligne 2471
    Joie à la ligne 2471
    Amour à la ligne 2474
    Amour à la ligne 2476
    Amour à la ligne 2479
    Joie à la ligne 2479
    Amour à la ligne 2487
    Amour à la ligne 2493
    Amour à la ligne 2495
    Amour à la ligne 2498
    Amour à la ligne 2500
    Amour à la ligne 2503
    Amour à la ligne 2506
    Joie à la ligne 2506
    Amour à la ligne 2509
    Amour à la ligne 2511
    Amour à la ligne 2527
    Amour à la ligne 2554


    Le mot 'Haine' est présent 69 fois
    Le mot 'Joie' est présent 130 fois
    Le mot 'Amour' est présent 93 fois
    Le mot 'Tristesse' est présent 124 fois

    E:\_SITE\FondsDocumentaire\Spinoza>
    NB: Ici les n° de ligne sont en fait des n° de paragraphe (plusieurs lignes se terminant par un \n).

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 74
    Points : 67
    Points
    67
    Par défaut Classification de documents
    Je vous remercie infiniment
    J’ai base sur le code que vous m’avez fournis pour compléter le travaille
    Alors :
    1-J’ai 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 d’un 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 j’ai 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
    Vraiment j’apprécie beaucoup votre aide Mr dmganges


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    #!/usr/bin/perl
    use strict;
    use warnings;
    use utf8;
    use File::Spec;
    use Data::Dumper qw(Dumper)
      ;    # Permet une meilleure gestion des noms des chemins sous tous les OS
     
    #==============================================================================================
    # 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
    #================================================================================================
     
    # dic pour 5 domaines
    my @dic_Sport   = ( "jouer",       "foot",        "but" );
    my @dict_sport  = ( "jouer",       "foot",        "but" );
    my @dic_bio     = ( "moleculaire", "cellule",     "organisme" );
    my @dic_science = ( " science",    "correlation", "conscience" );
    my @dic_cuisine = ( "fruits",      "pate",        "patisserie" );
    ActiverAccents();
     
    # l'argument prend en compte un fichier texte et une suite de mots à rechercher dans le texte
    my $Fichier = 'test2.txt';
    my @TabMots = (
    	"jouer",      "foot",        "but",      "fruits",
    	"pate",       "patisserie",  " science", "correlation",
    	"conscience", "moleculaire", "cellule",  "organisme"
    );
     
    my @nom_recuperer = ();
    if ( !$Fichier || !@TabMots ) {
    	print
    	  "Il faut donner un nom de fichier en entree suivi des mots recherches\n";
    	print
    	  "Ex : perl Ethique.pl Ethique_APPUHN.txt Amour Joie Haine Tristesse\n";
    	exit;
    }
     
    my $RepBase = 'D:\WorkSpace\eclips\programing';
    my $In_Fic = File::Spec->catfile( $RepBase, $Fichier );
     
    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) {
    		if ( $Ligne =~ $Mot ) {
    			$Comptage{$Mot}++;
    			print "$Mot a la ligne $NbLigne\n";
    		}
    	}
    }
    print "\n\n";
    while ( my ( $Mot, $Nb ) = each(%Comptage) ) {
    	print "Le mot '$Mot' est present $Nb fois\n";
     
    	#remplir les mots trouver dans le tableau[] nom_recuperer
    	push @nom_recuperer, $Mot;
    }
    print "@nom_recuperer\t\n";
     
    #comparez les mots  avce les 5 dic
     
    sub compare_with_dic_sport {
    	print "\ncomparaison text1 avec dic_sport\n ";
    	my $count = 0;
    	my %hash;
    	@hash{@nom_recuperer} = 0 .. $#nom_recuperer;
     
    	for my $val (@dic_Sport) {
    		if ( exists $hash{$val} ) {
    			print
    "le mots $val est present dans dic_sport   la position $hash{$val}.\n";
    			$count += 1;
    		}
     
    		# else {print "$val n'est pas dans dic_sport .\n";
    		#}
    	}
    	my $pourcentage_appr = ( $count * 100 ) / 3;
    	print
    " le nombre de mots du fichier text1 presents dans le dic_sport  est $count  ===> 
        le pourcentage parraport au dic_sport = $pourcentage_appr %";
    	return $pourcentage_appr;
    }
     
    sub compare_with_dic_bio {
    	print "\ncomparaison text1 avec dic_bio\n ";
    	my $count = 0;
    	my %hash;
    	@hash{@nom_recuperer} = 0 .. $#nom_recuperer;
     
    	for my $val (@dic_bio) {
    		if ( exists $hash{$val} ) {
    			print
    "\nle mots $val est present dans dic_bio   la position $hash{$val}.\n";
    			$count += 1;
    		}
     
    		# else {print "$val n'est pas dans dic_sport .\n";
    		#}
     
    	}
    	my $pourcentage_appr = ( $count * 100 ) / 3;
    	print
    " \nle nombre de mots du fichier text1 presents dans le dic_sport  est $count  ===> 
        le pourcentage parraport au dic_sport = $pourcentage_appr %";
    	return $pourcentage_appr;
    }
     
    sub compare_with_dic_science {
    	print "\ncomparaison text1 avec dic_science\n ";
    	my $count = 0;
    	my %hash;
    	@hash{@nom_recuperer} = 0 .. $#nom_recuperer;
     
    	for my $val (@dic_science) {
    		if ( exists $hash{$val} ) {
    			print
    "\nle mots $val est present dans dic_science   la position $hash{$val}.\n";
    			$count += 1;
     
    		}
     
    		# else {print "$val n'est pas dans dic_sport .\n";
    		#}
     
    	}
    	my $pourcentage_appr = ( $count * 100 ) / 3;
    	print
    " le nombre de mots du fichier text1 presents dans le dic_sport  est $count  ===> 
        le pourcentage parraport au dic_sport = $pourcentage_appr %";
    	return $pourcentage_appr;
    }
     
    my $pourcentage = 0;
     
    #appel de fonctions de comparaison
    compare_with_dic_sport();
    compare_with_dic_bio();
    compare_with_dic_science();
     
    #savoir le plus proche dictionaire a notre text-i- (le plus similaire ==>qui a un % elevé)
     
     
     
     
     
     
     
    close $fh_Entree;
     
    #==============================================================
    # 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

  5. #5
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour,

    Je suis pas certain d'avoir tout compris, mais ce qui suit devrait t'aider un peu...
    Je n'ai pas beaucoup commenté, mais comme je ne programme pas Sioux tu devrais comprendre.
    J'ai fait avec des fichiers perso, car sinon mon vieux neurone n'y arrive pas
    et j'ai essayé de conserver le maxi de ce que tu avais fait mais en utilisant un max de fichier pour n'avoir pas à modifier les valeurs dans le code...
    Si tu as besoin des fichiers pour jouer, je peux te les faire passer en MP, Citadelle.txt de Saint-Exupéry est encore sous copyright...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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-J’ai 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 d’un 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 j’ai 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
    Pour Deduction.txt tu peaufineras en fonction de tes besoins, là ce n'est pas très significatif !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Déduction :
    ETH.txt est Ethique à 100%, Anthropologique à 80% et Politique à 83.3333333333333%
     
    Déduction :
    TRE.txt est Ethique à 100%, Anthropologique à 80% et Politique à 83.3333333333333%
     
    Déduction :
    TTP.txt est Ethique à 100%, Anthropologique à 100% et Politique à 83.3333333333333%
     
    Déduction :
    Citadelle.txt est Ethique à 100%, Anthropologique à 100% et Politique à 100%
    Resultat.txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     
    =============================================Traitement du fichier ETH.txt :
     
    Le mot 'tristesse' est present 5 fois
    Le mot 'affections' est present 146 fois
    Le mot 'entendement' est present 42 fois
    Le mot 'joie' est present 16 fois
    Le mot 'passions' est present 29 fois
    Le mot 'paix' est present 1 fois
    Le mot 'haine' est present 72 fois
    Le mot 'vice' est present 19 fois
    Le mot 'amour' est present 24 fois
    Le mot 'hommes' est present 93 fois
     
     
    Comparaison de ETH.txt avec dic_Ethique
     Le mot amour est présent dans dic_Ethique   la position 8.
    Le mot haine est présent dans dic_Ethique   la position 6.
    Le mot joie est présent dans dic_Ethique   la position 3.
    Le mot tristesse est présent dans dic_Ethique   la position 0.
    Le mot affections est présent dans dic_Ethique   la position 1.
    Le mot passions est présent dans dic_Ethique   la position 4.
     
    Le nombre de mots du fichier ETH.txt présents dans le dic_Ethique  est 6  ===>
    	le pourcentage par raport au dic_Ethique = 100 %
     
    Comparaison de ETH.txt avec dic_Anthropologie
     Le mot amour est présent dans dic_Anthropologie   la position 8.
    Le mot haine est présent dans dic_Anthropologie   la position 6.
    Le mot entendement est présent dans dic_Anthropologie   la position 2.
    Le mot hommes est présent dans dic_Anthropologie   la position 9.
    ---->fléau n'est pas dans dic_Anthropologie.
     
    Le nombre de mots du fichier ETH.txt présents dans le dic_Anthropologie  est 4  ===> 
    	le pourcentage par raport au dic_Anthropologie = 80 %
     
    Comparaison de ETH.txt avec dic_Politique
     Le mot amour est présent dans dic_Politique   la position 8.
    Le mot paix est présent dans dic_Politique   la position 5.
    Le mot hommes est présent dans dic_Politique   la position 9.
    Le mot passions est présent dans dic_Politique   la position 4.
    Le mot vice est présent dans dic_Politique   la position 7.
    ---->réprimander n'est pas dans dic_Politique.
     
    Le nombre de mots du fichier ETH.txt présents dans le dic_Politique  est 5  ===> 
    	le pourcentage par raport au dic_Politique = 83.3333333333333 %
     
    =============================================Traitement du fichier TRE.txt :
     
    Le mot 'tristesse' est present 2 fois
    Le mot 'haine' est present 6 fois
    Le mot 'hommes' est present 12 fois
    Le mot 'amour' est present 3 fois
    Le mot 'entendement' est present 26 fois
    Le mot 'passions' est present 1 fois
    Le mot 'joie' est present 4 fois
     
     
    Comparaison de TRE.txt avec dic_Ethique
     Le mot amour est présent dans dic_Ethique   la position 13.
    Le mot haine est présent dans dic_Ethique   la position 11.
    Le mot joie est présent dans dic_Ethique   la position 16.
    Le mot tristesse est présent dans dic_Ethique   la position 10.
    Le mot affections est présent dans dic_Ethique   la position 1.
    Le mot passions est présent dans dic_Ethique   la position 15.
     
    Le nombre de mots du fichier TRE.txt présents dans le dic_Ethique  est 6  ===>
    	le pourcentage par raport au dic_Ethique = 100 %
     
    Comparaison de TRE.txt avec dic_Anthropologie
     Le mot amour est présent dans dic_Anthropologie   la position 13.
    Le mot haine est présent dans dic_Anthropologie   la position 11.
    Le mot entendement est présent dans dic_Anthropologie   la position 14.
    Le mot hommes est présent dans dic_Anthropologie   la position 12.
    ---->fléau n'est pas dans dic_Anthropologie.
     
    Le nombre de mots du fichier TRE.txt présents dans le dic_Anthropologie  est 4  ===> 
    	le pourcentage par raport au dic_Anthropologie = 80 %
     
    Comparaison de TRE.txt avec dic_Politique
     Le mot amour est présent dans dic_Politique   la position 13.
    Le mot paix est présent dans dic_Politique   la position 5.
    Le mot hommes est présent dans dic_Politique   la position 12.
    Le mot passions est présent dans dic_Politique   la position 15.
    Le mot vice est présent dans dic_Politique   la position 7.
    ---->réprimander n'est pas dans dic_Politique.
     
    Le nombre de mots du fichier TRE.txt présents dans le dic_Politique  est 5  ===> 
    	le pourcentage par raport au dic_Politique = 83.3333333333333 %
     
    =============================================Traitement du fichier TTP.txt :
     
    Le mot 'tristesse' est present 2 fois
    Le mot 'fléau' est present 1 fois
    Le mot 'joie' est present 7 fois
    Le mot 'passions' est present 14 fois
    Le mot 'paix' est present 35 fois
    Le mot 'affections' est present 4 fois
    Le mot 'entendement' est present 32 fois
    Le mot 'amour' est present 25 fois
    Le mot 'hommes' est present 200 fois
    Le mot 'haine' est present 28 fois
    Le mot 'vice' est present 11 fois
     
     
    Comparaison de TTP.txt avec dic_Ethique
     Le mot amour est présent dans dic_Ethique   la position 24.
    Le mot haine est présent dans dic_Ethique   la position 26.
    Le mot joie est présent dans dic_Ethique   la position 19.
    Le mot tristesse est présent dans dic_Ethique   la position 17.
    Le mot affections est présent dans dic_Ethique   la position 22.
    Le mot passions est présent dans dic_Ethique   la position 20.
     
    Le nombre de mots du fichier TTP.txt présents dans le dic_Ethique  est 6  ===>
    	le pourcentage par raport au dic_Ethique = 100 %
     
    Comparaison de TTP.txt avec dic_Anthropologie
     Le mot amour est présent dans dic_Anthropologie   la position 24.
    Le mot haine est présent dans dic_Anthropologie   la position 26.
    Le mot entendement est présent dans dic_Anthropologie   la position 23.
    Le mot hommes est présent dans dic_Anthropologie   la position 25.
    Le mot fléau est présent dans dic_Anthropologie   la position 18.
     
    Le nombre de mots du fichier TTP.txt présents dans le dic_Anthropologie  est 5  ===> 
    	le pourcentage par raport au dic_Anthropologie = 100 %
     
    Comparaison de TTP.txt avec dic_Politique
     Le mot amour est présent dans dic_Politique   la position 24.
    Le mot paix est présent dans dic_Politique   la position 21.
    Le mot hommes est présent dans dic_Politique   la position 25.
    Le mot passions est présent dans dic_Politique   la position 20.
    Le mot vice est présent dans dic_Politique   la position 27.
    ---->réprimander n'est pas dans dic_Politique.
     
    Le nombre de mots du fichier TTP.txt présents dans le dic_Politique  est 5  ===> 
    	le pourcentage par raport au dic_Politique = 83.3333333333333 %
     
    =============================================Traitement du fichier Citadelle.txt :
     
    Le mot 'joie' est present 91 fois
    Le mot 'fléau' est present 1 fois
    Le mot 'passions' est present 3 fois
    Le mot 'paix' est present 50 fois
    Le mot 'amour' est present 401 fois
    Le mot 'hommes' est present 335 fois
    Le mot 'haine' est present 49 fois
    Le mot 'vice' est present 16 fois
    Le mot 'tristesse' est present 5 fois
    Le mot 'réprimander' est present 1 fois
     
     
    Comparaison de Citadelle.txt avec dic_Ethique
     Le mot amour est présent dans dic_Ethique   la position 32.
    Le mot haine est présent dans dic_Ethique   la position 34.
    Le mot joie est présent dans dic_Ethique   la position 28.
    Le mot tristesse est présent dans dic_Ethique   la position 36.
    Le mot affections est présent dans dic_Ethique   la position 22.
    Le mot passions est présent dans dic_Ethique   la position 30.
     
    Le nombre de mots du fichier Citadelle.txt présents dans le dic_Ethique  est 6  ===>
    	le pourcentage par raport au dic_Ethique = 100 %
     
    Comparaison de Citadelle.txt avec dic_Anthropologie
     Le mot amour est présent dans dic_Anthropologie   la position 32.
    Le mot haine est présent dans dic_Anthropologie   la position 34.
    Le mot entendement est présent dans dic_Anthropologie   la position 23.
    Le mot hommes est présent dans dic_Anthropologie   la position 33.
    Le mot fléau est présent dans dic_Anthropologie   la position 29.
     
    Le nombre de mots du fichier Citadelle.txt présents dans le dic_Anthropologie  est 5  ===> 
    	le pourcentage par raport au dic_Anthropologie = 100 %
     
    Comparaison de Citadelle.txt avec dic_Politique
     Le mot amour est présent dans dic_Politique   la position 32.
    Le mot paix est présent dans dic_Politique   la position 31.
    Le mot hommes est présent dans dic_Politique   la position 33.
    Le mot passions est présent dans dic_Politique   la position 30.
    Le mot vice est présent dans dic_Politique   la position 35.
    Le mot réprimander est présent dans dic_Politique   la position 37.
     
    Le nombre de mots du fichier Citadelle.txt présents dans le dic_Politique  est 6  ===> 
    	le pourcentage par raport au dic_Politique = 100 %
    PS: Je serai absent au moins la matinée

  6. #6
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    dmganges t'a apporté une solution qui devrait, je pense, satisfaire ton besoin.

    J'ajouterais juste deux commentaires.

    D'abord, n'utilise pas le module Switch, il est déprécié. En plus ta syntaxe pour l'utiliser est fausse, mais je ne prendrai pas la peine de la corriger, contente-tou de ne pas l'utiliser.

    Ensuite tes motifs d'expressions régulières ne font pas ce que sembles penser:

    recherche le mot "spor" suivi de 0, un ou plusieurs "t".

    recherche le mot "joue" suivi d'au moins deux caractères quelconques autres que des retours à la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $line =~ /(foot...)/
    recherche "foot" suivi de trois caractères quelconques.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 74
    Points : 67
    Points
    67
    Par défaut Remerciment
    C’est très gentil de votre part Mr Michel.
    Les fichiers ont été bien reçus
    Je vais essayer de terminer le travaille.
    J attendais pas avoir arrivé a ces résultats je vous remercie encore.


    Merci aussi a Lolo78 vous avez raison pour la recherche
    (Pourquoi le module switch est déprécié!! Just pour info)

  8. #8
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par younes2727 Voir le message
    (Pourquoi le module switch est déprécié!! Just pour info)
    Il existe un module Switch (avec une lettre capitale initiale) qui a été distribué avec Perl pendant quelque temps, mais son usage a été déprécié en version 5.12 et il ne fait plus partie de la distribution standard depuis la version 5.14 (même si on peut toujours le trouver sur le CPAN, il n'a pas été maintenu et il faut absolument l'éviter avec les versions récentes de Perl).

    Une fonctionnalité de type switch, utilisant les mots-clefs given, when et default, a été introduite à titre expérimental en 5.10. Sa sémantique très riche la rend à première vue attrayante, mais elle est considérée en 5.18 comme hautement expérimentale, ce qui veut dire qu'elle est susceptible d'être profondément remaniée, voire supprimée, lors d'une nouvelle distribution de Perl. On peut à la rigueur envisager de l'utiliser pour un programme ponctuel dont on a la certitude qu'il ne servira qu'une seule fois ou que pendant quelques semaines, il faut certainement l'éviter pour tout programme de production destiné à devenir pérenne (ou simplement susceptible de le devenir). En bref, Perl n'a pas vraiment de fonctionnalité switch utilisable en production.

  9. #9
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonsoir,
    Le plaisir est avant tout pour moi
    Nous agissons toujours pour satisfaire égoïstement notre plaisir, sinon nous ne ferions rien !
    Ce sont les autruches et les moralistes qui condamnent l'égoïsme, l'opportunisme, l'hypocrisie...
    je ne résiste pas : E3P6 & E4P25

    PS: Sur le forum j'utilise systématiquement le tutoiement, non par familiarité mais pour la clarté et la simplicité.
    Le vouvoiement, dit de politesse, surtout lorsqu'il est écrit, exige des tournures grammaticales ampoulées.
    Du genre : Pour l'équilibre de la discussion il serait préférable que vous employassiez également le tutoiement.

    Cependant je privilégie par dessus tout l'équilibre, sinon ça donne une relation Dominant/Dominé mais si c'est trop difficile pour toi je reviendrais au vouvoiement, ça va donner
    Bonne lecture

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 74
    Points : 67
    Points
    67
    Par défaut Un tout petit problème
    Ok l’idée est reçus (je vais la prendre en considération)

    pour le programme:
    Des premières vues le programme donne des résultats (pourcentages , apparition de chaque mot dans le doc,….)
    Mais le moment ou j’ai ajouté un quatrième document –vide –
    Alors les résultats étaient les mêmes de document précédent 100% (et non pas
    0% dans deduction
    de plus le doc résultat affiche –pour le quatrième doc-
    Le mot 'réprimander' est present 1 fois
    Le mot 'vice' est present 1 fois
    alors que le doc est vide

    J’ai pensé a renitialiser le tableau « nom_recuperer » après chaque itération mais les résultats était erronés
    Les résultats qui ont était juste  c’est seulement pour le doc1
    Comment peut-on régler le problème
    Merci

  11. #11
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Citation Envoyé par younes2727 Voir le message
    Ok l’idée est reçus (je vais la prendre en considération)
    Enfin quelqu'un qui apprécie

    Oui j'ai oublié les initialisations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    undef %Comptage;
    undef @nom_recuperer;
    En fin de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach my $Document (@Docs) {
    Je ne mets pas tout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     ...
     
    	#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;
    	undef %Comptage;
    	undef @nom_recuperer;
    }
    Déduction :
    ETH.txt est Ethique à 100%, Anthropologique à 80% et Politique à 83.3333333333333%

    Déduction :
    TRE.txt est Ethique à 83.3333333333333%, Anthropologique à 80% et Politique à 50%

    Déduction :
    Cit.txt est Ethique à 0%, Anthropologique à 0% et Politique à 0%

    Déduction :
    TTP.txt est Ethique à 100%, Anthropologique à 100% et Politique à 83.3333333333333%
    Le prochaine fois interro écrite sur l'Éthique

    [Edit 16:50] Tu ne diviseras jamais par zéro :

    Je n'ai pas contrôlé non plus si les dico étaient vide donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $NbEth = scalar(@dic_Ethique);
    Dans ce cas $NbEth = 0

    ET
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $pourcentage_appr = ( $count * 100 ) / $NbEth;

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 74
    Points : 67
    Points
    67
    Par défaut
    oui j'ai rencontrer cette erreur (donc j'ai vérifier que les dictionnaires contient au moins un mots )sinon je vais ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    if ($NbEth != 0){
    	my $pourcentage_appr = ( $count * 100 ) / $NbEth;
    	print $fh_Resul
    "\nLe nombre de mots du fichier $Document présents dans le dic_Sport  est $count  ===>
    	le pourcentage par raport au dic_Sport = $pourcentage_appr %";
    	}
    	else{
    		print $fh_Resul "le dic ETH est completement vide ";
    	}

    La philosophie est un monde merveilleux juste il faut avoir de la passionce

  13. #13
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Ou au moment de charger le dico en table tester si le fichier est vide :

    7.1. Opérateurs sur les noms de fichier

    Perl dispose d'opérateurs prenant en paramètre un nom de fichier ; ce nom de fichier doit être un scalaire (une variable ou une constante). Leur valeur de retour est souvent booléenne et quelquefois numérique. Les coutumiers du shell retrouveront de nombreuses options de la commande test.

    -e teste si son paramètre est un chemin valable dans le système de fichiers (répertoire, fichier, etc.). On pourrait l'utiliser ainsi :

    if( -e "/usr/tmp/fichier" ) {
    print "Le fichier existe\n";
    }

    -f teste si son paramètre est un fichier normal.

    -d teste si son paramètre est un répertoire.

    -l teste si son paramètre est un lien symbolique. Ceci n'exclut pas que -f ou -d renvoie vrai.

    -r teste si le programme a le droit de lire le fichier/répertoire/etc passé en paramètre.

    -w teste si le programme a le droit d'écrire.

    -x teste si le programme a le droit d'exécuter le fichier ou d'accéder (ou axéder :-)) au répertoire.

    -o teste si le fichier appartient à l'utilisateur qui exécute le programme.

    -z teste si le fichier est vide.

    -s teste si le fichier est non vide ; en fait cet opérateur renvoie la taille du fichier.

    -M renvoie l'âge en jour du fichier (depuis le début de l'exécution du programme).
    car un dico vide ce ne doit pas être très cohérent ...?

    Pour la philo il faut aussi avoir le temps... le mieux encore c'est d'être vieux

  14. #14
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 74
    Points : 67
    Points
    67
    Par défaut
    Vraiment, très utile
    un grand merci

  15. #15
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Parce que le sujet m'intéresse et pour tordre le cou à une insomnie, je me suis amusé , autant que tu en profites...

    Pour éviter d'écrire une fonction compare_with_dic pour chaque dictionnaire :
    FicListDocs.txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ETH.txt
    TRE.txt
    Cit.txt
    TTP.txt
    FicListDico.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DicoEth.txt
    DicoAnt.txt
    DicoVid.txt
    DicoPol.txt
    Et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #!/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 $FicListDocs = File::Spec->catfile( $RepBase, 'FicListDocs.txt' );
    my $FicListDico = File::Spec->catfile( $RepBase, 'FicListDico.txt' );
     
    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 \t$!");
    open $fh_Deduc, '>:utf8', $FicDeduction or die("Impossible ouvrir $FicDeduction \t$!");
     
    # Construction de @MotUnique contenant l'ensemble des mots de tous les dicos excepté les doublons
    my $fh_ListDico;
    open $fh_ListDico, '<:utf8', $FicListDico
      	or die("Impossible ouvrir  $FicListDico \t$!");
    my @ListDico = <$fh_ListDico>;
    close $fh_ListDico;
     
    my @TabMots = ();
    my $fh_Dico;
    my (%Exist, @MotUnique);
    foreach my $Dico (@ListDico) {
    	chomp ($Dico);
    	my $PathDico = File::Spec->catfile( $RepBase, $Dico );
    	open $fh_Dico , '<:utf8', $PathDico
    		or die("Impossible ouvrir  $PathDico \t$!");
    	@TabMots = <$fh_Dico>;
    	close $fh_Dico;
    	chomp (@TabMots);
     
    	foreach my $Elem ( @TabMots ) {
         push @MotUnique, $Elem unless defined $Exist{$Elem} ;
         $Exist{$Elem} = 1;
    	}
    }
    #print "@MotUnique\n";
     
     
    my @nom_recuperer = ();
     
    my $fh_ListDocs;
    open $fh_ListDocs, '<:utf8', $FicListDocs
      	or die("Impossible ouvrir  $FicListDocs \t$!");
    my @ListDocs = <$fh_ListDocs>;
    close $fh_ListDocs;
     
    foreach my $Document (@ListDocs) {
    	chomp ($Document);
    	print $fh_Resul  "\n\n=============================================";
    	print $fh_Resul  "Traitement du fichier $Document :\n\n";
    	my $In_Fic = File::Spec->catfile( $RepBase, $Document );
     
    	if ( -z $In_Fic ) {
    		print $fh_Resul "\t\tATTENTION le document $Document est VIDE !!!\n";
    		print $fh_Deduc "\t\tATTENTION le document $Document est VIDE !!!\n";
    	}
     
    	my $fh_Entree;
    	open $fh_Entree, '<:utf8', $In_Fic
      	or die("Impossible ouvrir  $In_Fic \t$!");
     
    	my %Comptage = ();
    	my $NbLigne;
    	while ( my $Ligne = <$fh_Entree> ) {
    		$NbLigne++;
    		foreach my $Mot (@MotUnique) {
    			chomp $Mot;
    			if ( $Ligne =~ $Mot ) {
    				$Comptage{$Mot}++;
    				#print $fh_Resul  "$Mot a la ligne $NbLigne\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";
     
    	#comparer les mots avec tous les dico
    	print $fh_Deduc  "\n\nDéduction :\n";
    	foreach my $Dico (@ListDico) {
    		my $pourcentage_appr = compare_with_dic($Document, $Dico);
    		print $fh_Deduc  "$Document est $Dico à $pourcentage_appr%\n";
    	}
     
    	close $fh_Entree;
    	undef %Comptage;
    	undef @nom_recuperer;
    }
     
    close $fh_Resul;
    close $fh_Deduc;
     
    ################################################################
     
    sub compare_with_dic {
    	my ( $Document, $Dico ) = @_;
    	print $fh_Resul  "\n\nComparaison de $Document avec $Dico\n ";
    	my $count = 0;
    	my %hash;
    	@hash{@nom_recuperer} = 0 .. $#nom_recuperer;
     
    	my $PathDico = File::Spec->catfile( $RepBase, $Dico );
    	open $fh_Dico , '<:utf8', $PathDico
    		or die("Impossible ouvrir  $PathDico \t$!");
    	my @TabMots = <$fh_Dico>;
    	close $fh_Dico;
    	chomp (@TabMots);
     	my $NbDico = scalar(@TabMots);
     
    	if ($NbDico) {
    		for my $val (@TabMots) {
    			chomp $val;
    			if ( exists $hash{$val} ) {
    				print $fh_Resul  "Le mot $val est présent dans $Dico   la position $hash{$val}.\n";
    				$count += 1;
    			} else {
    				print $fh_Resul  "---->$val n'est pas dans $Dico.\n";
    			}
    		}
    		my $pourcentage_appr = ( $count * 100 ) / $NbDico;
    		print $fh_Resul  "\nLe nombre de mots du fichier $Document présents dans le $Dico  est $count  ===>
    		le pourcentage par raport au $Dico = $pourcentage_appr %";
    		return $pourcentage_appr;
     
    	} else {
    		print $fh_Resul  "\n\t\tATTENTION $Dico est VIDE !!!\n";
    		print $fh_Deduc  "\n\t\tATTENTION $Dico est VIDE !!!\n";
    		return 0;
    	}
     
    }
     
     
    #==============================================================
    # 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-J’ai 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 d’un 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 j’ai 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
    A la louche, pas dit qu'il n'y ait pas de pb...

    Il faudrait peaufiner les libellés...
    Déduction :
    ETH.txt est DicoEth.txt à 100%
    ETH.txt est DicoAnt.txt à 80%

    ATTENTION DicoVid.txt est VIDE !!!
    ETH.txt est DicoVid.txt à 0%
    ETH.txt est DicoPol.txt à 83.3333333333333%


    Déduction :
    TRE.txt est DicoEth.txt à 83.3333333333333%
    TRE.txt est DicoAnt.txt à 80%

    ATTENTION DicoVid.txt est VIDE !!!
    TRE.txt est DicoVid.txt à 0%
    TRE.txt est DicoPol.txt à 50%
    ATTENTION le document Cit.txt est VIDE !!!


    Déduction :
    Cit.txt est DicoEth.txt à 0%
    Cit.txt est DicoAnt.txt à 0%

    ATTENTION DicoVid.txt est VIDE !!!
    Cit.txt est DicoVid.txt à 0%
    Cit.txt est DicoPol.txt à 0%


    Déduction :
    TTP.txt est DicoEth.txt à 100%
    TTP.txt est DicoAnt.txt à 100%

    ATTENTION DicoVid.txt est VIDE !!!
    TTP.txt est DicoVid.txt à 0%
    TTP.txt est DicoPol.txt à 83.3333333333333%

  16. #16
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 74
    Points : 67
    Points
    67
    Par défaut
    Quelle optimisation
    Alors j’ai passé la nuit hier à créer 5 méthodes pour 5 domaines différents (après le remplissage de ces derniers qui m a pris beaucoup de temps)
    Je vais refaire (en essayant de comprendre l astuce –les noms sont déclarés dans un fichier texte cool-)
    Le code est lisible

  17. #17
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Pour le fichier FicListDico.txt, tu dervrais y mettre les infos nécessaires aux libellés pour générer Deduction.txt, du genre :
    TOUT CE QUI SUIT A LA LOUCHE...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DicoEth.txt:est éthique à
    DicoAnt.txt:anthropologique selon les convictions néodarwiniennes
    DicoVid.txt:est vide selon la théorie des ensembles
    DicoPol.txt:est politique au sens noble du terme
    Enfin tout ce dont tu as besoin et qui te passe par la tête, de façon à ne pas avoir à planter une nouvelle forêt d'ifs

    éventuellement d'autres infos :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DicoEth.txt:est éthique à:Spinoza:Machiavel:Nietzsche:Schopenhauer
    Voire PLUS...
    Et dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    my ($FicDico, $LibInfoDico);
    foreach my $InfoDico (@ListDico) {
    	chomp ($InfoDico);
    	($FicDico, $LibInfoDico) = split /:/, $InfoDico;
    	my $PathDico = File::Spec->catfile( $RepBase, $FicDico );
    	open $fh_Dico , '<:utf8', $PathDico
    		or die("Impossible ouvrir  $PathDico \t$!");
    Bref, tant que tu dois modifier ton code pour prendre en compte un domaine ou autre, ton programme n'est pas fini !
    Le code doit être indépendant des données

    Bien qu'il soit tôt, je n'ai pas trop le temps, je restaure un baromètre ancien de marine et aujourd'hui est le seul jour de beau temps depuis longtemps pour bricoler à l'extérieur, et la pluie revient déjà demain...

    Ganges
    Bonne continuation

  18. #18
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dmganges Voir le message

    Bien qu'il soit tôt, je n'ai pas trop le temps, je restaure un baromètre ancien de marine et aujourd'hui est le seul jour de beau temps depuis longtemps pour bricoler à l'extérieur, et la pluie revient déjà demain...
    Hun, 3h28, pour moi, c'est plutôt tard...

  19. #19
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Hun, 3h28, pour moi, c'est plutôt tard...
    Oui Lolo78, j'ai remarqué que lorsque je me connecte, au nombre de messages auxquels tu viens de répondre, tu es là depuis un bon moment

    @younes2727
    Comme ce matin je suis allé un peu vite et surtout que les nuages arrivent (eux aussi) plus tôt que prévu, décidément

    FicListDico_ESS.txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DicoEth.txt:Éthique selon:Spinoza:Nietzsche:
    DicoAnt.txt:Anthropologique selon:Darwin:les néodarwiniens:
    DicoVid.txt:Vide selon la théorie des ensembles: :
    DicoPol.txt:Politique, AU SENS NOBLE DU TERME ☺, selon:Nicolas Machiavel:Bernard de Mandeville:Charles Louis de Secondat, baron de La Brède et de Montesquieu:Hannah Arendt:
    younes_ESS.pl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #!/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);
     
    #==============================================================================================
    # ESSAI
    #================================================================================================
    ActiverAccents();
    my $RepBase = 'E:/_SITE/FondsDocumentaire/Spinoza';
     
    my $FicListDocs = File::Spec->catfile( $RepBase, 'FicListDocs.txt' );
    my $FicListDico = File::Spec->catfile( $RepBase, 'FicListDico_ESS.txt' );
     
    my $FicResultat  = File::Spec->catfile( $RepBase, 'Resultat_ESS.txt' );
    my $fh_Resul;
    open $fh_Resul, '>:utf8', $FicResultat 	or die("Impossible ouvrir $FicResultat \t$!");
     
    # Construction de @MotUnique contenant l'ensemble des mots de tous les dicos excepté les doublons
    my $fh_ListDico;
    open $fh_ListDico, '<:utf8', $FicListDico
      	or die("Impossible ouvrir  $FicListDico \t$!");
    my @ListDico = <$fh_ListDico>;
    chomp @ListDico;
    close $fh_ListDico;
     
    my @TabMots = ();
    my $fh_FicDico;
    my (%Exist, @MotUnique);
    foreach my $InfoFicDico (@ListDico) {
    	chomp ($InfoFicDico);
    	my ( $NomFicDico, $LibInfoDico, @Auteurs ) = split /:/,$InfoFicDico;
    	my $PathDico = File::Spec->catfile( $RepBase, $NomFicDico );
    	open $fh_FicDico , '<:utf8', $PathDico
    		or die("Impossible ouvrir  $PathDico \t$!");
    	@TabMots = <$fh_FicDico>;
    	close $fh_FicDico;
    	chomp (@TabMots);
     
    	foreach my $Elem ( @TabMots ) {
         push @MotUnique, $Elem unless defined $Exist{$Elem} ;
         $Exist{$Elem} = 1;
    	}
    	print $fh_Resul "\n\nINFO sur Dico '$NomFicDico' : $LibInfoDico $Auteurs[0]\n";
    	print $fh_Resul "OU\nINFO sur Dico '$NomFicDico' : $LibInfoDico @Auteurs\n";
    	print $fh_Resul "OU\nINFO sur Dico '$NomFicDico' : $LibInfoDico ". join (" & ",@Auteurs);
    }
     
    close $fh_FicDico;
    print $fh_Resul "\n\n\nMots uniques :\n@MotUnique\n\n";
    print $fh_Resul "Mais pour contrôler c'est mieux comme çà :\n";
    @MotUnique = sort @MotUnique;
    print $fh_Resul join("\n",@MotUnique);
     
    close $fh_Resul;
     
    #==============================================================
    # 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
    Resultat_ESS.txt
    INFO sur Dico 'DicoEth.txt' : Éthique selon Spinoza
    OU
    INFO sur Dico 'DicoEth.txt' : Éthique selon Spinoza Nietzsche
    OU
    INFO sur Dico 'DicoEth.txt' : Éthique selon Spinoza & Nietzsche

    INFO sur Dico 'DicoAnt.txt' : Anthropologique selon Darwin
    OU
    INFO sur Dico 'DicoAnt.txt' : Anthropologique selon Darwin les néodarwiniens
    OU
    INFO sur Dico 'DicoAnt.txt' : Anthropologique selon Darwin & les néodarwiniens

    INFO sur Dico 'DicoVid.txt' : Vide selon la théorie des ensembles
    OU
    INFO sur Dico 'DicoVid.txt' : Vide selon la théorie des ensembles
    OU
    INFO sur Dico 'DicoVid.txt' : Vide selon la théorie des ensembles

    INFO sur Dico 'DicoPol.txt' : Politique, AU SENS NOBLE DU TERME ☺, selon Nicolas Machiavel
    OU
    INFO sur Dico 'DicoPol.txt' : Politique, AU SENS NOBLE DU TERME ☺, selon Nicolas Machiavel Bernard de Mandeville Charles Louis de Secondat, baron de La Brède et de Montesquieu Hannah Arendt
    OU
    INFO sur Dico 'DicoPol.txt' : Politique, AU SENS NOBLE DU TERME ☺, selon Nicolas Machiavel & Bernard de Mandeville & Charles Louis de Secondat, baron de La Brède et de Montesquieu & Hannah Arendt


    Mots uniques :
    amour haine joie tristesse affections passions entendement hommes fléau paix vice réprimander

    Mais pour contrôler c'est mieux comme çà :
    affections
    amour
    entendement
    fléau
    haine
    hommes
    joie
    paix
    passions
    réprimander
    tristesse
    vice
    N'hésite pas à faire de petits essais indépendants, plutôt que de perdre du temps à corriger un gros pavé.pl et te rendre compte que tu n'atteins pas le but recherché !

  20. #20
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dmganges Voir le message
    Oui Lolo78, j'ai remarqué que lorsque je me connecte, au nombre de messages auxquels tu viens de répondre, tu es là depuis un bon moment
    Non, je me suis mal fait comprendre. Je voulais dire que si d'aventure je suis sur le forum à 3 heures du mat', dans ce cas c'est pour moi tard dans la nuit, sans doute juste avant d'aller me coucher, mais certainement pas tôt le matin, car je suis bien incapable de me lever aussi tôt le matin.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment chercher un mot dans un fichier texte et le modifier?
    Par Ange_1987 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 13/05/2009, 18h24
  2. Trouver un mot dans un fichier texte
    Par spl0tch dans le forum Langage
    Réponses: 12
    Dernier message: 16/04/2007, 21h14
  3. Réponses: 10
    Dernier message: 29/04/2006, 10h40
  4. Trouver un mot dans un fichier texte
    Par godik dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 10/03/2006, 14h31
  5. Comment changer des mots dans un fichier?
    Par ptitbonum dans le forum Linux
    Réponses: 5
    Dernier message: 07/04/2004, 23h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo