Преобразовать интервал длительности Alexa в количество минут - PullRequest
0 голосов
/ 19 января 2019

Мне просто интересно, есть ли у кого-нибудь код, который я мог бы переработать, пожалуйста.

Я хочу преобразовать длительность типа слота alexa, переданную в мой код Python, в виде строки в количество минут ....

Я думаю, что мог бы это сделать, но это заняло бы некоторое время, так как моя обработка строк не очень хороша, и я думаю, что в итоге я бы написал около 30 строк кода:)

Так что конвертируйте что-то вроде PD2T5H25M в:

2*24*60  +  5* 60  + 25 = answer.
(i don't need to handle years)

Буду очень признателен, если кто-нибудь уже сделал это?

ура

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Вы можете использовать регулярное выражение, вот простой пример, работающий над этим конкретным случаем:

import re

txt='PD2T5H25M'

re1='.*?'       # Non-greedy match on filler
re2='(D)'       # Single Character D
re3='(\\d+)'    # Integer Number 1
re4='.*?'       # Non-greedy match on filler
re5='(\\d+)'    # Integer Number 2
re6='(H)'       # Single Character H
re7='(\\d+)'    # Integer Number 3
re8='(M)'       # Single Character M

rg = re.compile(re1+re2+re3+re4+re5+re6+re7+re8,re.IGNORECASE|re.DOTALL)
m = rg.search(txt)
if m:
    w1   = m.group(1)
    int1 = int(m.group(2))
    int2 = int(m.group(3))
    w2   = m.group(4)
    int3 = int(m.group(5))
    w3   = m.group(6)
    print((int1*24*60) + (int2*60) + int3)
0 голосов
/ 21 января 2019

Итак, после небольшого копания, для дальнейшего ознакомления с другими, вот что произошло.

Я обнаружил, что очень умный человек, который написал колбу-аск, уже проделал всю тяжелую работу.

Если вы передаете длительность типа слота из Alexa, вы можете использовать опцию 'timedelta' для ее преобразования: например:

@ask.intent("DurationIntent",convert={'dduration': 'timedelta'})
def duration(dduration):

  print dduration
  try:
    totalmins = dduration.total_seconds()/60
  except:
    print "oh no"
    write_log ('Alexa bad duration', str(dduration))
    return statement('the duration you provided could not be determined please speak more proper - check the log for details')


  print totalmins
  return statement('that is ' + str(int(totalmins)) + 'minutes')

.,,(write_log - это моя собственная функция, поэтому я могу отслеживать любые ошибки и настраивать намерения и высказывания, чтобы быть более гибкими)

"Alexa ask convert - сколько минут составляет 4 дня и 7 часов и 22 минуты"

она отвечает ......

"Это 6202 минуты"

Кажется, это не работает 100% времени при комбинации лет и недель ичасов, но это более чем достаточно для меня, чтобы увеличить некоторые зоны домашней автоматизации .... так что теперь я заменю свои типы слотов int на "duration", и все это гораздо более гибко ... спасибо, г-н flask-ask

ура

...