将Alexa持续时间槽转换为分钟数

时间:2019-01-19 18:15:16

标签: python alexa duration slot

我只是想知道是否有人可以回收一些代码。

我想将持续时间的alexa插槽类型转换为以分钟为单位的字符串形式传递给我的python代码。...

我认为我可以做到,但是要花一些时间,因为我的字符串处理效果不佳,我想最终要编写大约30行代码:)

因此将类似PD2T5H25M的内容转换为:

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

如果有人已经做到了,我将不胜感激?

欢呼

2 个答案:

答案 0 :(得分:1)

您可以使用regex,这是处理特定情况的简单示例:

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)

答案 1 :(得分:0)

因此,经过一番挖掘,以备将来参考,这是发生的事情。

我发现写烧瓶询问的非常聪明的人已经完成了所有艰苦的工作。

如果您从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询问转换-4天7小时22分钟是多少分钟”

她回答......

“那是6202分钟”

几年,几周和几小时的结合似乎不能100%地起作用,但是它足以让我提升一些家庭自动化区域。...所以现在我将更换我的具有“持续时间”的int插槽类型及其更灵活的功能...感谢烧瓶先生

欢呼