[Скрипт] Алиса и Википедия

Модераторы: Bagir, Ivan, Vit, immortal, PAV, newz20

Аватара пользователя
Svetлая
Сообщения: 3
Зарегистрирован: Вс май 06, 2018 11:36 pm
Благодарил (а): 4 раза
Поблагодарили: 7 раз
Контактная информация:

Re: [Скрипт] Алиса и Википедия

Сообщение Svetлая » Пн май 07, 2018 12:54 am

Доброй всем ночи))

Нашла в этой теме два скрипта (спасибо авторам), но у меня они не заработали. Допилила напильником как смогла))
Проверила на двух серверах MjD, работает )).

Скрещивала "бульдога с носорогом", ну и чуть от себя добавила)).
1. Метод обработки запроса взяла у второго скрипта. Меньше кода, меньше нагрузки на сервер.
2. Разветвленность ответа и идею с записью в файл, из первого скрипта.
Что получилось:
1. Запись в файл ответов на вопросы добавлением к существующим. Всегда можно посмотреть что детей интересует. Кому это лишне, можно удалить, в коде строки с 46 по 50.
2. На не однозначные вопросы, система делает выборку имеющихся в вики вариантов и предлагает выбрать требуемый. В качестве примера, если спросить "кто такой Пушкин", ответ придет однозначный, А.С.)). Словно нет других великих)). А вот если спросить "кто такой Андерсен", гугл поправит на Андерсон и выдаст 9 вариантов. ))

Чудеса бывают ;)
СпойлерПоказать

Код: Выделить всё

$keywords = preg_split("/[\s,]+/",$original);  // помещаем запрос в массив
$totalz=count($keywords);
for($i=2;$i<$totalz;$i++) {  // i=2 отсекаем голосовую команду (шаблон). в моем случае "что такое" или "кто такой". Значение i= равна кол-ву слов в голосовой комманде.
$message_textz=$message_textz." ".$keywords[$i];
}

say("$message_textz,ожидайте,ищу по вики ",2); 

// Установка свойства объекта на основании полученной переменной
sg("Объект.Свойство",$message_textz);
context_getuser();
context_clear();
context_activate(ID);

$zap="$message_textz";
$zapurl=urlencode($zap);
$url='https://ru.wikipedia.org/w/api.php?action=opensearch&search='.$zapurl.'&prop=info&format=xml&inprop=url';
$answ=file_get_contents($url);

$data_xml = simplexml_load_string($answ); //загружаем ответ от вики в массив
$otvet=$data_xml->Section[0]->Item[0]->Description[0]; //получаем первый найденный вариант
$description = $data_xml->Section[0]->Item[0]->Description[0]; //получаем определение слова 
if (empty($description)) { //если ничего не нашлось
    say ("по прямому запросу ничего нет. уточните запрос",2);
	 
 	for ($i=1; $i<50;) { // максимальное количество выводимых найденых вариантов запросов. можно сократить.
		$description = $data_xml->Section[0]->Item[$i]->Description[0]; //получаем определение слова 
		if (!empty($description)) { //если  определение есть, продолжаем
			$otvet2=$data_xml->Section[0]->Item[$i]->Text[0]; // записываем следующий вариант запроса
//удаление спецсимволов
			$otvet2=iconv("UTF-8","CP1251//IGNORE",$otvet2);
			$otvet2=iconv("CP1251","UTF-8",$otvet2);
			$otvet2="Вариант ".$i.":".$otvet2." "; // подготавливаем для озвучивания/ вывода на экран
			say($otvet2,2);
			$i++;
		} else { 
         	say("Больше вариантов нет.",2);
         	$i=100;
        }
	}
} else {
//удаление спецсимволов
	$otvet=iconv("UTF-8","CP1251//IGNORE",$otvet);
	$otvet=iconv("CP1251","UTF-8",$otvet);
	say($otvet,2);
//Сохраняем запросы в файл. это лог. на работу скрипта не влияет. можно удалить
	$data = fopen('wiki.xml', 'a'); //открываем файл для до записи 'a' для перезаписи 'w'
	$message_textz = "\n#######\n".$message_textz." = ".$otvet."\n\n";
	fwrite($data, $message_textz); //записываем результат выполнения
	fclose($data); //закрываем
 }

