Страница 5 из 9
Re: Будильник
Добавлено: Пт авг 28, 2015 10:37 am
sega6549
доброе утро, у меня такая проблема, я говорю алисе поставить будильник на 8 часов 10 минут, она так и ставить, 8:10 но системное время и время алисы 08:10 и потому будильник не срабатывает, помогите решить проблему плиз, ставлю таким шаблоном:
Код: Выделить всё
((В|в)ключи|(П|п)оставь|(У|у)станови) будильник на (\d+)(\s*)(часов|:)*(\s*)(\d*)
,
код такой:
Код: Выделить всё
$h=$matches[5];
$m=$matches[9];
if ($h>24) {
say("Непонятно на который час завести будильник, определитесь и сообщите снова.",5);
return;
}
if (($m>59)|(!$m)) {
say("Непонятно на сколько минут завести будильник, поэтому пусть будет ровно 00.",5);
$m="00";
}
say("Ставлю будильник на ".$h." часов ".$m." минут. Постарайтесь не проспать.",5);
setGlobal('AlarmOne.AlarmOn',1);
setGlobal('AlarmOne.AlarmTime',$h.':'.$m);
что тут можно изменить чтоб ставило нормально?
задавал вопрос в другой ветке но че то молчат, извините за дублирование, просто скоро уезжаю и хотелось бы доделать его
Re: Будильник
Добавлено: Пт авг 28, 2015 11:06 am
Amarok
Код: Выделить всё
(поставь|установи|заведи) будильник на (\d+)(\s*)(часов|:)*(\s*)(\d*)
Код: Выделить всё
$h=$matches[2];
$m=$matches[6];
if ($h>24) {
say("Непонятно на который час завести будильник, определитесь и сообщите снова.",5);
return;
}
if (($m>59)|(!$m)) {
say("Непонятно на сколько минут завести будильник, поэтому пусть будет ровно 00.",5);
$m="00";
}
say("Ставлю будильник на ".$h." часов ".$m." минут. Постарайтесь не проспать.",5);
setGlobal('AlarmOne.AlarmOn',1);
setGlobal('AlarmOne.AlarmTime',$h.':'.$m);
Re: Будильник
Добавлено: Пт авг 28, 2015 11:17 am
sega6549
все, разобрался, может кому пригодится, код;
Код: Выделить всё
$h=$matches[5];
$m=$matches[9];
$hh=$h;
if ($h<10) {$h="0".$h;}
if ($h>24) {
say("Непонятно на который час завести будильник, определитесь и сообщите снова.",5);
return;
}
if (($m>59)|(!$m)) {
say("Непонятно на сколько минут завести будильник, поэтому пусть будет ровно 00.",5);
$m="00";
}
say("Ставлю будильник на ".$h." часов ".$m." минут. Постарайтесь не проспать.",5);
setGlobal('AlarmOne.AlarmOn',1);
setGlobal('AlarmOne.AlarmTime',$h.':'.$m);
Re: Будильник
Добавлено: Пт авг 28, 2015 11:20 am
sega6549
Amarok писал(а):Код: Выделить всё
(поставь|установи|заведи) будильник на (\d+)(\s*)(часов|:)*(\s*)(\d*)
Код: Выделить всё
$h=$matches[2];
$m=$matches[6];
if ($h>24) {
say("Непонятно на который час завести будильник, определитесь и сообщите снова.",5);
return;
}
if (($m>59)|(!$m)) {
say("Непонятно на сколько минут завести будильник, поэтому пусть будет ровно 00.",5);
$m="00";
}
say("Ставлю будильник на ".$h." часов ".$m." минут. Постарайтесь не проспать.",5);
setGlobal('AlarmOne.AlarmOn',1);
setGlobal('AlarmOne.AlarmTime',$h.':'.$m);
а в чем разница?
Re: Будильник
Добавлено: Пт авг 28, 2015 1:02 pm
Amarok
Re: Будильник
Добавлено: Пт авг 28, 2015 1:32 pm
LutsenkoDenis
Где в коде используется переменная $hh?
Это
можно заменить на это
Код: Выделить всё
$h = str_pad($h, 2, '0', STR_PAD_LEFT); // добавляет лидирующий ноль перед строкой до указанного кол-ва знаков
Re: Будильник
Добавлено: Пт авг 28, 2015 6:13 pm
sega6549
че то не вижу этих срок в твоем коде...
Re: Будильник
Добавлено: Пт авг 28, 2015 8:24 pm
GreatBAO
кстати по поводу шаблона (поставь|установи|заведи) будильник на (\d+)(\s*)(часов|:)*(\s*)(\d*)
в PHP регулярках я обычно игнорю заглавные буквы такой конструкцией /(поставь|установи|заведи) будильник на (\d+)(\s*)(часов|:)*(\s*)(\d*)/i
но тут такая конструкция не отрабатывается, вопрос - как такой шаблон привести в регистронезависимый вариант без всяких (А|а) или [a-zA-Z]?
или лучше реализовать это сразу в коде ? что бы система, при обработке голосовых команд не учитывала регистр ?
Re: Будильник
Добавлено: Пт авг 28, 2015 8:36 pm
Amarok
$where = $matches[1];
$where = mb_strtolower ($where, UTF8);
Re: Будильник
Добавлено: Пт авг 28, 2015 8:47 pm
GreatBAO
Amarok писал(а):$where = $matches[1];
$where = mb_strtolower ($where, UTF8);
ну пока так и делаю, но считаю это "костылями"
В основном, все запросы к системе идут по микрофону, отсюда делаем вывод что система примет запрос в нижнем регистре, но если делать запрос руками, то можно по привычке набрать первую заглавную (либо включен капс) и тогда шаблоны поведения уже не отрабатывают корректно без обработки регистра.
мне все таки кажется что можно научить систему правильным шаблонам согласно регуляркам PHP в виде //i
нужно будет потом поглядеть как обрабатываются эти шаблоны в основном коде
add: в общем немного поэкспериментировав, получил рабочий парсер заглавных букв в виде (\S{1}айди|\S{1}окажи)
может кто-то предложит вариант покрасивше ?)