Война с искусственным интеллектом

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

Чтобы искусственный писатель складывал предложения, он должен знать, какой предмет какой бывает, и что умеет делать.

Для этого нужны таблицы. Существительное плюс прилагательное. Существительное плюс глагол. Глагол плюс существительное, с которым можно делать этот глагол. Пить можно чай, а рубить дрова, а не наоборот.

Эти таблицы будет заполнять сама программа. Искать в текстах пары существительное плюс прилагательное. Как искать? Сравнивать каждое слово в книге со списком существительных. Со списком прилагательных. И.т.д.

И началось: таблица существительных в именительном падеже. Еще шесть таблиц в других падежах. Прилагательные. Мужской, женский, средний род, множественное число.

И несчастная программа сравнивает КАЖДОЕ слово в тексте со всеми этими таблицами, сколько их там, одних прилагательных 6 падежей х 4 рода = 24 таблицы. Плюс шесть таблиц существительных.

А несчастная программа начинает подвисать даже на двух таблицах. Приходится давать ей для поиска словосочетаний маленькие абзацы. Не то, что «Войну и Мир» - Вия не тянет.

И при этом говорят, что компьютеры обрабатывают информацию быстрее людей.

Ага.

Быстрее.

Может, проблема в мощности компьютера.

Или можно как-то сделать программу короче и эффективнее.

12:02
92




12:03
А как сейчас происходит проверка?
Какая проверка?
12:06
По падежу и роду. Можешь код показать?
12:12 (отредактировано)
 <?php require('db.php');?> <?php $data = $_POST;?> 
 
 
<html>
<body>
 
<form id="find_words_from_DB" action='find_words_from_DB.php' method="POST" style="height: 200px;"> <fieldset id="inputs"> <input name="adress" placeholder="Адрес поиска" required type="text" value= "http://sujet.cc61800-drupal.tw1.ru/Reader.php"> </fieldset> <fieldset> <input type="submit" id="submit" name="do_find" value="Поиск"> </fieldset>
  </form>
</body>
</html>
 
 
 <?php // функция копирования контента с сайта function file_to_str($st_search) {$syte_data = file_get_contents("$st_search");// $syte_data = iconv( "cp1251","UTF-8", $syte_data); //cp1251$syte_data = $syte_data.'.'; // добавляем на всякий пожарный при поиске если не будет конца предложенияreturn $syte_data; }  function select_words_to_arr_from_DB($link, $table_name, $id_name, $col_name) {$sql = "SELECT ".$id_name.",".$col_name." FROM ".$table_name." ORDER BY ".$col_name.";";$res = mysqli_query($link, $sql);$data = mysqli_fetch_all($res, MYSQLI_ASSOC);//var_dump($data);//while ($row = $res->fetch_array())//	$result[] = $row[0];return $data; }  // Функция добавления пары слов сущ, прил в БД function insert_to_BD($link, $sush, $sush_ind, $pril, $pril_ind) { // необходимо перед добавлением проверить нет ли такой же пары в БД  $sql = "INSERT INTO `Hero_prilag` (`sush_name`, `Index_hero1`, `pril_name`, `Index_prilag1`) VALUES ('".$sush."','".$sush_ind."','".$pril."', '".$pril_ind."');"; // echo $sql; $res = mysqli_query($link, $sql); // echo "OK"; }  function search_ch_rechi($string) { $C_S = 0; $C_P = 0; foreach ($string as $i) { if ($i === 'P'){$C_P++;}if ($i === 'S'){$C_S++;} } if ($C_S * $C_P == 1)echo "SUSH_PRIL".$C_S." ".$C_P."";  return $C_S * $C_P; // для проверки на не нулевое количество P и S }  function select_all_strings($text) { // разделители предложений$prep = ".,!:?;<>=-"; // находим предложения$i = 0;$len_text = strlen($text);$strings = array(); while ($i<$len_text){$next_string = "";while (strpos($prep, $text[$i]) === false){$next_string = $next_string.$text[$i];$i++;if ($i>=$len_text) break;} if ($next_string != "") array_push($strings, $next_string);$i++;} return $strings; }  function select_words_in_strings($array_of_strings) {$len_arr = count($array_of_strings);// echo $len_arr; // алфавит из которого состоят наши слова$alfavit = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZабвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; $out_arr = array();// создаем 2мерный массивfor ($i=0; $i<$len_arr; $i++){$p = array();array_push($out_arr, $p);} $i = 0;while ($i<=$len_arr){$next_word = ""; $len_string = strlen($array_of_strings[$i]); //log //echo $array_of_strings[$i]."123";$j = 0;while ($j <= $len_string){//log //echo $next_word."123";if ($next_word != "") array_push($out_arr[$i], $next_word);$next_word = ""; if (!empty($array_of_strings[$i][$j]))while (strpos($alfavit, $array_of_strings[$i][$j])){$next_word = $next_word.$array_of_strings[$i][$j];$j++;//log //echo $next_word."aaa";if ($j >= $len_string){array_push($out_arr[$i], $next_word);break;}}$j++;}$i++;}return $out_arr;} 
  if (isset($data['do_find']) )// если кнопка нажата {$syte_data = file_to_str($data['adress']);// ""; $data['adress']//параметр функции название файла или сайта, //"test.txt" //в котором нужно найти (если нужно, то еще пропишите путь к файлу)//log //echo $syte_data; // получение массива слов из БД//log //echo count(select_words_to_arr_from_DB($link, "Proba_prilag", "Проба_прилаг")); 
 
 $sush_from_DB = select_words_to_arr_from_DB($link, "Hero", "Index_man", "Герой");$pril_from_DB = select_words_to_arr_from_DB($link, "Prilagatelnye", "Index_pril", "Прилагательное"); // $pril1_from_DB = select_words_to_arr_from_DB($link, "Prilagatelnye_F", "Index_pril_F", "Прилагательное_ф"); // $pril2_from_DB = select_words_to_arr_from_DB($link, "Prilagatelnye_Mn", "Index_pril_Mn", "Прилагательное3"); // $pril3_from_DB = select_words_to_arr_from_DB($link, "Prilagatelnye_N", "Index_pril_N","Прилагательное2"); 
 //log //echo "";var_dump($pril_from_DB);
 	// получение всех частей предложений	// получение всех строк с сайта в массив$all_strings = select_all_strings($syte_data);	//log //	//echo "ALL STRINGS";	//var_dump($all_strings);
 	// получение всех слов с сайта в массив$arr_of_words = select_words_in_strings($all_strings);	//log //	//echo "ARR OF WORDS";	//var_dump($arr_of_words);
 	// тут попытка сравнить со словами из $sush_from_DB 	echo " 
 
 ";
 	// цикл перебора всех слов	for ($i=0; $i<count($arr_of_words); $i++)	{$pril = "";$pril_ind = -1;$sush = "";$sush_ind = -1;$razbor = array();
 	// поиск прилагательных пока только мужского рода	// надо проверять еще другие роды (3 таблицы)	for ($j=0; $j<count($arr_of_words[$i]); $j++)	{$flag = 0;
  foreach ($pril_from_DB as $s)	{	//var_dump( $s);	// mb_strtolower - перевод слова к нижнему регистру	if (mb_strtolower($arr_of_words[$i][$j])===$s['Прилагательное'])	{	//echo "I find pril ".$s." at ".$i." ".$j.	//" in the ".$all_strings[$i]."";$pril = $s['Прилагательное'];$pril_ind = $s['Index_pril'];$flag = 1;	} //echo $s."\n";	}	//echo $arr_of_words[$i][$j]."\n";
 
 	if ($flag == 1)$razbor[$j] = 'P';	}
 
 	// цикл поиска существительных	for ($j=0; $j<count($arr_of_words[$i]); $j++)	{$flag = 0;	foreach ($sush_from_DB as $s)	{	if (mb_strtolower($arr_of_words[$i][$j])===$s['Герой'])	{	//echo "I find sush ".$s." at ".$i." ".$j.	//" in the ".$all_strings[$i]."";$sush = $s['Герой'];$sush_ind = $s['Index_man'];$flag = 1;	}	//echo $s."\n";	}
 	if ($flag == 1)	array_push($razbor, 'S');	else	array_push($razbor, '0');	}
 
 	//log	echo "RAZBOR ";//	//var_dump ($razbor);
 	// если в массиве есть и P и S	//if (search_ch_rechi($razbor)!=0)	{
 	}
 	if (search_ch_rechi($razbor) != 0)	{	var_dump ($arr_of_words[$i]);	//for ($q = 0; $q<count($arr_of_words[$i]); $q++)	echo $arr_of_words[$i][$q];	echo $sush." < - > ".$pril;	echo "";	/// попытка добавить строку в БД	//insert_to_BD($link, "QWERTY");	/// попытка добавить строку в БД	insert_to_BD($link, $sush, $sush_ind, $pril, $pril_ind);	}
 	// поиск минимального расстония между P и S	// это расстояние и есть пара слов которая должна	// попасть в базу после проверки на то что ранее не добавляли	// может помечать что автоматическое добавление
 	}	}
