Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1647 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] substitutions, expressions régulières et dictionnaire ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Perl] substitutions, expressions régulières et dictionnaire ...

n°521052
trueslash
(╯°□°)╯︵ MMM
Posté le 23-09-2003 à 10:13:10  profilanswer
 

:hello:
 
Je débute en PERL et je dois travailler sur un petit projet (type ELIZA pour ceux qui connaissent) et j'ai un p'tit problème avex le commande de substitution :(
 
voilà ce que je cherches à faire :
 

$maChaine = s/I am/are you/;

(l'idée est de retourner les questions de l'utilisateur)
 
pour me simplifier la tâches, j'ai créé un dico comme ça :
 

inver{'I am'} = 'are you';
inver{'you are'} = 'am I';
...
...
...


 
j'utilise ça de cette façon :
 

$maChaine = s/(I am|you are)/$inver{$1}/;


 
ça fonctionne mais je dois écrire (I am|you are) et la liste s'allonge dramatiquement, je voudrais donc trouver le moyen de donner toutes les clés d'un dictionnaire dans le premier paramètre du s
 
à votre bon coeur :)

mood
Publicité
Posté le 23-09-2003 à 10:13:10  profilanswer
 

n°521077
anapajari
s/travail/glanding on hfr/gs;
Posté le 23-09-2003 à 10:28:07  profilanswer
 

perso je ferais un truc dans ce gout la:

Code :
  1. foreach $cle (keys %inver)
  2.    $maChaine =~ s/$cle/$inver{$cle}/gi;
  3. }


mais tu fais une boucle et si tu as beaucoup de clé ça peut ramer.
Sinon tu peux essayer quelque chose comme ça:

Code :
  1. my $cle = "(". join('|', keys %inver) . " )";
  2. $maChaine =~  s/$cle/$inver{$1}/gi;


Si ya  des trucs que tu comprends pas hesites pas !!!
 

n°521084
trueslash
(╯°□°)╯︵ MMM
Posté le 23-09-2003 à 10:35:06  profilanswer
 

vais essayer ça
 
la seconde méthode devrait fonctionner à priori
 
(la première marchera pas trop vu que ça va par exemple me transformer un my en your puis ce même your en my [:joce])

n°521137
pospos
Posté le 23-09-2003 à 11:54:19  profilanswer
 

des petits trucs qui pourraient t'aider:
 
un clone d'eliza:
http://search.cpan.org/~jnolan/Chatbot-Eliza-1.04/
 
un truc pour faires des regexps rapides à partir de listes:
http://search.cpan.org/author/DANK [...] xp/List.pm
 
un truc pour eviter les problemes des substiutions chainées (tres important pour ton probleme):
http://search.cpan.org/author/LPAL [...] arallel.pm
 
et sinon, au lieu de faire

Code :
  1. inver{'I am'} = 'are you';
  2. inver{'you are'} = 'am I';
  3. ...
  4. ...
  5. ...


tu peu simplement taper:

Code :
  1. %invert = (
  2. 'I am' => 'are you',
  3. 'you are' => 'am I',
  4. );

n°521975
trueslash
(╯°□°)╯︵ MMM
Posté le 24-09-2003 à 11:11:05  profilanswer
 

merci beaucoup pour ton aide :)
 
j'ai pas tout utilisé mais vu que le truc était à faire en une semaine, je pense que j'ai qq chose d'acceptable :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] substitutions, expressions régulières et dictionnaire ...

 

Sujets relatifs
[Perl] use strict !!![ Perl] Truc bizarre avec @ARGV
Expressions régulières[PHP - REGEX] J'ai du mal avec les expressions regulières...
[Perl] Appeler un script (avec des param) à partir d'un autre script ?[Perl] décomposer un nombre, comment ?
[Perl]Valider le format d'une chaine de caractères 
Plus de sujets relatifs à : [Perl] substitutions, expressions régulières et dictionnaire ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR