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

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

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

fandaymon
Сообщения: 1576
Зарегистрирован: Сб янв 13, 2018 5:00 pm

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

Сообщение fandaymon »

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)
Yashalta
Сообщения: 318
Зарегистрирован: Вс май 20, 2018 9:27 am

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

Сообщение Yashalta »

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

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

и тоже самое с миусом, плюсом и т.д.
fandaymon
Сообщения: 1576
Зарегистрирован: Сб янв 13, 2018 5:00 pm

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

Сообщение fandaymon »

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
Сообщения: 318
Зарегистрирован: Вс май 20, 2018 9:27 am

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

Сообщение Yashalta »

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
Сообщения: 1576
Зарегистрирован: Сб янв 13, 2018 5:00 pm

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

Сообщение fandaymon »

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 - одного вполне достаточно
Yashalta
Сообщения: 318
Зарегистрирован: Вс май 20, 2018 9:27 am

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

Сообщение Yashalta »

Я оставлю здесь конечный результат "Калькулятора"
ОГРОМНОЕ СПАСИБО 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 указывает точность после запятой!
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm

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

Сообщение xor »

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

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

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

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

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

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

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

Сообщение VladPTZ »

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

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

Сообщение fandaymon »

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

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

Сообщение xor »

А чего так мудрёно-то?
И вот топик был 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);
Он и про Деда Мороза, и про Пушкина, и про берёзу
Ответить