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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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 confirmé
    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
    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 Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    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 457
    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 confirmé
    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
    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 Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    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 457
    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
    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.

+ Répondre à la discussion
Cette discussion est résolue.

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, 19h24
  2. Trouver un mot dans un fichier texte
    Par spl0tch dans le forum Langage
    Réponses: 12
    Dernier message: 16/04/2007, 22h14
  3. Réponses: 10
    Dernier message: 29/04/2006, 11h40
  4. Trouver un mot dans un fichier texte
    Par godik dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 10/03/2006, 15h31
  5. Comment changer des mots dans un fichier?
    Par ptitbonum dans le forum Linux
    Réponses: 5
    Dernier message: 08/04/2004, 00h42

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