2015-12-24 3 views
3

У меня длинный текст (3600 предложений), и я хочу изменить порядок случайных предложений. Есть несколько простых PHP-скриптов, которые могут изменять порядок предложений?Изменение порядка случайных предложений

+4

Поместите предложения в массив и используйте 'shuffle', чтобы рандомизировать массив. – Barmar

+5

Пожалуйста, покажите, что вы пробовали, мы не здесь, чтобы сделать вашу работу за вас. – Barmar

+0

Завершите все ваши предложения словами. или они могут также закончиться с?? или '!' ? –

ответ

2

Я построил решение, которое решает проблему для предложений заканчивая "" "!" или "?". Я заметил, что не стоит включать последнюю часть массива предложений в перетасовку, потому что последняя часть никогда не должна заканчиваться конкретным символом, который мы разделяем:

«Привет. | Здравствуйте. | "

Надеюсь, вы поняли эту идею. Поэтому я перетасовываю все элементы, кроме последнего. И я делаю работу отдельно для «.», «?» И «!».

Вы должны знать, что «...», «?!», «!!! 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); 

?> 
5

Вы можете сделать это вот так. Разверните строку в конце предложения, например, полную остановку. Перемешайте массив, используя функцию 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); 
+0

Это работает! Ты гений, я люблю тебя! :) Возможно ли реализовать «?» а также "!"? Я не программист. Просто вставьте символы здесь - ('.' '?' '!', $ Предложения)? Спасибо! – JiriJur