我只是想知道是否有人有一些我可以回收的代码。
我想将作为字符串传递到我的 python 代码中的 alexa 插槽类型的持续时间转换为几分钟......
我想我可以做到,但这需要一段时间,因为我的字符串处理不是很好,我想我最终会写大约 30 行代码:)
因此,将类似 PD2T5H25M
的内容转换为:
2*24*60 + 5* 60 + 25 = answer.
(i don't need to handle years)
如果有人已经这样做了,我将不胜感激?
干杯
您可以使用正则表达式,这里有一个简单的示例来处理该特定情况:
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)
所以,经过一番挖掘,供其他人将来参考,这是发生的事情。
我发现写烧瓶问的那个非常聪明的人已经完成了所有的艰苦工作。
如果您从 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 插槽类型,它都更加灵活......谢谢弗拉斯克-问先生
干杯