2010-12-06 7 views
0

Comment reformuler une chaîne en perl? Par exemple, considérons la chaîne "Où se trouve le musée du Louvre?"Reformuler une requête de chaîne en perl

Comment puis-je générer des chaînes comme les suivantes:

« l'est du Louvre situé »
« Louvre est situé »
« Louvre situé est »

Ces derniers sont utilisés comme questions à faire une recherche sur le Web.

je tente de faire quelque chose comme ceci:

Débarrassez-vous de ponctuations et de diviser la phrase en mots.
mes @ mots = split//, $ _ [0];

Je n'ai pas besoin du premier mot de la chaîne, donc je m'en débarrasse.
décalage (mots @);

Et puis j'ai besoin de passer le mot suivant à travers le tableau - pas sûr de savoir comment faire cela !!

Enfin, convertissez le tableau de mots en chaîne.

Répondre

0
my @head; 
my ($x, @tail) = @words; 
while (@tail) { 
    push @head, shift @tail; 
    print join " ", @head, $x, @tail; 
}; 

Ou vous pouvez juste $ x "bulle" à travers le tableau: mots $ [n-1 $] et des mots [$ n]

foreach $n ([email protected]) { 
    ($words[$n-1, $words[$n]) = ($words[$n], $words[$n-1]); 
    print join " ", @words, "\n"; 
}; 
1

exemple Un peu plus bavard:

use strict; 
use warnings; 

use Data::Dumper; 


my $str = "Where is the Louvre located?"; 

# split into words and remove the punctuation 
my @words = map {s/\W+//; $_} split//, $str; 

# remove the first two words while storing the second 
my $moving = splice @words, 0 ,2; 


# generate the variations 
my @variants; 
foreach my $position (0 .. $#words) { 

    my @temp = @words; 
    splice @temp, $position, 0, $moving; 
    push @variants, \@temp; 

} 

print Dumper(\@variants); 
Questions connexes