?> 
12:15 (отредактировано)
Кода пишешь код в комменте, помещай, пожалуйста, в теги

 <code> 
 


(Оффтоп небольшой. В твоем сообщении я поправила)
12:25 (отредактировано)
Поиск рода и числа перебором всего словаря… а нельзя сделать так, чтобы программа, дойдя до конца существительного, по его окончанию сузила круг поиска? Конечно, придется еще объяснить ей, что такое нулевое окончание. Но грамматические склонения тоже, ведь, не на пустом месте придуманы.
дойдя до конца существительного — в смысле?
12:36
Эта программа знает, что с существительными имеет дело? Или ее задача — выяснить, существительное это или нет?
Чтобы знать, существительное или нет, программа должна сравнить слово с списком существительных.
12:46
То есть, список уже есть, и не заполняется программой?
Да, есть список существительных. Список прилагательных. А мне надо список сущ+прил
12:59
Оба списка были тобой вручную заполнены, как я понимаю?

Ну, вот, скажем, видит программа последнюю букву «у», она может как-то пройтись по списку (первоначальная мысль была в том, чтобы по этой букве она определеляла падеж)? Или даже наоборот — в словарном виде: первая буква «у» — значит, открывает таблицу/столбец со словами на эту букву. Лучше бы, конечно, сделать как колонтитулы — хотя бы на буквы три (пока еще не те, на которые посылают лесом...)
Как образец, взять любой словарь.
Списки вручную, да

Это хорошо, а как это сделать? В РНР?
13:09
Давай в скайпе обсудим.
18:49
человеческий мозг принципиально отличается от компьютера, тот дискретный, а наш мозг аналоговый, а быстродействие аналоговой машинки для дискретной принципиально недостижимо
интересно, как бы сделал это мозг человека. Тоже стал бы перебирать все слова, или по первым буквам искал бы, грубо говоря? (я уж не говорю, что у человека в голове не слова, а образы, понятия, и при слове «автомобиль» активируются нейроны в понятиях — «техника» и «двигаться»)
19:02 (отредактировано)
Нет, если он хорошо работает, то просто создадутся цепочки случайных и порой невероятных связей

Загрузка...












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

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


Рейтинг@Mail.ru