Je ne sais pas trop comment rechercher une librairie qui me permette
la chose suivante :
- je fourni un texte ($input)
- je fourni une table $hash de ce style : {key1 =3D>Array('val1', 'val1
bis'), key2 =3D>Array('val2', 'val2 bis')}
Et ensuite la librairie en question va aller rechercher le nombre
d'occurences de key1, et de key2 contenues dans $input. S=E2chant que le
nombre d'occurences de key1 est la somme des occurences de chaque
=E9l=E9ments de $hash{'key1'}.
Un exemple pour mieux comprendre :
$hash =3D {key1 =3D>Array('val1', 'val bis'), key2 =3D>Array('machin',
'truc')};
$input =3D "val1 est un super test Val bis mais aussi un test ridicule
sur vAL1... Ensuite, on fera un test pour TrUc car c'est assez
complexe comme maChin.";
Je souhaite avoir ce retour :
- Nombre d'occurences de 'key1' =3D 3
- Nombre d'occurences de 'key2' =3D 2
Vous connaissez une librairie qui me permette ce que je veux ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jogo
Sur fr.comp.lang.perl, Paul disait :
Vous connaissez une librairie qui me permette ce que je veux ?
Non.
Par contre, expliqué comme ça, ça ne me paraît pas trop compliqué :
my %frequence_of; for my $key (keys %hash) { for my $val (@{ $hash{$key} }) { if (my $nb = $input =~ s/Q$val/$&/ig) { $frequence_of{$key} += $nb; } } } dump(%frequence_of);
Mais je trouve que ton %hash est "à l'envers". Je préfèrerais le transformer comme ça :
my %usefull_hash; for my $key (keys %hash) { for my $val (@{ $hash{$key} }) { push @{ $usefull_hash{$val} }, $key; } }
Ensuite, tu peux l'utiliser ainsi :
for my $regex (keys %usefull_hash) { if (my $nb = $input =~ s/Q$regex/$&/ig) { for my $key (@{ $usefull_hash{$regex} }) { $frequence_of{$key} += $nb; } } }
Pour une seule chaine à tester, c'est un peu plus long. Mais si tu teste plein de chaines, ça doit être rentable de retourner le hash.
-- Ce qui rend les voyages à peu près inutiles, c'est que l'on se déplace toujours avec soi. - Henri Calet - L'Italie à la paresseuse -
Sur fr.comp.lang.perl, Paul disait :
Vous connaissez une librairie qui me permette ce que je veux ?
Non.
Par contre, expliqué comme ça, ça ne me paraît pas trop compliqué :
my %frequence_of;
for my $key (keys %hash) {
for my $val (@{ $hash{$key} }) {
if (my $nb = $input =~ s/Q$val/$&/ig) {
$frequence_of{$key} += $nb;
}
}
}
dump(%frequence_of);
Mais je trouve que ton %hash est "à l'envers". Je préfèrerais le
transformer comme ça :
my %usefull_hash;
for my $key (keys %hash) {
for my $val (@{ $hash{$key} }) {
push @{ $usefull_hash{$val} }, $key;
}
}
Ensuite, tu peux l'utiliser ainsi :
for my $regex (keys %usefull_hash) {
if (my $nb = $input =~ s/Q$regex/$&/ig) {
for my $key (@{ $usefull_hash{$regex} }) {
$frequence_of{$key} += $nb;
}
}
}
Pour une seule chaine à tester, c'est un peu plus long. Mais si tu
teste plein de chaines, ça doit être rentable de retourner le hash.
--
Ce qui rend les voyages à peu près inutiles,
c'est que l'on se déplace toujours avec soi.
- Henri Calet - L'Italie à la paresseuse -
Vous connaissez une librairie qui me permette ce que je veux ?
Non.
Par contre, expliqué comme ça, ça ne me paraît pas trop compliqué :
my %frequence_of; for my $key (keys %hash) { for my $val (@{ $hash{$key} }) { if (my $nb = $input =~ s/Q$val/$&/ig) { $frequence_of{$key} += $nb; } } } dump(%frequence_of);
Mais je trouve que ton %hash est "à l'envers". Je préfèrerais le transformer comme ça :
my %usefull_hash; for my $key (keys %hash) { for my $val (@{ $hash{$key} }) { push @{ $usefull_hash{$val} }, $key; } }
Ensuite, tu peux l'utiliser ainsi :
for my $regex (keys %usefull_hash) { if (my $nb = $input =~ s/Q$regex/$&/ig) { for my $key (@{ $usefull_hash{$regex} }) { $frequence_of{$key} += $nb; } } }
Pour une seule chaine à tester, c'est un peu plus long. Mais si tu teste plein de chaines, ça doit être rentable de retourner le hash.
-- Ce qui rend les voyages à peu près inutiles, c'est que l'on se déplace toujours avec soi. - Henri Calet - L'Italie à la paresseuse -
arf... : http://perldoc.perl.org/perlfaq6.html "The use of Q causes the <.> in the regex to be treated as a regular character, so that P. matches a P followed by a dot."
On 12 août, 13:15, Paul <ernond_p...@yahoo.fr> wrote:
> my $nb = $input =~ s/Q$regex/$&/ig
Que sgnifie le Q ?
arf... :
http://perldoc.perl.org/perlfaq6.html
"The use of Q causes the <.> in the regex to be treated as a regular
character, so that P. matches a P followed by a dot."
arf... : http://perldoc.perl.org/perlfaq6.html "The use of Q causes the <.> in the regex to be treated as a regular character, so that P. matches a P followed by a dot."
Paul Gaborit
À (at) Wed, 12 Aug 2009 04:19:36 -0700 (PDT), Paul écrivait (wrote):
On 12 août, 13:15, Paul wrote:
> my $nb = $input =~ s/Q$regex/$&/ig
Que sgnifie le Q ?
arf... : http://perldoc.perl.org/perlfaq6.html "The use of Q causes the <.> in the regex to be treated as a regular character, so that P. matches a P followed by a dot."
C'est un peu plus que ça : Q désactive les meta-caractères de motif jusqu'au prochain E. Dans les meta-caractères, on trouve bien sûr '.' mais aussi '+', '*', '?', '(', etc.
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/> Perl en français - <http://perl.mines-albi.fr/>
À (at) Wed, 12 Aug 2009 04:19:36 -0700 (PDT),
Paul <ernond_paul@yahoo.fr> écrivait (wrote):
On 12 août, 13:15, Paul <ernond_p...@yahoo.fr> wrote:
> my $nb = $input =~ s/Q$regex/$&/ig
Que sgnifie le Q ?
arf... :
http://perldoc.perl.org/perlfaq6.html
"The use of Q causes the <.> in the regex to be treated as a regular
character, so that P. matches a P followed by a dot."
C'est un peu plus que ça : Q désactive les meta-caractères de motif
jusqu'au prochain E. Dans les meta-caractères, on trouve bien sûr '.'
mais aussi '+', '*', '?', '(', etc.
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
À (at) Wed, 12 Aug 2009 04:19:36 -0700 (PDT), Paul écrivait (wrote):
On 12 août, 13:15, Paul wrote:
> my $nb = $input =~ s/Q$regex/$&/ig
Que sgnifie le Q ?
arf... : http://perldoc.perl.org/perlfaq6.html "The use of Q causes the <.> in the regex to be treated as a regular character, so that P. matches a P followed by a dot."
C'est un peu plus que ça : Q désactive les meta-caractères de motif jusqu'au prochain E. Dans les meta-caractères, on trouve bien sûr '.' mais aussi '+', '*', '?', '(', etc.
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/> Perl en français - <http://perl.mines-albi.fr/>
Nicolas George
Paul Gaborit wrote in message :
> my $nb = $input =~ s/Q$regex/$&/ig
C'est un peu plus que ça : Q désactive les meta-caractères de motif jusqu'au prochain E.
Précisons que la recherche du E correspondant est faite avant l'interpolation, ce qui fait que si $regex contient la chaîne E, ce sera remplacé par E de manière à la chercher littéralement.
C'est, évidemment, le seul comportement raisonnable, mais c'est toujours mieux d'être rassuré sur le fait que c'est bien le comportement adopté.
Paul Gaborit wrote in message <wt9k5195iy2.fsf@marceau.enstimac.fr>:
> my $nb = $input =~ s/Q$regex/$&/ig
C'est un peu plus que ça : Q désactive les meta-caractères de motif
jusqu'au prochain E.
Précisons que la recherche du E correspondant est faite avant
l'interpolation, ce qui fait que si $regex contient la chaîne E, ce sera
remplacé par \E de manière à la chercher littéralement.
C'est, évidemment, le seul comportement raisonnable, mais c'est toujours
mieux d'être rassuré sur le fait que c'est bien le comportement adopté.
C'est un peu plus que ça : Q désactive les meta-caractères de motif jusqu'au prochain E.
Précisons que la recherche du E correspondant est faite avant l'interpolation, ce qui fait que si $regex contient la chaîne E, ce sera remplacé par E de manière à la chercher littéralement.
C'est, évidemment, le seul comportement raisonnable, mais c'est toujours mieux d'être rassuré sur le fait que c'est bien le comportement adopté.