У меня длинный текст (3600 предложений), и я хочу изменить порядок случайных предложений. Есть несколько простых PHP-скриптов, которые могут изменять порядок предложений?Изменение порядка случайных предложений
ответ
Я построил решение, которое решает проблему для предложений заканчивая "" "!" или "?". Я заметил, что не стоит включать последнюю часть массива предложений в перетасовку, потому что последняя часть никогда не должна заканчиваться конкретным символом, который мы разделяем:
«Привет. | Здравствуйте. | "
Надеюсь, вы поняли эту идею. Поэтому я перетасовываю все элементы, кроме последнего. И я делаю работу отдельно для «.», «?» И «!».
Вы должны знать, что «...», «?!», «!!! 11 !! 1 !!» вызовет большие неприятности. :) :)
<?php
function randomizeOrderOnDelimiter($glue,$sentences){
$sentencesArray = explode($glue, $sentences);
// Get out the items to shuffle: all but the last.
$work = array();
for ($i = 0; $i < count($sentencesArray)-1; $i++) {
$work[$i] = $sentencesArray[$i];
}
shuffle($work); // shuffle them
// And put them back.
for ($i = 0; $i < count($sentencesArray)-1; $i++) {
$sentencesArray[$i] = $work[$i];
}
$sentences = implode($glue, $sentencesArray);
return $sentences;
}
$sentences = 'Hello, this is one sentence. This is a second. THis is a third. This is a forth. This is a fifth. Sixth is imperative! Is seventh a question? Eighth is imperative! Is ninth also a question? Tenth.';
$sentences = randomizeOrderOnDelimiter('.', $sentences);
$sentences = randomizeOrderOnDelimiter('?', $sentences);
$sentences = randomizeOrderOnDelimiter('!', $sentences);
var_dump($sentences);
?>
Вы можете сделать это вот так. Разверните строку в конце предложения, например, полную остановку. Перемешайте массив, используя функцию shuffle
. Затем взорвите строку, добавив все стопы назад.
Выход будет что-то вроде:
Hello, this is one sentence. This is a fifth. This is a forth. This is a second.. THis is a third
$sentences = 'Hello, this is one sentence. This is a second. THis is a third. This is a forth. This is a fifth.';
$sentencesArray = explode('.', $sentences);
array_filter($sentencesArray);
shuffle($sentencesArray);
$sentences = implode('.', $sentencesArray);
var_dump($sentences);
Это работает! Ты гений, я люблю тебя! :) Возможно ли реализовать «?» а также "!"? Я не программист. Просто вставьте символы здесь - ('.' '?' '!', $ Предложения)? Спасибо! – JiriJur
Поместите предложения в массив и используйте 'shuffle', чтобы рандомизировать массив. – Barmar
Пожалуйста, покажите, что вы пробовали, мы не здесь, чтобы сделать вашу работу за вас. – Barmar
Завершите все ваши предложения словами. или они могут также закончиться с?? или '!' ? –