причина правки: исправление в коде.
1. на некоторые ответы от вики Алиса молчит. Решение в строке 42. (передела . п.4)
2. чуть изменила код.
3. описание.
4. убрала спец символы в ответах от вики. Строки 30-32 и 42-44
Последний раз редактировалось Svetлая Вт май 08, 2018 11:52 am, всего редактировалось 8 раз.
За это сообщение автора Svetлая поблагодарили (всего 7):
skysilver (Пн май 07, 2018 10:17 am) • lanket (Пн май 07, 2018 1:37 pm) • defender52 (Пн май 28, 2018 9:29 pm) • Yashalta (Ср май 30, 2018 8:49 pm) • ypiter2006 (Чт май 31, 2018 2:37 pm) • Ron (Вс июн 03, 2018 10:11 am) • ILGAS (Чт июн 07, 2018 12:01 pm)
Рейтинг: 10%
Аватара пользователя
djprizrak
Сообщения: 60
Зарегистрирован: Пн фев 12, 2018 10:58 am
Благодарил (а): 3 раза
Поблагодарили: 15 раз

Re: [Скрипт] Алиса и Википедия

Сообщение djprizrak » Пн май 07, 2018 1:19 am

часть кода дублируется
За это сообщение автора djprizrak поблагодарил:
Svetлая (Пн май 07, 2018 1:23 am)
Рейтинг: 1.43%
Аватара пользователя
Svetлая
Сообщения: 3
Зарегистрирован: Вс май 06, 2018 11:36 pm
Благодарил (а): 4 раза
Поблагодарили: 7 раз
Контактная информация:

Re: [Скрипт] Алиса и Википедия

Сообщение Svetлая » Пн май 07, 2018 1:25 am

djprizrak писал(а):
Пн май 07, 2018 1:19 am
часть кода дублируется
спасибо, заметила ))
глюк в блокноте, дублирует шапку, наверно спать идти пора))
Yashalta
Сообщения: 96
Зарегистрирован: Вс май 20, 2018 9:27 am
Благодарил (а): 30 раз
Поблагодарили: 4 раза

Re: [Скрипт] Алиса и Википедия

Сообщение Yashalta » Ср май 30, 2018 10:19 pm

Спасибо за скрипт!!!
А есть возможность реализации калькулятора? Я не прошу реализации маткада или т.п. сложностей, а просто сколько будет 1359 разделить на 1,58...
Аватара пользователя
Svetлая
Сообщения: 3
Зарегистрирован: Вс май 06, 2018 11:36 pm
Благодарил (а): 4 раза
Поблагодарили: 7 раз
Контактная информация:

Re: [Скрипт] Алиса и Википедия

Сообщение Svetлая » Чт май 31, 2018 1:07 pm

Yashalta писал(а):
Ср май 30, 2018 10:19 pm
Спасибо за скрипт!!!
А есть возможность реализации калькулятора? Я не прошу реализации маткада или т.п. сложностей, а просто сколько будет 1359 разделить на 1,58...
Всегда пожалуйста ))
Извините, я не программист )) Спросите у ребят в ветке "Настройка и программирование".
Зачем вам в МЖД калькулятор? Гораздо удобнее на сотике произвести вычисления, сложные. Простые, думаю, и в голове не плохо решаются ))
Yashalta
Сообщения: 96
Зарегистрирован: Вс май 20, 2018 9:27 am
Благодарил (а): 30 раз
Поблагодарили: 4 раза

Re: [Скрипт] Алиса и Википедия

Сообщение Yashalta » Чт май 31, 2018 2:05 pm

Svetлая писал(а):
Чт май 31, 2018 1:07 pm
Yashalta писал(а):
Ср май 30, 2018 10:19 pm
Спасибо за скрипт!!!
А есть возможность реализации калькулятора? Я не прошу реализации маткада или т.п. сложностей, а просто сколько будет 1359 разделить на 1,58...
Всегда пожалуйста ))
Извините, я не программист )) Спросите у ребят в ветке "Настройка и программирование".
Зачем вам в МЖД калькулятор? Гораздо удобнее на сотике произвести вычисления, сложные. Простые, думаю, и в голове не плохо решаются ))
Ok, спасибо за совет!
Редко но, нужно сделать простое вычесление и быстро! Мобильник как правило в 2-х шагах а ты на диване... Проще спросить!
fandaymon
Сообщения: 531
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 23 раза
Поблагодарили: 224 раза

