将Alexa duration slot转换为分钟数

2024-09-28 05:23:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是想知道是否有人有一点代码我可以回收请。你知道吗

我想将alexa slot类型的duration作为字符串传递到python代码中,转换为分钟数。。。。你知道吗

我想我可以做到,但这需要一段时间,因为我的字符串处理不是很好,我想我最终会写大约30行代码:)

所以把PD2T5H25M转换成:

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

如果有人已经这么做了我会非常感激的?你知道吗

干杯


Tags: to字符串代码answer类型needalexahandle
2条回答

所以,经过一番挖掘,供以后其他人参考,下面是发生的事情。你知道吗

我发现写这封信的那个非常聪明的人已经完成了所有的艰苦工作。你知道吗

如果您从Alexa传入一个时段类型duration,您可以使用'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')

是的。 . . (写日志是我自己的功能,因此我可以跟踪任何错误,并对意图和话语进行微调,使其更加灵活)

“Alexa ask convert-4天7小时22分钟等于多少分钟”

她回答。。。。。。你知道吗

“那是6202分钟”

它似乎不能在数年、数周、数小时的时间里100%地工作,但它足以让我提升一些家庭自动化区域……因此,现在我将用“duration”替换我的int插槽类型,而且它的灵活性要大得多……谢谢你

干杯

您可以使用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)

相关问题 更多 >

    热门问题