Получить определенное количество случайных слов из строки - PullRequest
1 голос
/ 11 сентября 2011

Как:

The quick, brown fox jumps over a lazy dog. DJs flock by when MTV ax quiz prog. Junk MTV quiz graced by fox whelps. Bawds jog, flick quartz, vex nymphs. Waltz, bad nymph, for quick jigs vex! Fox nymphs grab quick-jived waltz. Brick quiz whangs jumpy veldt fox. Bright vixens jump; dozy fowl quack. Quick wafting zephyrs vex bold Jim. Quick zephyrs blow, vexing daft Jim.

(это просто пример текста, реальный гораздо длиннее)

Как я могу получить, скажем, 5 слов из этого текста?

Я попытался использовать explode(' ', $text); Затем перетасовать массив и выбрать из него 5 элементов, но я получаю все знаки препинания и другие символы.Я просто хочу аз символов.Также в словах должно быть не менее 3 символов

Ответы [ 4 ]

1 голос
/ 11 сентября 2011

Вы можете использовать встроенный str_word_count для этого:

$words = str_word_count($str, 1);
shuffle($words);
$selection = array_slice($words, 0, 5);

увидеть его в действии .

Вы также можете использовать другой способ (например, array_rand) для выбора случайных слов из массива $words, если вы беспокоитесь о производительности;это просто самое удобное.

1 голос
/ 11 сентября 2011

Использование preg_split:

$words = preg_split('#[^a-z0-9]+#', $string, -1, PREG_SPLIT_NO_EMPTY);
$key = array_rand($words);
return $words[$key];

Это разделит строку на любую последовательность не буквенно-цифровых символов.

Если вы работаете с utf-8данные, попробуйте это вместо:

$words = preg_split('#[^\pL\pN]+#u', $string, -1, PREG_SPLIT_NO_EMPTY);
0 голосов
/ 11 сентября 2011

$ string = preg_replace ("/ [^ a-z] + / i", "", $ string);

перед тем как взорваться

0 голосов
/ 11 сентября 2011

Просто удалите ненужные символы

$words = explode(' ', $string);
$words = array_map (function ($word) {
    trim($word, '.,-:;"\'');
}, $words);

и отфильтруйте по длине слова

$words = array_filter($words, function($word) {
    return strlen($word) > 2;
}, $words);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...