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 :

Insertion des caractères dans une chaine


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 Insertion des caractères dans une chaine
    Bonjour,
    J'ai un script qui fait la phonétisation, et aprés la phonétisation je dois insérer un phonéme, mais avant tout je dois faire des tests par exemple:
    je dois insérer le phonéme AE
    pour le mot KH UW Y AE: , j'ai le phonéme UW et le phonéme AE: donc je dois pas insérer AE,
    mais par exemple pour le mot T F DD DD L, je dois insérer le AE aprés le deuxiéme phonéme, car dans le dialecte tunisian la plupart des mots commence par SUKUN et se termine par SUKUN, donc j'aurais comme résultat :
    T F AE DD DD AE L
    si le mot se termine par un voyelle longue donc le premier caractère porte un diacritique autre que SUkun par exemple le mot
    TH M M AE: SH IY donc je dois insérer le phonéme AE aprés le premier caractére, et si deux phonéme qui se suit et son égaux je dois pas insérer le phonéme AE, comme l'exemple précédent M et M.
    L'algorithme d'insertion donc consiste a tester l’existence des voyelles (UW, UH, IH, AE: ) dans le mot avant l'insertion,et d'insérer le phonéme AE
    Voici un essai mais ce n'est pas efficace du tout et il m'insére le AE sans prendre compte des tests ainsi, je sais pas comment faire l'insertion et j'ai fait de remplacement !!
    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
     
    my $chaine=$phoneme;
            my $chaine2=$phoneme;		
    		my @words = split(/ /, $chaine);
    		my $size1 = scalar(@words);
            foreach $k (0..$size1-1)	   
    	   {
    	        if ($words[$k] eq "UW")
    			{
    			    print {$fh_Aran} "$chaine\n";
    			}
                else
    			{
    			    $chaine =~ s/(.{3})(.+)/$1 AE $2/;
    		        $chaine2 =~ s/(.{5})(.+)/$1 AE $2/;
    			}
     
    		    print {$fh_Aran} "$mot\t\t\t";                           
    		    print {$fh_Aran} "$chaine\n";
    		    print {$fh_Aran} "$mot\t\t\t";                           
    		    print {$fh_Aran} "$chaine2\n";
    		}
    j'ai besoin de vos aides :'(
    Merci

  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 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Si j'ai bien compris (ce qui est loin d'être garanti), il me semble que ton erreur est ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($words[$k] eq "UW")
    A mon avis, tu ne veux pas tester si le mot est égal à "UW", mais s'il contient "UW". Si c'est bien cela, remplace cette ligne par la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($words[$k] =~ /UW/)
    ou, cette autre solution sans doute plus rapide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (index ($words[$k], "UW") >= 0)

  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,
    J'ai essayé mais il ignore le test !!!!!

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    si j'ai bien compris, tu souhaites remplacer tous les "UW, UH, IH, AE:" par "AE"
    cette méthode devrait être bonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    my $chaine=$phoneme;
            my $chaine2=$phoneme;		
    		my @words = split(/ /, $chaine);
     
            foreach my $word (@words)	   
    	   {
    	        $word=~s/UH|UW|IH|AE:/AE/g;
    ...
    		}

  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
    Merci 6ril23,
    Mais je voulais pas remplacer les "UW, UH, IH, AE:" par "AE", mais si je trouve l'un de ses phonéme je dois pas insérer AE aprés ses phonémes, mais aprés le phonéme suivant comme par exemple:
    KH UW Y AE: donc je dois pas avoir ce résultat KH AE UW Y AE: (c'est faux)
    mais donc le cas suivant W Q T AE: SH je dois insérer le AE aprés le W, donc j'obtiens W AE Q T AE: SH

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Comme la plupart d'entre nous ne parlons pas, et n'écrivons pas le tunisien, ni d'ailleurs aucune langue arabe, tu dois nous donner des explications qui soient le plus indépendante de la langue, et surtout pas penser que certaines construction grammaticales ou lexicales nous sont familières. Ainsi, tes deux explications ne me suffisent toujours pas à comprendre ta problématique.

    Dans ton premier exemple, le mot "T F DD DD L", tu indiques qu'il faut insérer AE après le 2e phonème, donc après F, mais tu dis qu'il faut obtenir le résultat suivant "T F AE DD DD AE L" où tu insères AE à deux endroits dans le mot. Ce n'est donc pas clair.

    Pourrais-tu indiquer simplement :
    - sur quel critère il faut insérer AE (toujours, seulement si les voyelles UW, UH, IH, AE: sont présentes dans le mot) ?
    - à quelle emplacement dans le mot dans tous les cas de figures (avec présence ou absence de voyelles UW, UH, IH, AE: )
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  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
    Bonjour,
    Oui vous avez raison, je vais vous expliquer mieux
    Veuillez trouvez ci-joint la liste des phonèmes.
    Mon script consiste un peu a ajouter des voyelles ou mots non voyellé.
    Donc si une consonne est suivi par un voyelle donc je dois pas insérer le AE.
    Et si deux même consonne se suit alors je dois insérer avant et après ces deux consonne le AE. comme dans cet exemple T F AE DD DD AE L.
    On a dans le dialecte tunisien la pluart des mots se termine par SUKUN et parfois par un voyelle longue. donc pour chaque mot il y a un consonne est suivit par un voyelle et son suivant ne posséde pas un voyelle etc...
    par exemple:
    TH AE M M AE: SH le dernier consonne n'est pas voyellé et le premier est voyellé .
    Y AE M SH IY le dernier caractère est voyelle et le précédent ne possède pas de voyellation etc..
    donc je dois parcourir le mot en commençant par le dernier caractère
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Remplacer des caractères dans une chaine interbase 7.5
    Par zaydoun_391 dans le forum InterBase
    Réponses: 1
    Dernier message: 15/04/2008, 16h57
  2. insertion de caractères dans une chaine existante.
    Par rassoncaro dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/03/2008, 14h25
  3. Rajouter des caractères dans une chaine
    Par pymouse dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 22/05/2007, 17h35
  4. [Tableaux] Supprimer des caractères dans une chaine
    Par ddubois dans le forum Langage
    Réponses: 10
    Dernier message: 16/12/2006, 13h53
  5. Réponses: 4
    Dernier message: 29/08/2006, 17h44

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