Trouver la distance entre 2 mots d'un texte

Le
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é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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
jl_morel
Le #19294081
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
Paul
Le #19298981
> 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.
tfe
Le #19453881
On 2009-05-08, 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é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
Publicité
Poster une réponse
Anonyme