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

SGBD Perl Discussion :

Problème d'encodage perl


Sujet :

SGBD Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Par défaut Problème d'encodage perl
    Salut à tous!

    J'ai un problème urgent avec mon code, en fait j'essaie de comparer les chaînes de caractères (verbes) contenues dans deux fichiers (f1 et f2). Le programme est censé vérifier par exemple si le mot préférer ou fonctionné contenu dans le premier fichier(f1) apparaît également dans le second(f2). Auquel cas il le signale. Mon code fonctionne bien pour les mots qui n'ont aucun accent. Par contre, lorsqu'il s'agit des mots contenant des caractères accentués (comme ceux des exemples ci-dessus), mon code ne renvoie aucun résultat.

    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
     
     
    #!/usr/bin/perl -w
     
    #ligne de commande : perl extraction_phrase.pl -file <fichier.html> -list <fichier-formeverbales+lemmes>
     
     
    #====================================================================
    use strict;
    use locale;
    use utf8;
    use Encode;
    use Getopt::Long;
    use HTML::TreeBuilder;
    #binmode STDOUT, 'utf8';
    binmode STDIN, 'utf8';
     
    #====================================================================
    # options
    sub usage {
        warn "Usage :
       -file           # fichier à analyser
       -list           # fichier contenant les verbes+lemmes
       \n"
    }
     
    my $corp;
    my $listverbs;
     
    unless (&GetOptions(
    	     "file=s", \$corp,
    		 "list=s", \$listverbs,
    	)) 
    {
        warn "Probleme d'options\n";
        &usage;
        die;
    }
    #=====================================================================
     
     
    my $ligne;
    my @lignes;
    my $forme;
    my $infinitif;
    my %tabformesV;
     
     
    sub FormesV{
        my ($f) = $_[0];
        open (F, $f) or die "impossible d'ouvrir '$f' \n" ;
        warn "Lecture du fichier \n";
        binmode(F, ':utf8');
     
    	while (<F>) {
        	next if (/^#/);
    		$ligne = $_;
    		chomp ($ligne);
    		#print "===$ligne===\n";
        	($forme, $infinitif) = split (/\|/, $ligne);
    		$tabformesV{lc($forme)} = $infinitif;
    	}
     
    }
    &FormesV($listverbs);
     
    sub Lecture_et_traitement {
        my ($c) = $_[0];
        open (C, $c) or die "impossible d'ouvrir '$c' \n" ;
        warn "Lecture et traitement du document \n";
        binmode(C, ':utf8');
        my $tree = HTML::TreeBuilder->new; # empty tree
        $tree->parse_file($c);
        my $root = HTML::TreeBuilder->new_from_file($c);
    	my @tabphrases = $root->look_down('_tag', 'p');
    	foreach my $p(@tabphrases){
    		my $phrase = $p->as_text;
    		#print "$phrase", "\n";
    		my @tabverbes = $p->look_down('_tag', 'b');
    		foreach my $v (@tabverbes){
    			my $verbe = $v->as_text;
    			#print "$verbe\n";
    			chomp ($verbe);
    			$verbe =lc($verbe);			
    			$verbe =~ s/^ //g;
    		        $verbe =~ s/j' |j'|je |tu |elle |nous |vous |ils |elles |il |lui |lui-même |me |moi |moi-même |te |toi |toi-même |elle-même |nous-même |vous-même |eux |eux-même |soi-même |toi-meme |elle-meme |nous-meme |vous-meme |soi-meme |toi meme |elle meme |nous meme |vous meme|eux meme |soi meme |soi même |toi même |elle même |nous même |vous même |moi-même |moi meme| moi-meme eux |eux meme |m' |ma |t' |ne |pas |y |ça |ce |n' |s' |c' |en |on |l' |le |la |les |leurs |pas //ig;
    		    $verbe =~ s/q' |que |qu' //ig;
    			$verbe =~ s/ $//g;
    			if (exists $tabformesV{lc($verbe)}) {
    				print "$verbe ==> $tabformesV{$verbe}\n";
    				#print "===>$phrase", "\n";
    			}
    			else{
    				 print "++++$verbe++++\n";
     
    			}
     
    		}
     
    	}
     
        $tree = $tree->delete;
    }
    &Lecture_et_traitement($corp);
     
    Merci d'avance pour vos proposition :)

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Bonjour,

    Il faudrait déjà connaitre l'encodage de tes fichiers. Vu ton code, je suppose qu'ils sont encodés en UTF-8 (et non utf8).
    Corrige donc déjà cela et on en reparle après.

    Autre remarque, l'appel de la fonction open ne me plait pas, tu devrais l'écrire de la sorte :
    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
    #!/usr/bin/perl
     
    #ligne de commande : perl extraction_phrase.pl -file <fichier.html> -list <fichier-formeverbales+lemmes>
     
     
    #====================================================================
    use strict;
    use warnings;
    use locale;
    use utf8;
    use Encode;
    use Getopt::Long;
    use HTML::TreeBuilder;
    #binmode STDOUT, 'utf8';
    binmode STDIN, 'utf8';
     
    #====================================================================
    # options
    sub usage {
        warn "Usage :
       -file           # fichier à analyser
       -list           # fichier contenant les verbes+lemmes
       \n"
    }
     
    my $corp;
    my $listverbs;
     
    unless (&GetOptions(
    	     "file=s", \$corp,
    		 "list=s", \$listverbs,
    	)) 
    {
        warn "Probleme d'options\n";
        &usage;
        die;
    }
    #=====================================================================
     
     
    my $ligne;
    my @lignes;
    my $forme;
    my $infinitif;
    my %tabformesV;
     
     
    sub FormesV{
        my ($f) = $_[0];
        open  F, '<:encoding(UTF-8)', $f or die "impossible d'ouvrir '$f' \n" ;
        warn "Lecture du fichier \n";
     
    	while (<F>) {
        	next if (/^#/);
    		$ligne = $_;
    		chomp ($ligne);
    		#print "===$ligne===\n";
        	($forme, $infinitif) = split (/\|/, $ligne);
    		$tabformesV{lc($forme)} = $infinitif;
    	}
     
    }
    &FormesV($listverbs);
     
    sub Lecture_et_traitement {
        my ($c) = $_[0];
        open  C, '<:encoding(UTF-8)', $c or die "impossible d'ouvrir '$c' \n" ;
        warn "Lecture et traitement du document \n";
     
        my $tree = HTML::TreeBuilder->new; # empty tree
        $tree->parse_file($c);
        my $root = HTML::TreeBuilder->new_from_file($c);
    	my @tabphrases = $root->look_down('_tag', 'p');
    	foreach my $p(@tabphrases){
    		my $phrase = $p->as_text;
    		#print "$phrase", "\n";
    		my @tabverbes = $p->look_down('_tag', 'b');
    		foreach my $v (@tabverbes){
    			my $verbe = $v->as_text;
    			#print "$verbe\n";
    			chomp ($verbe);
    			$verbe =lc($verbe);			
    			$verbe =~ s/^ //g;
    		        $verbe =~ s/j' |j'|je |tu |elle |nous |vous |ils |elles |il |lui |lui-même |me |moi |moi-même |te |toi |toi-même |elle-même |nous-même |vous-même |eux |eux-même |soi-même |toi-meme |elle-meme |nous-meme |vous-meme |soi-meme |toi meme |elle meme |nous meme |vous meme|eux meme |soi meme |soi même |toi même |elle même |nous même |vous même |moi-même |moi meme| moi-meme eux |eux meme |m' |ma |t' |ne |pas |y |ça |ce |n' |s' |c' |en |on |l' |le |la |les |leurs |pas //ig;
    		    $verbe =~ s/q' |que |qu' //ig;
    			$verbe =~ s/ $//g;
    			if (exists $tabformesV{lc($verbe)}) {
    				print "$verbe ==> $tabformesV{$verbe}\n";
    				#print "===>$phrase", "\n";
    			}
    			else{
    				 print "++++$verbe++++\n";
     
    			}
     
    		}
     
    	}
     
        $tree = $tree->delete;
    }
    &Lecture_et_traitement($corp);
     
    Merci d'avance pour vos proposition :)
    Regarde et lit notre FAQ, il y a des questions inintéressantes :

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Par défaut Problème d'encodage
    Salut,

    Merci pour ta réponse @Djibril. J'ignorais qu'il y a une différence entre utf8 et UTF-8. Mes fichiers sont tous en UTF-8 et j'ai fait ce que tu as dit, et également changé la manière d'appeler ma fonction "open" mais ça ne marche toujours pas.

    voici les trois préambules que j'ai testés

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #====================================================================
    use strict;
    use locale;
    use Encode;
    use Getopt::Long;
    use HTML::TreeBuilder;
    binmode STDIN, 'UTF-8;
    binmode STDOUT, 'UTF-8
     
    #====================================================================
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #====================================================================
    use strict;
    use locale;
    use utf8;
    use Encode;
    use Getopt::Long;
    use HTML::TreeBuilder;
    #====================================================================
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #====================================================================
    use strict;
    use locale;
    use utf8
    use Encode;
    use Getopt::Long;
    use HTML::TreeBuilder;
    binmode STDIN, 'UTF-8;
    binmode STDOUT, 'UTF-8
    #====================================================================
    Avec chacun de ces préambules, aucun changement, le résultat est le même, pas de mots accentués reconnus. De plus, les lignes " binmode STDIN, 'UTF-8'; " et " binmode STDOUT, 'UTF-8'; " renvoient un message d'erreur "unkwon perlIO layer "UTF". Ou alors on n'appelle pas l'encodage UTF-8 de cette façon?

    Merci

  4. #4
    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
    Bonsoir,

    essaie ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    binmode STDIN, ':utf8';
    Et pareil pour STDOUT ou un handler de fichier.

    Mais pour un fichier il vaut mieux le faire à l'ouverture du fichier avec un truc de ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    open my $FH, "<:utf8", $fichier or die "ouverture impossible de $fichier $!";

  5. #5
    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
    J'ajoute qu'un tuto sur l'encodage Unicode a été mis en ligne récemment. Tu y trouveras sans doute des informations intéressantes.

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Bonsoir,

    Il faudrait nous en dire plus :
    • version de Perl ;
    • système d'exploitation ;
    • Exemple de fichiers ;
    • ...


    Et nous dire ce que tu souhaites concrètement faire.

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 10
    Par défaut Problème d'encodage
    Bonjour,

    Merci pour ta réponse @Lolo78 et pour le lien vers le tuto, j'ai fait les changements que tu m'as proposés mais toujours rien...

Discussions similaires

  1. [CSV] Problème d'encodage
    Par simoryl dans le forum Langage
    Réponses: 13
    Dernier message: 18/04/2012, 15h20
  2. Problème d'encodage en Unicode
    Par Skreo dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 28/12/2005, 10h43
  3. Problème d'encodage sur MySql 4.1
    Par Blanchet dans le forum Outils
    Réponses: 1
    Dernier message: 04/12/2005, 04h53
  4. [XML::PARSER] Problème d'encodage
    Par frangin2003 dans le forum Modules
    Réponses: 13
    Dernier message: 05/09/2005, 14h59
  5. Problème execution script perl
    Par 00sebbe dans le forum Apache
    Réponses: 1
    Dernier message: 29/08/2005, 14h43

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