i
Полезная информация
Свернуть
09.07.2025
Вот такая игра в стиле новеллы. Осталось доработать енто до фантастического романа. Только сначала убедиться, что все это уже миллион раз читано-перечитано-писано-переписано. Там в игре ведущий - нейросеть, я за игрока принимаю решение, а нейросеть подкидывает мне события. Ерунда, конечно, но уже опосля такого хочется баллотироваться в президенты. И хватать себя за руку, чтобы не потратить деньги на продолжение.
Как стопроцентно защитить свою книгу от «распирачивания»))
ru en sv de fr pt es it zh ar nl

Как перетасовать предложения

Очередной дурацкий вопрос.

Ну о-о-очень дурацкий.

Пока у меня в тексте все в строгом порядке:

Детектив такой-то узнает о преступлении:  читает газету.

Старая газета шелестит страницами.

У детектива черные волосы.

Детектив любит кофе.

Кто-то украл у старой графини бриллиантовое колье...

...и так далее.

 

А ведь чтобы тупо поменять предложения местами, программе нужно обосраться и не встать.

Потому что.

Для этого нужно сформулировать каждое предложение:

Выбери профессию героя.

Выбери пробел.

Выбери имя героя.

Выбери пробел.

Выбери глагол узнавания.

Выбери пробел.

Выбери предлог О или Про.

Выбери пробел.

Выбери слово преступление в предложном падеже.

Выбери знак препинания. Точку. Или двоеточие, если дальше про газету.

Дальше следующее предложение – читает газету. Для него:

Выбери глагол читает.

Выбери слово газета в родительном падеже.

И все это занеси в таблицу.

Сейчас прикинула, сколько у таблицы будет столбцов. Как минимум тридцать:

И это без учета того, что у каждого слова и даже у каждого пробела и знака препинания свой индекс, его тоже в таблицу надоть.

Потом даем программе перемешать предложения в абзаце: например, начать – Старая газета шелестит страницами. У детектива черные волосы. Детектив такой-то узнает о преступлении. Читает газету.

И так далее.

То есть создание каждого предложения у меня теперь будет выглядеть так:

 

Вставка предложения в таблицу:

 

function insert_to_BD($link, $h, $h1, $pn, $pn1, $p, $p1, $pn2, $pn3, $g, $g1, $pn4, $pn5, $d, $pn6, $pn7) {

$h = proba_l ($link, 'Hero_prilag', ' ', 'Index_hero1', 'Peizag_ind = 1');  

$h1 = proba_l ($link, 'Hero_prilag', 'sush_name', 'sush_name', 'Index_hero1 = '.$h);  

$pn = proba_l ($link, 'Punctuation', ' ', 'Id_punct', 'Id_punct = 1');  

$pn1 = proba_l ($link, 'Punctuation', 'Punct', 'Punct', 'Id_punct = '.$pn);

$p = proba_l ($link, 'Hero_prilag', ' ', 'Index_prilag1', 'Index_hero1 = '.$h); 

$p1 = proba_l ($link, 'Hero_prilag', 'pril_name', 'pril_name', 'Index_prilag1 = '.$p);  

$pn2 = proba_l ($link, 'Punctuation', ' ', 'Id_punct', 'Id_punct = 1');  

$pn3 = proba_l ($link, 'Punctuation', 'Punct', 'Punct', 'Id_punct = '.$pn2);

$g = proba_l ($link, 'Hero_glagol', ' ', 'Index_Glagol', 'Index_hero = '.$h);

$g1 = proba_l ($link, 'Hero_glagol', 'Glag_name', 'Glag_name', 'Index_Glagol = '.$g); 

$pn4 = proba_l ($link, 'Punctuation', ' ', 'Id_punct', 'Id_punct = 1');  

$pn5 = proba_l ($link, 'Punctuation', 'Punct', 'Punct', 'Id_punct = '.$pn4);

$d = proba_l ($link, 'Dopolnenie', 'Dop', 'Dop', 'Id_Such ='.$h);  

$pn6 = proba_l ($link, 'Punctuation', ' ', 'Id_punct', 'Id_punct = 2');  

$pn7 = proba_l ($link, 'Punctuation', 'Punct', 'Punct', 'Id_punct = '.$pn6);

$sql = "INSERT INTO `Depozite` (`Id_Slovo`, `Slovo`, `Id_Slovo1`, `Slovo1`, `Id_Slovo2`, `Slovo2`, `Id_Slovo3`, `Slovo3`, `Id_Slovo4`, `Slovo4`, `Id_Slovo5`, `Slovo5`, `Slovo6`, `Id_Slovo7`, `Slovo7`) VALUES ('".$h."', '".$h1."', '".$pn."', '".$pn1."', '".$p."', '".$p1."', '".$pn2."', '".$pn3."', '".$g."', '".$g1."', '".$pn4."', '".$pn5."', '".$d."', '".$pn6."', '".$pn7."');";

$res = mysqli_query($link, $sql);

}

