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 :

Enlever le point d'interrogation et les virgule arabe


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 53
    Points : 25
    Points
    25
    Par défaut Enlever le point d'interrogation et les virgule arabe
    Bonjour,
    J'ai un script qui permet de transformer fichier.xml en fichier.txt et dans le script j'ai besoin d'éliminer les points virgule arabe et les points d'interrogation, il fonctionne correctement chez ma copine mais quand je l'ai essayer sur mon pc il ne me permet pas d'enlever les point virgules et les points d'interrogation arabe!!! malgré que je suppose du version perl qui est plus récente que celle de ma copine (version 5.16.3 et ma copine 5.0)
    voici le script que j'ai utilisé
    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
     
    #Script de nettoyage de corpus : de XML TO TXT
     
    #!/usr/bin/perl 
    use File::Spec;	
    use strict;
    use utf8;
    my $RepBase ='D:\\Memoire Mastere\\Mon travail';
     
    my $FicAraOut = File::Spec->catfile( $RepBase, 'Sortie.txt');
     
    open (IN_Ara, 'D:\\Memoire Mastere\\Mon travail\\partie1.xml') or die "erreur d'ouverture.";
     
    open (OUT_Ara, '+>', $FicAraOut ) or die "Impossible ouvrir fichier $FicAraOut en sortie\n";
     
     
    while(<IN_Ara>){
     
    #Supprimer les espaces en debut et en fin  de la chaine
    $_ =~ s/ +$//g;
    $_ =~ s/^\s+//; 
     
    #Enlever le debut de fichier xml
    $_ =~ s/\<\?[a-z]+\s[a-z]+\=\"[0-9]\.[0-9]\"\s[a-z]+\=\"[A-Z]+\-[0-9]\"\?\>//g;
     
    #remplacer plusieurs ! par un seul
    $_ =~ s/\!+/./g;
     
    #Remplacer ! et ? par un point
    $_ =~ s/\?+/./g; 
    #Enlever ; et le , 
    $_ =~ s/[;,]//g;
     
    #supprimer point d'interrogation en arabe 
    $_ =~ s/\x{061F}/ /g;
     
     
    #supprimer point virgule en arabe 
     
     
    $_ =~ s/\x{066C}/ /g;
     
     
    $_ =~ s/\x{060D}/ /g;
     
    $_ =~ s/\x{060C}/ /g;
     
     
    #supprimer les expressions regulieres 
    $_ =~ s/\,//g;
     
    $_ =~ s/\;//g; 
    $_ =~ s/\*//g; 
    $_ =~ s/\-//g;  
    $_ =~ s/\_//g;
    $_ =~ s/\[//g;
    $_ =~ s/\]//g;
    $_ =~ s/\(//g; 
    $_ =~ s/\)//g;
    $_ =~ s/\{//g; 
    $_ =~ s/\}//g;    
    $_ =~ s/\'//g; 
    $_ =~ s/\"//g;
    $_ =~ s/\&//g;
    $_ =~ s/\|//g;   
    $_ =~ s/\///g;
    $_ =~ s/\\//g; 
    $_ =~ s/\+//g; 
    #supprimer les deux points
    $_ =~ s/\://g;
    #remplacer plusieurs points par un seul
    $_ =~ s/\.+/\./g;
    #remplacer les points par \n
     $_ =~ s/\./\\n/g;
    #Enlever les balise xml
    $_ =~ s/\<[A-Z]+\>//g; 
    $_ =~ s/\<[A-Z]+[a-z]+\>//g; 
    $_ =~ s/\<[A-Z]+[a-z]+\>//i; 
    $_ =~ s/\<[A-Z]+\>//i;  
    $_ =~ s/\<[a-z]+\>//i; 
    $_ =~ s/\<[a-z]+\>//g; 
    #Enlever les \n
    $_ =~ s/\\[a-z]//g;
    #Supprimer toute combinaison d'espaces et tabulations
    $_ =~s/[ \t]+/ /g;
    #Remplacer plusieurs espaces par un seul
    $_ =~s/ +/ /g;
    #Supprimer les lignes vides
    $_ =~ s/^\s+//; 
    print OUT_Ara $_;
    }
    Merci de m'aider

  2. #2
    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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour Bayouta,

    Hum, pas sûr que je puisse vraiment t'aider, n'ayant aucune expérience de manipulation de textes en arabe. J'essaie néanmoins quelques pistes.

    D'abord, est-ce ton fichier de sortie est bien généré? Et, si oui, contient-il bien l'ensemble de ton fichier en entrée hors balises HTML? Et est-ce que ton programme fait bien les autres substitutions de ton programme?

    Une remarque: l'opérateur s/// travaille par défaut sur la variable spéciale $_. Donc, les lignes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $_ =~ s/ +$//g;
    $_ =~ s/^\s+//;
    peuvent s'écrire plus simplement:

    Est-ce qu'il y a trois sortes différentes de points-virgules en arabe (\x{066C}, \x{060C}, \x{060D}?

    Autre remarque:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #Supprimer les lignes vides
    $_ =~ s/^\s+//;
    Ce code ne fait pas exactement ce que dit le commentaire: il supprime les espaces en début de ligne, chose que tu as déjà faite plus haut.

    Autre question: es-tu bien sûre que le fichier chez toi et celui chez ta copine sont identiques (ils n'ont peut-être pas exactement le même encodage)?

    Bon courage,
    Laurent.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    Bonsoir Laurent,
    concernant ton dernier question, on n'a le même fichier moi et ma copine;
    Oui le fichier résultat est bien généré,et mon script fait tous les autres substitutions sauf le point d'interrogation et le virgule. non on n'a un seul point virgule on arabe mais on a essayé tous les codes du virgule arabe

  4. #4
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    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 397
    Points : 2 046
    Points
    2 046
    Par défaut
    Bonjour,
    Caractères arabes
    061b & 061f
    ؟ ؛
    [Edit 08:10]
    Es-tu certaine de la version Perl de ta copine :
    malgré que je suppose du version perl qui est plus récente que celle de ma copine (version 5.16.3 et ma copine 5.0)
    La 5.0 je ne l'ai pas connue, et je dois avoir 3 fois l'âge de ta copine

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    Bonjour dmganges
    C'est elle qui m'a dit donc je ne suis pas sur
    J'ai essayé les deux code du point virgule et point d'interrogation mais mon problème résiste encore

  6. #6
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    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 397
    Points : 2 046
    Points
    2 046
    Par défaut
    Est-ce qu'on pourrait avoir un bout de ton fichier en pièce jointe, ou juste un copier/coller de la/les lignes qui contiennent ces caractères ?
    Un copier/coller entre balises [quote /quote] pour ne rien perdre !
    Merci !

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    Voici une partie de mon fichier
    وَقْتَاشْ يُخْرِجْ هُوَ؟
    مَاضِي سَاعَةْ وُ رْبُعْ
    أَيْ خُويَا
    بِاللَهْ تِسْكْرَةْ لْتُونِسْ مَاضِي سَاعَةْ
    مَاضِي سَاعَةْ وُ قَدَّاشْ هُوَ؟
    وُ رْبُعْ ٬حْدَاشْ وُ تِسْعَةْ مِيَّةْ
    شُوفْلِي تِسْعَةْ مِيَّةْ يْعَيْشِكْ
    مَا عَنْدِيشْ تِسْعَةْ مِيَّةْ
    خَمْسَةْ آلاَفْ عَنْدِكْشِي؟

  8. #8
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    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 397
    Points : 2 046
    Points
    2 046
    Par défaut
    وَقْتَاشْ يُخْرِجْ هُوَ
    مَاضِي سَاعَةْ وُ رْبُعْ
    أَيْ خُويَا
    بِاللَهْ تِسْكْرَةْ لْتُونِسْ مَاضِي سَاعَةْ
    مَاضِي سَاعَةْ وُ قَدَّاشْ هُوَ
    وُ رْبُعْ ٬حْدَاشْ وُ تِسْعَةْ مِيَّةْ
    شُوفْلِي تِسْعَةْ مِيَّةْ يْعَيْشِكْ
    مَا عَنْدِيشْ تِسْعَةْ مِيَّةْ
    خَمْسَةْ آلاَفْ عَنْدِكْشِي
    Avec :

    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
     
    #Script de nettoyage de corpus : de XML TO TXT
     
    #!/usr/bin/perl 
    use File::Spec;	
    use strict;
    use utf8;
    #my $RepBase ='D:\\Memoire Mastere\\Mon travail';
    my $RepBase = 'C:/_bayouta/';
     
    my $FicAraInt = File::Spec->catfile( $RepBase, 'Entree.txt');
    my $FicAraOut = File::Spec->catfile( $RepBase, 'Sortie.txt');
     
    open (IN_Ara, "<:utf8",  $FicAraInt ) or die "erreur d'ouverture.";
     
    open (OUT_Ara, ">:utf8", $FicAraOut ) or die "Impossible ouvrir fichier $FicAraOut en sortie\n";
     
     
    while(<IN_Ara>){
     
    	#supprimer point d'interrogation en arabe 
    	$_ =~ s/\x{061F}/ /g;
     
    	#supprimer point virgule en arabe 
    	$_ =~ s/\x{061B}/ /g;
     
    	print OUT_Ara $_;
    }
     
    close IN_Ara;
    close OUT_Ara;
     
    =pod
     
    #Supprimer les espaces en debut et en fin  de la chaine
    $_ =~ s/ +$//g;
    $_ =~ s/^\s+//; 
     
    #Enlever le debut de fichier xml
    $_ =~ s/\<\?[a-z]+\s[a-z]+\=\"[0-9]\.[0-9]\"\s[a-z]+\=\"[A-Z]+\-[0-9]\"\?\>//g;
     
    #remplacer plusieurs ! par un seul
    $_ =~ s/\!+/./g;
     
    #Remplacer ! et ? par un point
    $_ =~ s/\?+/./g; 
    #Enlever ; et le , 
    $_ =~ s/[;,]//g;
     
    #supprimer point d'interrogation en arabe 
    $_ =~ s/\x{061F}/ /g;
     
     
    #supprimer point virgule en arabe 
     
     
    $_ =~ s/\x{066C}/ /g;
     
     
    $_ =~ s/\x{060D}/ /g;
     
    $_ =~ s/\x{060C}/ /g;
     
     
    #supprimer les expressions regulieres 
    $_ =~ s/\,//g;
     
    $_ =~ s/\;//g; 
    $_ =~ s/\*//g; 
    $_ =~ s/\-//g;  
    $_ =~ s/\_//g;
    $_ =~ s/\[//g;
    $_ =~ s/\]//g;
    $_ =~ s/\(//g; 
    $_ =~ s/\)//g;
    $_ =~ s/\{//g; 
    $_ =~ s/\}//g;    
    $_ =~ s/\'//g; 
    $_ =~ s/\"//g;
    $_ =~ s/\&//g;
    $_ =~ s/\|//g;   
    $_ =~ s/\///g;
    $_ =~ s/\\//g; 
    $_ =~ s/\+//g; 
    #supprimer les deux points
    $_ =~ s/\://g;
    #remplacer plusieurs points par un seul
    $_ =~ s/\.+/\./g;
    #remplacer les points par \n
     $_ =~ s/\./\\n/g;
    #Enlever les balise xml
    $_ =~ s/\<[A-Z]+\>//g; 
    $_ =~ s/\<[A-Z]+[a-z]+\>//g; 
    $_ =~ s/\<[A-Z]+[a-z]+\>//i; 
    $_ =~ s/\<[A-Z]+\>//i;  
    $_ =~ s/\<[a-z]+\>//i; 
    $_ =~ s/\<[a-z]+\>//g; 
    #Enlever les \n
    $_ =~ s/\\[a-z]//g;
    #Supprimer toute combinaison d'espaces et tabulations
    $_ =~s/[ \t]+/ /g;
    #Remplacer plusieurs espaces par un seul
    $_ =~s/ +/ /g;
    #Supprimer les lignes vides
    $_ =~ s/^\s+//; 
    print OUT_Ara $_;
    }
    Attention j'ai invalidé une partie de ton code.
    A vue de nez, tu as oublié de préciser que le fichier en entrée doit être en UTF8...

    NB :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    open (IN_Ara, "<:utf8",  $FicAraInt ) or die "erreur d'ouverture.";
     
    open (OUT_Ara, ">:utf8", $FicAraOut ) or die "Impossible ouvrir fichier $FicAraOut en sortie\n";
    Dès que tu manipules des données en arabe, toujours, TOUJOURS préciser utf8
    Le résultat est-il OK ?
    Il serait probablement plus logique de remplacer ces caractères par rien :

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    Merci dmganges, j'ai essayé ton code mais il me supprime seulement les points d'interrogation

  10. #10
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    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 397
    Points : 2 046
    Points
    2 046
    Par défaut
    Oui mais dans ce que tu as collé, je n'ai pas vu de point-virgule, je n'ai pas pu contrôler...
    Sauf erreur de ma part bien sûr

  11. #11
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    Dans ce que j'ai collé il existe le point virgule
    وُ رْبُعْ ٬حْدَاشْ وُ تِسْعَةْ مِيَّةْ

  12. #12
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    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 397
    Points : 2 046
    Points
    2 046
    Par défaut
    Je crois qu'il faut qu'on se mette d'accord sur les points et leurs noms
    Les caractères sont en arabe :
    point-virgule ؛
    virgule ،
    apostrophe, ou simple quote ‘
    point .
    Ce qu'il y a dans ton texte, moi je l'appelle virgule \x{066C}

    Ajoute le dans le programme, il devrait disparaître de ton texte...

  13. #13
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    Oui vous avez raison, il s'appelle virgule, j'ai pas fait attention dans l'écriture
    Merci beaucoup dmganges , j'ai utilisé le code du virgule que vous m'avez donné il élimine certain virgule et il laisse certain, donc j'ai utiliser un autre code qui ce trouve dans le lien que vous m'avez donné aujourd'hui et ça marche correctement
    Merci une autre fois

  14. #14
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    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 397
    Points : 2 046
    Points
    2 046
    Par défaut
    Oui, en fait l'autre c'est l'apostrophe, il est vrai que dans certains éditeurs de texte il est très difficile de les différencier en arabe car ils sont positionnés quasiment à la même hauteur.

    OK, une autre fois, si tu postes un nouveau message, après l'avoir fait, et si tu penses que je peux être utile tu m'envoies un MP pour me le signaler, mais pas l'inverse c'est pas du jeu car je ne suis pas toujours scotché au forum, par contre ma messagerie me prévient toutes les 15mn...
    Ton message d'hier soir je ne l'ai vu que ce matin !
    Fait passé l'info à rimenis
    A+

  15. #15
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    OK je vais passé l'info à rimenis
    A+

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/03/2009, 08h27
  2. [RegEx] Regex autorisant les chiffres et les virgules (ou point)
    Par inmotion dans le forum Langage
    Réponses: 6
    Dernier message: 01/02/2009, 17h57
  3. ma base de donnée et les points d'interrogations
    Par IVIedia dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/09/2008, 17h25
  4. Remplacer les virgules par des points
    Par vatsyayana dans le forum Excel
    Réponses: 7
    Dernier message: 14/06/2008, 11h13
  5. Changer les virgules en points dans un fichier texte
    Par lilibert dans le forum MATLAB
    Réponses: 8
    Dernier message: 19/06/2007, 17h41

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