本程序针对的是酒店的预定系统,已经将语音转换为中文文本的情况下,将时间转换为统一的格式输出。我们可能会遇到如“八月14”,“2018年6月”,“20160502”这样的格式,最后统一转换为Python中‘%Y-%m-%d %H:%M:%S’这种时间格式输出,下面展示的是整个程序最后的效果:
text1 = '我要住到明天下午六点'
print(text1, time_extract(text1), sep=':')
text2 = '预定30号的房间'
print(text2, time_extract(text2), sep=':')
text3 = '我要从27号下午5点住到10月5号'
print(text3, time_extract(text3), sep=':')
我要住到明天下午六点:['2018-08-15 18:00:00']
预定30号的房间:['2018-08-30 00:00:00']
我要从27号下午5点住到10月5号:['2018-08-27 17:00:00', '2018-10-05 00:00:00']
我们将整体的代码分解成三部分来看,先看第一部分,将输入的带有时间标志的文本进行两部处理,一是在时间前加上统一的年月日,方便后期的输出,二是将涉及到两个日期的部分分割出来。
#提取文本中的时间部分
from datetime import datetime,timedelta
import jieba.posseg as psg
def time_extract(text):
time_res = []
word = ''
keyDate = {'今天':0,'明天':1,'后天':2}
for k,v in psg.cut(text):
if k in keyDate.keys():
if word != '':
time_res.append(word)
word = (datetime.today() + timedelta(days=keyDate.get(k,0))).strft