i
Полезная информация
Свернуть
17.11.2024
ruensvdefrptesitzharnl

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

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

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

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

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

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

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

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

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

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

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

 

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

Потому что.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

И так далее.

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

 

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

 

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

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

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

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

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

А на такой случай можно создать строгое правило, чтобы такой-то предлог мог стоять только перед словами в опреленном падеже и с другими ни-ни. Тут, мне чудится, не особо сложно задать исключения.
0
Aagira Aagira 2 года назад #
Или тебе на каждое предложение нужен особый список позиций слов в нем? Тогда надо много файлов (массивов).
0
Мария Фомальгаут Мария Фомальгаут 2 года назад #
Мне нужен список предложений. Хотя бы в абзаце.
0
Aagira Aagira 2 года назад #
Можно и такой массив сделать. Из предложений.
0
Мария Фомальгаут Мария Фомальгаут 2 года назад #
А как? Для этого их нужно заносить в таблицу?
0
Aagira Aagira 2 года назад #
Я тебе советую почитать про массивы в php в интернете, поделать примеры. Я бы объяснила, что знаю, т.к. имею со всем этим дело на сайте, но я сейчас не совсем в кондиции.
Есть несколько способов записи данных и их извлечения.
0
Aagira Aagira 2 года назад #
Например, из-за несостыковки файлов форм конкурсов — из одного другой не читается и невозможно перенести переменные, даже когда в интернете заверяют, что все возможно — здесь не работает — приходится некоторые из настроек формы заносить из админки (т.е. через особый код) в специально созданный файл. И в этом файле хранится массив. В настройках он записывается, а при открытии страницы с формой читается. Я бы дала тебе посмотреть то, как работает моя самописная форма конкурса и как массив выглядит, что в нем где работает. Но вообще, там механика в интернете потырена, так что, ты можешь сама поискать.
0
Aagira Aagira 2 года назад #
  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 Конкурс предп...
Примеры первого появления персонажей:   Имя_Героя.   Меня зовут/мое имя/меня называют/...

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

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