insert_to_BD($link, $h, $h1, $pn, $pn1, $p, $p1, $pn2, $pn3, $g, $g1, $pn4, $pn5, $d, $pn6, $pn7);

echo '<br>';

echo '<br>';

 

Извлечение предложения из таблицы (вот тут я думаю можно канитель не разводить, как-то задать в MySQL – вытащи все слова из строки таблицы. Или вытащи определенные столбцы в строке, чтобы индексы не тащить)

 

// извлечение из таблицы заданной строки

$dep = proba_l ($link, 'Depozite', ' ', 'Id_depozite', 'Id_depozite = 13');  

proba_l ($link, 'Depozite', 'Slovo', ' ', 'Id_depozite = '.$dep);   

proba_l ($link, 'Depozite', 'Slovo1', ' ', 'Id_depozite = '.$dep);

proba_l ($link, 'Depozite', 'Slovo2', ' ', 'Id_depozite = '.$dep);

proba_l ($link, 'Depozite', 'Slovo3', ' ', 'Id_depozite = '.$dep);

proba_l ($link, 'Depozite', 'Slovo4', ' ', 'Id_depozite = '.$dep);

proba_l ($link, 'Depozite', 'Slovo5', ' ', 'Id_depozite = '.$dep);

proba_l ($link, 'Depozite', 'Slovo6', ' ', 'Id_depozite = '.$dep);

proba_l ($link, 'Depozite', 'Slovo7', ' ', 'Id_depozite = '.$dep);

 

Мне одной кажется, что это как-то... гхм... длинновато? Раньше создание одной строки занимало вот сколько места:

$hero1 = proba_l ($link, 'Detectiv', ' ', 'Id_Hero_det', 'Rassled_Pravda = 1');

$hero1_cap = proba_l ($link, 'Detectiv', ' ', 'Id_Profession', 'Id_Hero_det = '.$hero1);

proba_l ($link, 'Hero_capital_word', 'Слово', ' ', 'Id_Hero_cap = '.$hero1_cap); 

proba_l ($link, 'Detectiv', 'Name1_Hero_det', ' ', 'Id_Hero_det = '.$hero1); 

echo ' узнает о преступлении - ';

$inf = proba_l ($link, 'Infa_3', ' ', 'Ind_inf', 'Ind_Inf_3 > 0');

$inf_hero = proba_l ($link, 'Infa_3', 'Inf_3', ' ', 'Ind_inf = '.$inf);

echo '. ';

 

Или без этого никак, если перетасовывать текст? К тому же не нравятся мне эти echo '. '; оно, конечно, проще, но кажется серьезнее и надежнее извлекать точки и пробелы из таблицы пунктуации, с индексами, шоб как у людей було:

 

$pn4 = proba_l ($link, 'Punctuation', ' ', 'Id_punct', 'Id_punct = 1');  

$pn5 = proba_l ($link, 'Punctuation', 'Punct', 'Punct', 'Id_punct = '.$pn4);

 

Даже не могу понять, на верном я пути или нет. А если на верном, то можно ли как-то проще...

 

 

0
Мария Фомальгаут Мария Фомальгаут 3 года назад #
Раньше у меня было проще. Три варианта:
Про героя.
Про локацию.
Про действие.
Кто знает, какого черта меня понесло заносить все предложения во временную таблицу и перетасовывать. Есть ли в этом какое-то преимущество.
Раньше заносила в таблицу только сюжет текста, без описаний. И просто сюжет, то есть — напиши «герой ищет информацию», «герой преодолевает препятствие».
А в детективе оно куда-то не туда повернулось. Но у меня есть мысли, что генерация текста должна идти именно так. Выбор основных значений (кто герой, чё хочет, кто убийца) — занесение в таблицу. Исходя из этой таблицы — вынесение из таблицы, обрастание подробностями (в первой таблице что герой кот, во второй — что у него длинный черный хвост), может, несколько раз так, пока усю Войну и Мир не напишем…
Или я ошибаюсь, приплетаю программе человеческое написание книги, метод снежинки: напишите одно предложение, суть книги. Расширьте до абзаца. Каждое предложение в абзаце расширьте до абзаца. Теперь каждый абзац до главы…
0
Aagira Aagira 3 года назад #
Я пока не вникала… но коротко: тебе нужен рандом, или что?
0
Мария Фомальгаут Мария Фомальгаут 3 года назад #
Рандом-то я сделаю без проблем.
Я думаю, надо ли заносить предложения в таблицу с 60 столбцами.
0
Aagira Aagira 3 года назад #
Лучше создать 60 таблиц и в столбцах прописать «расширения» каждого из понятий. Если ты по частям речи, к примеру, сделаешь, то у разных частей речи разные характеристики.
Кроме того, в таблицу можно спокойно вносить любые данные, например, куски кода, а тем более, упорядоченные массивы. И почему бы последними не воспользоваться?
0
Мария Фомальгаут Мария Фомальгаут 3 года назад #
Но мне нужно где-то сохранить предложения. Как мне кажется.
А по частям речи таблицы есть уже, для существительных, для прилагательных, для всех. С характеристиками.
0
Aagira Aagira 3 года назад #
Так тебе один список сохранить? Можно в текстовый файл генерировать.
0
Мария Фомальгаут Мария Фомальгаут 3 года назад #
А оттуда как потом предложения перетасовывать?
0
Aagira Aagira 3 года назад #
Смотря о чем речь. Ты сохраняешь массив, потом забираешь значечения из этого массива и делаешь с ними, что хочешь.

