Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Trouver la distance entre 2 mots d'un texte

3 réponses
Avatar
Paul
Bonjour,

J'ai un texte pour lequel je souhaite trouver la distance (en nombre
de mots) entre 2 mots.
Exemple : le texte est le suivant :
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam sem
nisl, sodales ut molestie quis, rhoncus vitae urna. Sed rutrum varius
dolor a dapibus."

Je demande au script d'avoir (peu importe la forme tableau, hash,
etc...) la distance entre le mot "dolor" et le mot "Etiam" ; et il me
ressors : 5 (car 5 mots s=E9parent les 2 mots demand=E9s) et 12 (car le
mot "dolor" est pr=E9sent 2 fois).

J'ai pas trouv=E9 de librairie sur cpan...

3 réponses

Avatar
jl_morel
Dans l'article <c7af2f7c-07a9-47a4-964b-
, a dit...

J'ai un texte pour lequel je souhaite trouver la distance (en nombre
de mots) entre 2 mots.
Exemple : le texte est le suivant :
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam sem
nisl, sodales ut molestie quis, rhoncus vitae urna. Sed rutrum varius
dolor a dapibus."

Je demande au script d'avoir (peu importe la forme tableau, hash,
etc...) la distance entre le mot "dolor" et le mot "Etiam" ; et il me
ressors : 5 (car 5 mots séparent les 2 mots demandés) et 12 (car le
mot "dolor" est présent 2 fois).




Je propose le script suivant. Il détermine le rang de chaque mot de la
chaîne que l'on range dans un hash de listes. Ensuite, il calcule la
distance de deux mots en faisant la différence des rangs des mots moins 1.

Attention à la regexp qui découpe les mots : la notion de mot dépend de la
langue ("aujourd'hui" est un seul mot en français) et du codage des
caractères.

Si on cherche la distance entre un mot et lui-même, le script renvoie des
distances égales à -1 ! Il faut adapter le script le cas échéant.

#!/usr/bin/perl
use strict;
use warnings;

my $s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam sem
nisl, sodales ut molestie quis, rhoncus vitae urna. Sed rutrum varius
dolor a dapibus.";

my %rang;
my $i;

while ( $s =~ /([A-Za-zÆæ]+)/g ) { # découpage en mots
push @{ $rang{$1} }, $i++;
}

my $mot1 = 'dolor';
my $mot2 = 'Etiam';
my @distance;

foreach my $r ( @{ $rang{$mot1} } ) { # calcul des distances
push @distance, map { abs( $_ - $r ) - 1 } @{ $rang{$mot2} };
}

print "Distance $mot1 - $mot2 = ", join ' ', @distance;

__DATA__


--
J-L.M.
http://www.bribes.org/perl
Avatar
Paul
> Je propose le script suivant. Il détermine le rang de chaque mot de la
chaîne que l'on range dans un hash de listes. Ensuite, il calcule la
distance de deux mots en faisant la différence des rangs des mots moins 1.



tout simplement... :-) bon, par contre, je demandais pas à ce que vous
m'écriviez le script. :-) jvoulais juste une aide ; mais bon..

sinon, pour le découpage de mot, je pense utiliser
Lingua::EN::Splitter qui est à peu près cohérent même pour le fran çais.
Avatar
tfe
On 2009-05-08, Paul wrote:
Bonjour,

J'ai un texte pour lequel je souhaite trouver la distance (en nombre
de mots) entre 2 mots.
Exemple : le texte est le suivant :
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam sem
nisl, sodales ut molestie quis, rhoncus vitae urna. Sed rutrum varius
dolor a dapibus."

Je demande au script d'avoir (peu importe la forme tableau, hash,
etc...) la distance entre le mot "dolor" et le mot "Etiam" ; et il me
ressors : 5 (car 5 mots séparent les 2 mots demandés) et 12 (car le
mot "dolor" est présent 2 fois).

J'ai pas trouvé de librairie sur cpan...




Bonjour,

Une autre idée de script:

#!/usr/bin/perl

$ligne = "mot1 mot2 mot3 mot4";

if($ligne=~ /bmot1bW+(.*?)W+bmot4b/)
{
print "Nombre de mots entre: ".scalar split(/W/,$1)."n";
}

En esperant que cela t'aidera...

--
tfe
htp://tfeserver.be