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

Не требует установки программ или изменения файлов

Модераторы: immortal, newz20

fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

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

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

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
say($command . ' равно ' . $result,2)
За это сообщение автора fandaymon поблагодарил:
Yashalta (Ср июн 06, 2018 12:16 am)
Рейтинг: 1.16%
Yashalta
Сообщения: 315
Зарегистрирован: Вс май 20, 2018 9:27 am
Благодарил (а): 160 раз
Поблагодарили: 29 раз

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

Сообщение Yashalta » Ср июн 06, 2018 11:48 am

fandaymon писал(а):
Вт июн 05, 2018 11:13 pm
say($command . ' равно ' . $result,2)
Все здорово! Еще раз спасибо, еще одна просьба!
Сейчас если говоришь 7 умножить на 8 ответ будет
7икс8
равно 56
или к примеру говоришь 30 минус 27 то ответ будет
30 27
равно 3

т.е. я хочу попросить реализовать проговаривание действия! Если я попросил умножить то пусть скажет
7 УМНОЖИТЬ на 8
равно 56

и тоже самое с миусом, плюсом и т.д.
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

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

Сообщение fandaymon » Ср июн 06, 2018 12:03 pm

Yashalta писал(а):
Ср июн 06, 2018 11:48 am
fandaymon писал(а):
Вт июн 05, 2018 11:13 pm
say($command . ' равно ' . $result,2)
Все здорово! Еще раз спасибо, еще одна просьба!
Сейчас если говоришь 7 умножить на 8 ответ будет
7икс8
равно 56
или к примеру говоришь 30 минус 27 то ответ будет
30 27
равно 3

т.е. я хочу попросить реализовать проговаривание действия! Если я попросил умножить то пусть скажет
7 УМНОЖИТЬ на 8
равно 56

и тоже самое с миусом, плюсом и т.д.
Сделай перед say замены в command в другую сторону

$command=str_replace('x',' умножить на ',$command);
$command=str_replace('+',' плюс ',$command);

и т.д.
Yashalta
Сообщения: 315
Зарегистрирован: Вс май 20, 2018 9:27 am
Благодарил (а): 160 раз
Поблагодарили: 29 раз

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

Сообщение Yashalta » Ср июн 06, 2018 1:20 pm

fandaymon писал(а):
Ср июн 06, 2018 12:03 pm
Сделай перед say замены в command в другую сторону

$command=str_replace('x',' умножить на ',$command);
$command=str_replace('+',' плюс ',$command);

и т.д.
[/quote]
Что то я тут накодил от слова наШкодил!

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

$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);
$command=str_replace('x',' умножить на ',$command);
$command=str_replace('х',' умножить на ',$command);
$command=str_replace('+',' плюс ',$command);
$command=str_replace('/',' делить на ',$command);
$command=str_replace('-',' минус ',$command);
say($command . ' равно ' . $result,2);
$com='$result=' . $com .';';
eval($com);
say($result,2);
Все работает как нужно кроме прибалвления! Думаю это потомучто я не правлильно добавил замену!
И еще такой нюансик!
Когда говоришь к примеру 132 делить на 3

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

13:10 Алиса: 44
13:10 Алиса: 132 делить на 3 равно 
все работает только с паузой в ответе!
т.е. Алиса проговаривает эту строку "132 делить на 3 равно"
после пауза в секунду или даже в 2!
а после ответ "44"
Пауза не страшна! Думаю правильно будет сделать, что бы слово "ровно" было не в первой строчке а во второй в месте с ответом "44"
Тогда будет выглядить будто Алиса подумала секунду и выдала ответ "Ровно 44"
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

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

Сообщение fandaymon » Ср июн 06, 2018 1:43 pm

Yashalta писал(а):
Ср июн 06, 2018 1:20 pm
fandaymon писал(а):
Ср июн 06, 2018 12:03 pm
Сделай перед say замены в command в другую сторону

$command=str_replace('x',' умножить на ',$command);
$command=str_replace('+',' плюс ',$command);

и т.д.
Что то я тут накодил от слова наШкодил!

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

$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);
$command=str_replace('x',' умножить на ',$command);
$command=str_replace('х',' умножить на ',$command);
$command=str_replace('+',' плюс ',$command);
$command=str_replace('/',' делить на ',$command);
$command=str_replace('-',' минус ',$command);
say($command . ' равно ' . $result,2);
$com='$result=' . $com .';';
eval($com);
say($result,2);
Все работает как нужно кроме прибалвления! Думаю это потомучто я не правлильно добавил замену!
И еще такой нюансик!
Когда говоришь к примеру 132 делить на 3

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

13:10 Алиса: 44
13:10 Алиса: 132 делить на 3 равно 
все работает только с паузой в ответе!
т.е. Алиса проговаривает эту строку "132 делить на 3 равно"
после пауза в секунду или даже в 2!
а после ответ "44"
Пауза не страшна! Думаю правильно будет сделать, что бы слово "ровно" было не в первой строчке а во второй в месте с ответом "44"
Тогда будет выглядить будто Алиса подумала секунду и выдала ответ "Ровно 44"
[/quote]