У тебя, скажем, есть список:

подлежащее — детектив
сказуемое — пил
дополнение — чай

ты из него извлекаешь данные и в коде перемешиваешь, как хочешь.

чай пил детектив, пил детектив чай, пил чай детектив и т.п.
Я просто в проблему пока не особо врубаюсь.
0
Мария Фомальгаут Мария Фомальгаут 3 года назад #
Как попало перетасовать не получится.
Детектив сидел у окна — норм.
У окна сидел детектив — норм.
Сидел окна у детектив — низзя.
А перетасовать хочу не слова, а предложения:
Детектив сидел в кресле.
детектив читал газету.
или:
Детектив читал газету.
Детектив сидел в кресле.
вот как-то так…
0
Aagira Aagira 3 года назад #
Сидел окна у детектив

А на такой случай можно создать строгое правило, чтобы такой-то предлог мог стоять только перед словами в опреленном падеже и с другими ни-ни. Тут, мне чудится, не особо сложно задать исключения.
0
Aagira Aagira 3 года назад #
Или тебе на каждое предложение нужен особый список позиций слов в нем? Тогда надо много файлов (массивов).
0
Мария Фомальгаут Мария Фомальгаут 3 года назад #
Мне нужен список предложений. Хотя бы в абзаце.
0
Aagira Aagira 3 года назад #
Можно и такой массив сделать. Из предложений.
0
Мария Фомальгаут Мария Фомальгаут 3 года назад #
А как? Для этого их нужно заносить в таблицу?
0
Aagira Aagira 3 года назад #
Я тебе советую почитать про массивы в php в интернете, поделать примеры. Я бы объяснила, что знаю, т.к. имею со всем этим дело на сайте, но я сейчас не совсем в кондиции.
Есть несколько способов записи данных и их извлечения.
0
Aagira Aagira 3 года назад #
Например, из-за несостыковки файлов форм конкурсов — из одного другой не читается и невозможно перенести переменные, даже когда в интернете заверяют, что все возможно — здесь не работает — приходится некоторые из настроек формы заносить из админки (т.е. через особый код) в специально созданный файл. И в этом файле хранится массив. В настройках он записывается, а при открытии страницы с формой читается. Я бы дала тебе посмотреть то, как работает моя самописная форма конкурса и как массив выглядит, что в нем где работает. Но вообще, там механика в интернете потырена, так что, ты можешь сама поискать.
0
Aagira Aagira 3 года назад #
 
  1.  
  2. $dep = proba_l ( $link , 'Depozite' , ' ' , 'Id_depozite' , 'Id_depozite = 13' ) ;
  3. proba_l ( $link , 'Depozite' , 'Slovo' , ' ' , 'Id_depozite = ' . $dep ) ;
  4.  

Тут у меня что-то едет в мозгу. Так получается, что через функцию вызывается такая же функция, присоединенная к этой функции через переменную $dep…
Нет, мне надо в это вникать. Или хотя бы попробовать мозг подрегулировать.
Учу программу искать, как называются герои окромя своего имени. Сразу напарываюсь на кучу трудных дл...
Примеры первого появления персонажей:   Имя_Героя.   Меня зовут/мое имя/меня называют/назы...
Условия конкурса у нас здесь http://dabudetsolnce.ru/articles/430-anons-konkursa.html Конкурс предпо...
!!! Данная тема рекомендуется к подписке !!! Как и любой современный сайт, наш существует как миниму...

Все представленные на сайте материалы принадлежат их авторам.

За содержание материалов администрация ответственности не несет.