Переформулируйте строковый запрос в Perl - PullRequest
0 голосов
/ 06 декабря 2010

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

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

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

"находится в Лувре"
"Лувр расположен "
" Лувр расположен "

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

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 06 декабря 2010

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

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);
1 голос
/ 06 декабря 2010
  1. Как мне сгенерировать все перестановки массива в Perl?
  2. Затем используйте join, чтобы склеить каждый массив перестановок обратно в одну строку.
0 голосов
/ 06 декабря 2010
my @head;
my ($x, @tail) = @words;
while (@tail) {
    push @head, shift @tail;
    print join " ", @head, $x, @tail;
};

Или вы можете просто «пузырить» $ x через массив: $ words [$ n-1] и words [$ n]

foreach $n (1..@words-1) { 
    ($words[$n-1, $words[$n]) = ($words[$n], $words[$n-1]);
    print join " ", @words, "\n";
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...