Как перетасовать предложения
Очередной дурацкий вопрос.
Ну о-о-очень дурацкий.
Пока у меня в тексте все в строгом порядке:
Детектив такой-то узнает о преступлении: читает газету.
Старая газета шелестит страницами.
У детектива черные волосы.
Детектив любит кофе.
Кто-то украл у старой графини бриллиантовое колье...
...и так далее.
А ведь чтобы тупо поменять предложения местами, программе нужно обосраться и не встать.
Потому что.
Для этого нужно сформулировать каждое предложение:
Выбери профессию героя.
Выбери пробел.
Выбери имя героя.
Выбери пробел.
Выбери глагол узнавания.
Выбери пробел.
Выбери предлог О или Про.
Выбери пробел.
Выбери слово преступление в предложном падеже.
Выбери знак препинания. Точку. Или двоеточие, если дальше про газету.
Дальше следующее предложение – читает газету. Для него:
Выбери глагол читает.
Выбери слово газета в родительном падеже.
И все это занеси в таблицу.
Сейчас прикинула, сколько у таблицы будет столбцов. Как минимум тридцать:
И это без учета того, что у каждого слова и даже у каждого пробела и знака препинания свой индекс, его тоже в таблицу надоть.
Потом даем программе перемешать предложения в абзаце: например, начать – Старая газета шелестит страницами. У детектива черные волосы. Детектив такой-то узнает о преступлении. Читает газету.
И так далее.
То есть создание каждого предложения у меня теперь будет выглядеть так:
Вставка предложения в таблицу:
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);
Даже не могу понять, на верном я пути или нет. А если на верном, то можно ли как-то проще...
Мария Фомальгаут 2 года назад #
Про героя.
Про локацию.
Про действие.
Кто знает, какого черта меня понесло заносить все предложения во временную таблицу и перетасовывать. Есть ли в этом какое-то преимущество.
Раньше заносила в таблицу только сюжет текста, без описаний. И просто сюжет, то есть — напиши «герой ищет информацию», «герой преодолевает препятствие».
А в детективе оно куда-то не туда повернулось. Но у меня есть мысли, что генерация текста должна идти именно так. Выбор основных значений (кто герой, чё хочет, кто убийца) — занесение в таблицу. Исходя из этой таблицы — вынесение из таблицы, обрастание подробностями (в первой таблице что герой кот, во второй — что у него длинный черный хвост), может, несколько раз так, пока усю Войну и Мир не напишем…
Или я ошибаюсь, приплетаю программе человеческое написание книги, метод снежинки: напишите одно предложение, суть книги. Расширьте до абзаца. Каждое предложение в абзаце расширьте до абзаца. Теперь каждый абзац до главы…
Aagira 2 года назад #
Мария Фомальгаут 2 года назад #
Я думаю, надо ли заносить предложения в таблицу с 60 столбцами.
Aagira 2 года назад #
Кроме того, в таблицу можно спокойно вносить любые данные, например, куски кода, а тем более, упорядоченные массивы. И почему бы последними не воспользоваться?
Мария Фомальгаут 2 года назад #
А по частям речи таблицы есть уже, для существительных, для прилагательных, для всех. С характеристиками.
Aagira 2 года назад #
Мария Фомальгаут 2 года назад #
Aagira 2 года назад #
У тебя, скажем, есть список:
подлежащее — детектив
сказуемое — пил
дополнение — чай
ты из него извлекаешь данные и в коде перемешиваешь, как хочешь.
чай пил детектив, пил детектив чай, пил чай детектив и т.п.
Я просто в проблему пока не особо врубаюсь.
Мария Фомальгаут 2 года назад #
Детектив сидел у окна — норм.
У окна сидел детектив — норм.
Сидел окна у детектив — низзя.
А перетасовать хочу не слова, а предложения:
Детектив сидел в кресле.
детектив читал газету.
или:
Детектив читал газету.
Детектив сидел в кресле.
вот как-то так…
Aagira 2 года назад #
А на такой случай можно создать строгое правило, чтобы такой-то предлог мог стоять только перед словами в опреленном падеже и с другими ни-ни. Тут, мне чудится, не особо сложно задать исключения.
Aagira 2 года назад #
Мария Фомальгаут 2 года назад #
Aagira 2 года назад #
Мария Фомальгаут 2 года назад #
Aagira 2 года назад #
Есть несколько способов записи данных и их извлечения.
Aagira 2 года назад #
Aagira 2 года назад #
Тут у меня что-то едет в мозгу. Так получается, что через функцию вызывается такая же функция, присоединенная к этой функции через переменную $dep…
Нет, мне надо в это вникать. Или хотя бы попробовать мозг подрегулировать.