2010-12-06 2 views
0

Как переформулировать строку в perl?Переформулировать строковый запрос в perl

Например, рассмотрим строку «Где находится Лувр?».

Как я могу генерировать строки, подобные следующим:

«ТАКОЕ Louvre расположен»
«Лувр расположен»
«Лувр находится в»

Они используются в качестве запросов к выполните поиск в Интернете.

Я пытался сделать что-то вроде этого:

избавиться от пунктуации и разделить предложение на слова.
my @words = split//, $ _ [0];

Мне не нужно первое слово в строке, поэтому избавиться от него.
shift (@words);

И тогда мне нужно переместить следующее слово через массив - не уверен, как это сделать!

Наконец, преобразуйте массив слов обратно в строку.

ответ

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

Или вы можете просто "пузырь" $ х через массив: $ слов [$ п-1] и слов [$ п]

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

Несколько более подробный пример:

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); 
Смежные вопросы