Re: [Скрипт] Алиса и Википедия

Сообщение fandaymon » Пн июн 04, 2018 9:04 pm

Yashalta писал(а):
Чт май 31, 2018 2:05 pm
Svetлая писал(а):
Чт май 31, 2018 1:07 pm
Yashalta писал(а):
Ср май 30, 2018 10:19 pm
Спасибо за скрипт!!!
А есть возможность реализации калькулятора? Я не прошу реализации маткада или т.п. сложностей, а просто сколько будет 1359 разделить на 1,58...
Всегда пожалуйста ))
Извините, я не программист )) Спросите у ребят в ветке "Настройка и программирование".
Зачем вам в МЖД калькулятор? Гораздо удобнее на сотике произвести вычисления, сложные. Простые, думаю, и в голове не плохо решаются ))
Ok, спасибо за совет!
Редко но, нужно сделать простое вычесление и быстро! Мобильник как правило в 2-х шагах а ты на диване... Проще спросить!
Сделать шаблон - сколько будет (.*)

Код: Выделить всё

$command=$matches[1];

$com=str_replace(',','.',$command);
$com=str_replace('делить на','/',$com);
$com=str_replace('на','*',$com);
$com=str_replace('плюс','+',$com);
$com=str_replace('минус','-',$com);
$com='$result=' . $com .';';

eval($com);

say($result,2);
За это сообщение автора fandaymon поблагодарили (всего 2):
xor (Пн июн 04, 2018 11:02 pm) • Yashalta (Вт июн 05, 2018 9:42 pm)
Рейтинг: 2.86%
VladPTZ
Сообщения: 255
Зарегистрирован: Вт май 31, 2016 6:56 pm
Откуда: Россия Карелия Петрозаводск
Благодарил (а): 71 раз
Поблагодарили: 23 раза

Re: [Скрипт] Алиса и Википедия

Сообщение VladPTZ » Вт июн 05, 2018 11:12 am

Сколько будет 6 плюс 2 отвечает шесть.
Orange Pi PC, OC Armbian (Linux), терминал Xiaomi Redmi note 3 PRO Prime
fandaymon
Сообщения: 531
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 23 раза
Поблагодарили: 224 раза

Re: [Скрипт] Алиса и Википедия

Сообщение fandaymon » Вт июн 05, 2018 11:37 am

VladPTZ писал(а):
Вт июн 05, 2018 11:12 am
Сколько будет 6 плюс 2 отвечает шесть.
А в логе точно отображается 6 плюс 2? Гугл иногда один, два, три распознаёт словами...
Ну можно добавить ещё

Код: Выделить всё

$com=str_replace('один','1',$com);
$com=str_replace('два','2',$com);
$com=str_replace('три','3',$com);
За это сообщение автора fandaymon поблагодарил:
Yashalta (Вт июн 05, 2018 10:26 pm)
Рейтинг: 1.43%
Yashalta
Сообщения: 96
Зарегистрирован: Вс май 20, 2018 9:27 am
Благодарил (а): 30 раз
Поблагодарили: 4 раза

Re: [Скрипт] Алиса и Википедия

Сообщение Yashalta » Вт июн 05, 2018 10:34 pm

Привел к такому виду

Код: Выделить всё

$command=$matches[1];
$com=str_replace(',','.',$command);
$com=str_replace('один','1',$com);
$com=str_replace('два','2',$com);
$com=str_replace('три','3',$com);
$com=str_replace('x','*',$com);
$com=str_replace('х','*',$com);
$com=str_replace('делить на','/',$com);
$com=str_replace('на','*',$com);
$com=str_replace('плюс','+',$com);
$com=str_replace('минус','-',$com);
//say($com);
$com='$result=' . $com .';';

eval($com);

say($result,2);
Вопрос:
Как реализовать для провекри проговаривание "формулы"? Ответ она проговаривает но, не проговаривает, что на, что она умножила или поделила, что бы я точно знал, что она меня правильно услышала!

PS - дважды прописан "x" это под разную разкладку клавиатура! Rus/Eng
Ответить