Чем перемешать предложения?

Q5
На сайте с 11.09.2009
Offline
85
3427

Есть ли какая либо программа/скрипт для корректного перемешивания предложений в тексте(не строк)? Прошу поделиться. Покупать доргены ради одной функции мне не особо хочется, самому реализовывать тоже.

K
На сайте с 09.01.2010
Offline
30
#1

Воспользуйся паблик доргенами.

I
На сайте с 14.10.2008
Offline
199
#2

Можно сделать каждое предложение через строчку, путём замены точки на точку и пропуск строки, а потом это перемешать KWK, немного неудобно конечно, может кто скриптом поделится.

20💲 Бесплатно на баланс API DeepSeek 👉 https://vk.cc/cK73ur | 💲💲💲 Моментальный выпуск виртуальных карт для оплаты за рубежом 👉 https://bit.ly/online-cards | 📝 Нейро Тексты для сайтов, быстро, дешево и качественно 👉 https://bit.ly/xgptwriter 👈
alexandr_nv
На сайте с 23.04.2009
Offline
39
#3

Написал PHP скриптик

<html>

<body>
<form method='post' target='_self'>
<textarea name='sentences' style='width: 100%; height: 90%;'><?php
if (isset($_POST['sentences'])) echo shuffle_sentences($_POST['sentences']);
?></textarea>
<input type='submit' value='Перемешать предложения' />
</form>
</body>
</html>

<?php
function shuffle_sentences($data) {
$data = str_replace("\r\n", " ", $data);
$pattern = "/(\?+\s*|\.+\s*|!+\s*)/";
$data = preg_split($pattern, $data, -1, PREG_SPLIT_DELIM_CAPTURE );


$sentences = array();
for ($i=0; $i < sizeof($data); $i++) {
$sentence = $data[$i];
if ($sentence == "") { $i++; continue; }
if (isset($data[$i+1])) {
$sentence .= trim($data[$i+1]);
$i+=1;
}
else $sentence .= ".";
$sentences[] = $sentence;
}
shuffle($sentences);
$data = implode(" ", $sentences);
return $data;
}

?>

Предложения разбиваются по знакам 'точка', 'вопросительный знак', 'восклицание'. Также, если на конце будет несколько повторяющихся знаков - это будет считаться за одно предложение.

Пример: "Слово слово.", "Слова слова!", "Слова слова?" и с повторяющимися знаками на конце: "Слова слова!!!!!", "Слова слова..." и т.д.

И все знаки перехода строки удаляются. То есть, если одно предложение разбита на несколько строк - оно склеится в одну.

CS
На сайте с 26.08.2008
Offline
19
#4


#!/usr/bin/perl -w

use strict;

my $file = shift || die "enter file\n";

open(F, $file);
undef $/;
my $content = <F>;
$/ = "\n";
close(F);

my (@text) = ($content =~ m{(.+?(?:\.|\!|\?|$))}igs);
@text = sort { int(rand() * 2) * 2 - 1 } @text;

open(F, '>out.txt');
print F "@text";
close(F);

Скрипт перемешивает рандомом предложения в тексте, предложения считаются до (точки, восклицательного знака, знака вопроса или конце текста)

запуск: perl script.pl file.txt

на выходе out.txt с рандомным текстом (перемешанные предложения)

если я правильно понял что нужно ТС :-)

если нет звиняйте...

ColdSteam добавил 07.04.2010 в 22:26

лучше не пихать скрипту файлы большого объема (например более 200-300 метров) т.к. все операции происходят в памяти =)

Q5
На сайте с 11.09.2009
Offline
85
#5
alexandr_nv:

Предложения разбиваются по знакам 'точка', 'вопросительный знак', 'восклицание'. Также, если на конце будет несколько повторяющихся знаков - это будет считаться за одно предложение.
Пример: "Слово слово.", "Слова слова!", "Слова слова?" и с повторяющимися знаками на конце: "Слова слова!!!!!", "Слова слова..." и т.д.
И все знаки перехода строки удаляются. То есть, если одно предложение разбита на несколько строк - оно склеится в одну.

Спасибо, как раз то что нужно.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий