Реализация голосовых напоминаний

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

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

Re: Реализация голосовых напоминаний

Сообщение fandaymon » Ср мар 28, 2018 1:16 am

Возможно последнее слово не будет пропадать, если писать не (.+), а (.*)
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Реализация голосовых напоминаний

Сообщение Logrus » Ср мар 28, 2018 1:43 am

СпойлерПоказать
[Нн]апомни ((через (\d+|один|одну|дв[ае]|три|четыре|пять|шесть|семь|восемь|девять) (часа|час|часов|минут|минуту|минуты|секунд|секунды|секунду))|в \d+:\d+|(завтра|послезавтра|сегодня|на завтра|на послезавтра) в \d+:\d+) (.*)
03:40 Алиса: Вы просили напомнить попить чай с
03:38 Алиса: Задание напомнить попить чай с установлено на двадцать восьмое марта в 03:40
03:38 Александр: Напомни через две минуты попить чай с сахаром

03:45 Алиса: Вы просили напомнить попить
03:43 Алиса: Задание напомнить попить установлено на двадцать восьмое марта в 03:45
03:43 Александр: Напомни через две минуты попить чаю

п.с. Спасибо в конце говорить нужно, .ля !!!)))
Спасибо.PNG
Спасибо.PNG (24.58 КБ) 3889 просмотров
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Реализация голосовых напоминаний

Сообщение fandaymon » Ср мар 28, 2018 1:55 am

Logrus писал(а): 03:40 Алиса: Вы просили напомнить попить чай с
03:38 Алиса: Задание напомнить попить чай с установлено на двадцать восьмое марта в 03:40
03:38 Александр: Напомни через две минуты попить чай с сахаром
А если такой сценарий запустить?
СпойлерПоказать

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

$message='Напомни через 5 минут попить чай с сахаром';
$pattern='/[Нн]апомни ((через (\d+|один|одну|дв[ае]|три|четыре|пять|шесть|семь|восемь|девять) (часа|час|часов|минут|минуту|минуты|секунд|секунды|секунду))|в \d+:\d+|(завтра|послезавтра|сегодня|на завтра|на послезавтра) в \d+:\d+) (.*)/';
preg_match ($pattern ,$message, $matches);

$u=5;
$naptime = mb_strtolower($matches[1]);
$request = mb_strtolower($matches[6]);
$chislo = array('один'=> '1','одну'=> '1','два'=> '2','две'=> '2','три'=> '3','четыре'=> '4','пять'=> '5','шесть'=> '6','семь'=> '7','восемь'=> '8','девять'=> '9');
foreach($chislo as $key => $value) {$naptime =str_replace($key,$value,$naptime);}

if ($request!='') {
$su=0;
$naptime=str_replace(" на ", " ", $naptime);
if (stristr($naptime, "сегодня") != FALSE) {$naptime = str_replace("сегодня ", "", $naptime); $su=0;}
if (stristr($naptime, "послезавтра") != FALSE) {$naptime = str_replace("послезавтра ", "", $naptime); $su=2;}
if (stristr($naptime, "завтра") != FALSE) {$naptime = str_replace("завтра", "", $naptime); $su=1;}
$a=$su*86400+recognizeTime($naptime,$b);
if(time()<($a-30)){
$nday=date( "j" , $a);
$MonthNames=array("января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря");
$nmes=date( "n" , $a)-1;
$nmonth=$MonthNames[$nmes];
$ntime=date( "H:i" , $a);
$chisl = array(1=> 'первое',2=> 'второе',3=> 'третье',4=> 'четвертое',5=> 'пятое',6=> 'шестое',7=> 'седьмое',8=> 'восьмое',9=> 'девятое',10=> 'десятое',11=> 'одиннадцатое',12=> 'двенадцатое',13=> 'тринадцатое',14=> 'четырнадцатое' ,15=> 'пятнадцатое',16=> 'шестнадцатое',17=> 'семнадцатое',18=> 'восемнадцатое',19=> 'девятнадцатое',20=> 'двадцатое',30=> 'тридцатое',21=> 'двадцать',31=> 'тридцать');
if ($nday<21||$nday==30) {$chtext=$chisl[$nday];} else {$chtext=$chisl[(int)($nday/10)*10+1].' '.$chisl[$nday % 10] ;}
//AddScheduledJob($request,"playSound('opoveshenie.mp3'); say('Вы просили напомнить ".$request."',".$u.");",$a, 60);
echo "Задание напомнить ".$request." установлено на ".$chtext." ".$nmonth." в ".$ntime;}
else
{say("Назначить напоминание на заданное время невозможно!",$u);}}
else
{say("Непонятно, что напомнить?!",$u);} 

print_r($matches); 
За это сообщение автора fandaymon поблагодарил:
Logrus (Ср мар 28, 2018 2:31 am)
Рейтинг: 1.16%
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Реализация голосовых напоминаний

Сообщение Logrus » Ср мар 28, 2018 2:07 am

старый закомментировал /* */ новый вставил выше, вообще не срабатывает
04:05 Александр: Напомни через 5 минут попить чай с сахаром
04:04 Александр: Напомни завтра в 2:00 дня сходить в магазин
04:04 Александр: Напомни через две минуты попить чаю
04:03 Александр: Напомни через 5 минут попить чай с сахаром
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Реализация голосовых напоминаний

Сообщение fandaymon » Ср мар 28, 2018 2:10 am

Logrus писал(а):старый закомментировал /* */ новый вставил выше, вообще не срабатывает
Это не шаблон, это сценарий - его надо скопировать в новый сценарий и запустить, чтобы посмотреть как отрабатывают регулярные выражения
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Реализация голосовых напоминаний

Сообщение Logrus » Ср мар 28, 2018 2:20 am

красноглазие уже
Задание напомнить попить чай с сахаром установлено на двадцать восьмое марта в 04:24Array ( [0] => �апомни через 5 минут попить чай с сахаром [1] => через 5 минут [2] => через 5 минут [3] => 5 [4] => минут [5] => [6] => попить чай с сахаром )

хз, вернул в шаблонах все взад
04:25 Алиса: Задание напомнить попить чай с сахаром установлено на двадцать восьмое марта в 04:27
04:25 Александр: Напомни через две минуты попить чай с сахаром
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Реализация голосовых напоминаний

Сообщение fandaymon » Ср мар 28, 2018 2:30 am

Logrus писал(а):красноглазие уже
Задание напомнить попить чай с сахаром установлено на двадцать восьмое марта в 04:24Array ( [0] => �апомни через 5 минут попить чай с сахаром [1] => через 5 минут [2] => через 5 минут [3] => 5 [4] => минут [5] => [6] => попить чай с сахаром )
Ну т.е. в сценарии этот шаблон отрабатывает как должен - в 6 элемент массива попадает фраза полностью. Видимо когда этот же шаблон в patterns отрабатывает, то срабатывает ещё какой-то модификатор... Очень странно. В принципе можно сделать костыль и для шаблона, если эти
5 строчки написать вместо первых 3 строчек оригинального сценария

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

$pattern='/[Нн]апомни ((через (\d+|один|одну|дв[ае]|три|четыре|пять|шесть|семь|восемь|девять) (часа|час|часов|минут|минуту|минуты|секунд|секунды|секунду))|в \d+:\d+|(завтра|послезавтра|сегодня|на завтра|на послезавтра) в \d+:\d+) (.*)/';
preg_match ($pattern ,$matches[0], $matches_m);
$u=5;
$naptime = mb_strtolower($matches[1]);
$request = mb_strtolower($matches_m[6]); 
Т.е. время мы получаем из шаблона, а $request из preg_match этого же шаблона, но уже внутри сценария
За это сообщение автора fandaymon поблагодарил:
Logrus (Ср мар 28, 2018 2:32 am)
Рейтинг: 1.16%
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Реализация голосовых напоминаний

Сообщение Logrus » Ср мар 28, 2018 2:33 am

пока остановлюсь, выше (вернул все в зад), оно само заработало, я не понял, хз
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: Реализация голосовых напоминаний

Сообщение fandaymon » Ср мар 28, 2018 2:39 am

Выправилось наверное из-за того что при распознавании две добавляется ещё один элемент matches...
И кстати в сценарии шаблон не срабатывает

Наверное такие сложные шаблоны с переменным количеством попаданий лучше не делать. А делать простой шаблон Напомни (.*) и дальше раскладывать на составляющие в самом шаблоне.
Кстати довольно большую часть работы можно возложить на recognizeTime($text) -- функция пытается из фразы извлечь конкретное время/дату. Например $text может быть "в 9:30" или "через 5 минут"
Вызывать её, правда, надо не так как написано в руководстве, а recognizeTime($text,$new_text) + насколько я понимаю через три минуты она не поймёт и сегодня/завтра/послезавтра тоже придётся анализировать отдельно
Последний раз редактировалось fandaymon Ср мар 28, 2018 2:51 am, всего редактировалось 1 раз.
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Реализация голосовых напоминаний

Сообщение Logrus » Ср мар 28, 2018 2:41 am

ага, в сценарии не работал
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Ответить