from ctparse import ctparse #Used for parsing time (parsetime), https://github.com/comtravo/ctparse import parsedatetime #Used for parsing time (parsetime2), https://github.com/bear/parsedatetime import HumanTime import arrow import natural_time from datetime import datetime import time if __name__ == '__main__': from regexTimeParser import RegexTimeParser else: from skills.regexTimeParser import RegexTimeParser """ Reading Material: https://github.com/nltk/nltk_contrib/blob/95d1806e2f4e89e960b76a685b1fba2eaa7d5142/nltk_contrib/timex.py#L29 This has a bunch of regex expressions for NLP of time, might be able to modify this + parsedatetime + ctparse into my own custom implementation that does everything I want. Maybe if it works well enough I can post it to pypi as its own module and github for contributions. """ def parsetime(phrase): """ Takes in natrual language time phrase, outputs datetime object """ ts = datetime.now() p = ctparse(phrase, ts=ts) # print(p) if p is not None: return p.resolution.dt return p # return ctparse(phrase, ts=ts) def parsetime2(phrase): """ Takes in natrual language time phrase, outputs datetime object Handles seconds better Doesnt handle 'in the afternoon' Does handle 'this afternoon' """ time_struct, parse_status = parsedatetime.Calendar().parse(phrase) # print(time_struct, parse_status) return datetime(*time_struct[:6]) def parsetime3(phrase): return HumanTime.parseTime(phrase) def parsetime4(phrase): return arrow.utcnow().dehumanize(phrase) def parsetime5(phrase): return natural_time.natural_time(phrase) time_parser = RegexTimeParser() def parsetime6(phrase): return time_parser.parse_time(phrase) if __name__ == "__main__": # t = parsetime('May 5th in the afternoon') # print(t) # t55 = parsetime('set an alarm for 2:30 in the afternoon') # print(t55) # t66 = parsetime('147 in the afternoon') # print(t66) # t67 = parsetime2('147 in the afternoon') # print(t67) t68 = parsetime6('147 afternoon') print(t68) t88 = parsetime6('1 in the afternoon') print(t88) t89 = parsetime6('thursday at 9 pm') print(t89) # t89 = parsetime5('147 in the afternoon') # print(t89) # t90 = parsetime5('147 after noon') # print(t90) # print(time.mktime(t67.timetuple())) # t5 = parsetime('in 5 minutes 30 seconds') # print(t5) # t2 = parsetime('15 seconds') # # print(t2) # # print(t2) # if t2 is not None: # print(t2.resolution) # t2 = parsetime2('now') # print(time.mktime(t2.timetuple())) # t3 = parsetime2('in 5 minutes 30 seconds') # print(time.mktime(t3.timetuple())) # t4 = parsetime2('4 in the afternoon') # print(time.mktime(t4.timetuple())) # print(t4) # print(time.strftime("%H:%M:%S", t3.timetuple())) # for x in t: # print(x)