Потому что должно быть так


$com='$result=' . $com .';';
eval($com);
say($command . ' равно ' . $result,2);

Не надо двух say - одного вполне достаточно
За это сообщение автора fandaymon поблагодарил:
Yashalta (Ср июн 06, 2018 3:43 pm)
Рейтинг: 1.16%
Yashalta
Сообщения: 315
Зарегистрирован: Вс май 20, 2018 9:27 am
Благодарил (а): 160 раз
Поблагодарили: 29 раз

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

Сообщение Yashalta » Ср июн 06, 2018 3:51 pm

Я оставлю здесь конечный результат "Калькулятора"
ОГРОМНОЕ СПАСИБО fandaymon!!!

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

$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);
$com=str_replace('минус','-',$com);
$command=str_replace('x',' умножить на ',$command);
$command=str_replace('х',' умножить на ',$command);
//$command=str_replace('+',' плюс ',$command);
$command=str_replace('/',' делить на ',$command);
$command=str_replace('-',' минус ',$command);
$com='$result=' . $com .';';
eval($com);
$result = round($result,2);
say($command . ' равно ' . $result,2);
Изменить точность после запятой в этой строке!
$result = round($result,2);
где цифра 2 указывает точность после запятой!
За это сообщение автора Yashalta поблагодарили (всего 3):
astotskiy (Ср июн 06, 2018 7:07 pm) • ILGAS (Чт июн 07, 2018 12:00 pm) • Rench410 (Вс сен 02, 2018 12:22 pm)
Рейтинг: 3.49%
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

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

Сообщение xor » Чт июн 07, 2018 2:14 am

Поменяйте местами строки

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

$com=str_replace('делить на','/',$com);
$com=str_replace('разделить на','/',$com);
,
а то разделить будет превращаться в раз/

и у себя я сделал

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

eval($com);
$result=str_replace('.',',',$result); //чтобы Алиса читала 1.5 как 'Один с половиной', а не 'Один точка пять', хотя это зависит от TTS-движка
say($command.' равно '.$result,2);
За это сообщение автора xor поблагодарил:
Yashalta (Чт июн 07, 2018 5:33 pm)
Рейтинг: 1.16%
VladPTZ
Сообщения: 395
Зарегистрирован: Вт май 31, 2016 6:56 pm
Откуда: Россия Карелия Петрозаводск
Благодарил (а): 95 раз
Поблагодарили: 57 раз

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

Сообщение VladPTZ » Пт июн 08, 2018 12:12 am

По поводу кода с первой страницы для wiki.
Если с mojordroid отправлять команды голосом типа "Кто такой Дед Мороз" то не скрипт не может найти ответ, но если убрать большие буквы напечатав "Кто такой дед мороз" в истории событий но ответ от скрипта приходит нормальный.
Как доработать скрипт чтобы все большие буквы пр вращал в маленькие?
Сервер МД на x86 micro pc ssd + HDD, OC Debian, терминал Xiaomi Redmi note 7
Мои исходники для мд управляемых устройств https://github.com/vgamaev/ESPMDDEVICE
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

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

Сообщение fandaymon » Пт июн 08, 2018 12:51 am

VladPTZ писал(а):
Пт июн 08, 2018 12:12 am
По поводу кода с первой страницы для wiki.
Если с mojordroid отправлять команды голосом типа "Кто такой Дед Мороз" то не скрипт не может найти ответ, но если убрать большие буквы напечатав "Кто такой дед мороз" в истории событий но ответ от скрипта приходит нормальный.
Как доработать скрипт чтобы все большие буквы пр вращал в маленькие?
В первой строчке добавь
$matches[1]=strtolower($matches[1]);
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

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

Сообщение xor » Пт июн 08, 2018 1:24 am

А чего так мудрёно-то?
И вот топик был https://majordomo.smartliving.ru/forum/ ... 251#p53313
Я у себя использую такой скрипт (для первого значения)

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

$zap=$params['zapros']; //$zap='Дед Мороз';
say('Запрашиваю у Wikipedia информацию о '.$zap);
$zapurl=urlencode($zap);
$url='http://ru.wikipedia.org/w/api.php?action=opensearch&search='.$zapurl.'&prop=info&format=xml&inprop=url';
$answ=file_get_contents($url);
$xml = simplexml_load_string($answ);
$otvet=$xml->Section->Item->Description; 
//echo $otvet;
//избавимся от ударений
$otvet=iconv("UTF-8","CP1251//IGNORE",$otvet);
$otvet=iconv("CP1251","UTF-8",$otvet);
$otvet = preg_replace("#\s\(.*?\)#isu", '', $otvet); 
echo( $otvet);
say($otvet,2);
Он и про Деда Мороза, и про Пушкина, и про берёзу
За это сообщение автора xor поблагодарили (всего 2):
skyrider (Пт июн 08, 2018 5:36 pm) • VladPTZ (Пт июн 08, 2018 6:44 pm)
Рейтинг: 2.33%
Ответить