Страница 3 из 9

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

Добавлено: Пн май 07, 2018 12:54 am
Svetлая
Доброй всем ночи))

Нашла в этой теме два скрипта (спасибо авторам), но у меня они не заработали. Допилила напильником как смогла))
Проверила на двух серверах 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

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

Добавлено: Пн май 07, 2018 1:19 am
djprizrak
часть кода дублируется

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

Добавлено: Пн май 07, 2018 1:25 am
Svetлая
djprizrak писал(а):
Пн май 07, 2018 1:19 am
часть кода дублируется
спасибо, заметила ))
глюк в блокноте, дублирует шапку, наверно спать идти пора))

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

Добавлено: Ср май 30, 2018 10:19 pm
Yashalta
Спасибо за скрипт!!!
А есть возможность реализации калькулятора? Я не прошу реализации маткада или т.п. сложностей, а просто сколько будет 1359 разделить на 1,58...

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

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

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

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

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

Добавлено: Пн июн 04, 2018 9:04 pm
fandaymon
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);

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

Добавлено: Вт июн 05, 2018 11:12 am
VladPTZ
Сколько будет 6 плюс 2 отвечает шесть.

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

Добавлено: Вт июн 05, 2018 11:37 am
fandaymon
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);

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

Добавлено: Вт июн 05, 2018 10:34 pm
Yashalta
Привел к такому виду

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

$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