def extract_datetime(text, anchorDate=None, lang=None, default_time=None): """ Extracts date and time information from a sentence. Parses many of the common ways that humans express dates and times, including relative dates like "5 days from today", "tomorrow', and "Tuesday". Vague terminology are given arbitrary values, like: - morning = 8 AM - afternoon = 3 PM - evening = 7 PM If a time isn't supplied or implied, the function defaults to 12 AM Args: text (str): the text to be interpreted anchorDate (:obj:`datetime`, optional): the date to be used for relative dating (for example, what does "tomorrow" mean?). Defaults to the current local date/time. lang (str): the BCP-47 code for the language to use, None uses default default_time (datetime.time): time to use if none was found in the input string. Returns: [:obj:`datetime`, :obj:`str`]: 'datetime' is the extracted date as a datetime object in the user's local timezone. 'leftover_string' is the original phrase with all date and time related keywords stripped out. See examples for further clarification Returns 'None' if no date or time related text is found. Examples: >>> extract_datetime( ... "What is the weather like the day after tomorrow?", ... datetime(2017, 06, 30, 00, 00) ... ) [datetime.datetime(2017, 7, 2, 0, 0), 'what is weather like'] >>> extract_datetime( ... "Set up an appointment 2 weeks from Sunday at 5 pm", ... datetime(2016, 02, 19, 00, 00) ... ) [datetime.datetime(2016, 3, 6, 17, 0), 'set up appointment'] >>> extract_datetime( ... "Set up an appointment", ... datetime(2016, 02, 19, 00, 00) ... ) None """ lang_code = get_primary_lang_code(lang) if not anchorDate: anchorDate = now_local() if lang_code == "en": return extract_datetime_en(text, anchorDate, default_time) elif lang_code == "es": return extract_datetime_es(text, anchorDate, default_time) elif lang_code == "pt": return extract_datetime_pt(text, anchorDate, default_time) elif lang_code == "it": return extract_datetime_it(text, anchorDate, default_time) elif lang_code == "fr": return extract_datetime_fr(text, anchorDate, default_time) elif lang_code == "sv": return extract_datetime_sv(text, anchorDate, default_time) elif lang_code == "de": return extract_datetime_de(text, anchorDate, default_time) elif lang_code == "da": return extract_datetime_da(text, anchorDate, default_time) # TODO: extract_datetime for other languages _log_unsupported_language(lang_code, ['en', 'es', 'pt', 'it', 'fr', 'sv', 'de', 'da']) return text
def extract_datetime(text, anchorDate=None, lang="en-us"): """ Extracts date and time information from a sentence. Parses many of the common ways that humans express dates and times, including relative dates like "5 days from today", "tomorrow', and "Tuesday". Vague terminology are given arbitrary values, like: - morning = 8 AM - afternoon = 3 PM - evening = 7 PM If a time isn't supplied or implied, the function defaults to 12 AM Args: text (str): the text to be interpreted anchorDate (:obj:`datetime`, optional): the date to be used for relative dating (for example, what does "tomorrow" mean?). Defaults to the current local date/time. lang (string): the BCP-47 code for the language to use Returns: [:obj:`datetime`, :obj:`str`]: 'datetime' is the extracted date as a datetime object in the user's local timezone. 'leftover_string' is the original phrase with all date and time related keywords stripped out. See examples for further clarification Returns 'None' if the input string is empty. Examples: >>> extract_datetime( ... "What is the weather like the day after tomorrow?", ... datetime(2017, 06, 30, 00, 00) ... ) [datetime.datetime(2017, 7, 2, 0, 0), 'what is weather like'] >>> extract_datetime( ... "Set up an appointment 2 weeks from Sunday at 5 pm", ... datetime(2016, 02, 19, 00, 00) ... ) [datetime.datetime(2016, 3, 6, 17, 0), 'set up appointment'] """ lang_lower = str(lang).lower() if not anchorDate: anchorDate = now_local() if lang_lower.startswith("en"): return extract_datetime_en(text, anchorDate) elif lang_lower.startswith("pt"): return extract_datetime_pt(text, anchorDate) elif lang_lower.startswith("it"): return extract_datetime_it(text, anchorDate) elif lang_lower.startswith("fr"): return extract_datetime_fr(text, anchorDate) elif lang_lower.startswith("sv"): return extract_datetime_sv(text, anchorDate) elif lang_lower.startswith("de"): return extract_datetime_de(text, anchorDate) # TODO: extract_datetime for other languages return text
def extract_datetime(text, anchorDate=None, lang=None, default_time=None): """ Extracts date and time information from a sentence. Parses many of the common ways that humans express dates and times, including relative dates like "5 days from today", "tomorrow', and "Tuesday". Vague terminology are given arbitrary values, like: - morning = 8 AM - afternoon = 3 PM - evening = 7 PM If a time isn't supplied or implied, the function defaults to 12 AM Args: text (str): the text to be interpreted anchorDate (:obj:`datetime`, optional): the date to be used for relative dating (for example, what does "tomorrow" mean?). Defaults to the current local date/time. lang (str): the BCP-47 code for the language to use, None uses default default_time (datetime.time): time to use if none was found in the input string. Returns: [:obj:`datetime`, :obj:`str`]: 'datetime' is the extracted date as a datetime object in the user's local timezone. 'leftover_string' is the original phrase with all date and time related keywords stripped out. See examples for further clarification Returns 'None' if no date or time related text is found. Examples: >>> extract_datetime( ... "What is the weather like the day after tomorrow?", ... datetime(2017, 06, 30, 00, 00) ... ) [datetime.datetime(2017, 7, 2, 0, 0), 'what is weather like'] >>> extract_datetime( ... "Set up an appointment 2 weeks from Sunday at 5 pm", ... datetime(2016, 02, 19, 00, 00) ... ) [datetime.datetime(2016, 3, 6, 17, 0), 'set up appointment'] >>> extract_datetime( ... "Set up an appointment", ... datetime(2016, 02, 19, 00, 00) ... ) None """ lang_code = get_primary_lang_code(lang) if not anchorDate: anchorDate = now_local() if lang_code == "en": return extract_datetime_en(text, anchorDate, default_time) elif lang_code == "es": return extract_datetime_es(text, anchorDate, default_time) elif lang_code == "pt": return extract_datetime_pt(text, anchorDate, default_time) elif lang_code == "it": return extract_datetime_it(text, anchorDate, default_time) elif lang_code == "fr": return extract_datetime_fr(text, anchorDate, default_time) elif lang_code == "sv": return extract_datetime_sv(text, anchorDate, default_time) elif lang_code == "de": return extract_datetime_de(text, anchorDate, default_time) elif lang_code == "da": return extract_datetime_da(text, anchorDate, default_time) # TODO: extract_datetime for other languages _log_unsupported_language(lang_code, ['en', 'es', 'pt', 'it', 'fr', 'sv', 'de', 'da']) return text
def extract_datetime(text, anchorDate=None, lang="en-us", default_time=None): """ Extracts date and time information from a sentence. Parses many of the common ways that humans express dates and times, including relative dates like "5 days from today", "tomorrow', and "Tuesday". Vague terminology are given arbitrary values, like: - morning = 8 AM - afternoon = 3 PM - evening = 7 PM If a time isn't supplied or implied, the function defaults to 12 AM Args: text (str): the text to be interpreted anchorDate (:obj:`datetime`, optional): the date to be used for relative dating (for example, what does "tomorrow" mean?). Defaults to the current local date/time. lang (string): the BCP-47 code for the language to use default_time (datetime.time): time to use if none was found in the input string. Returns: [:obj:`datetime`, :obj:`str`]: 'datetime' is the extracted date as a datetime object in the user's local timezone. 'leftover_string' is the original phrase with all date and time related keywords stripped out. See examples for further clarification Returns 'None' if no date or time related text is found. Examples: >>> extract_datetime( ... "What is the weather like the day after tomorrow?", ... datetime(2017, 06, 30, 00, 00) ... ) [datetime.datetime(2017, 7, 2, 0, 0), 'what is weather like'] >>> extract_datetime( ... "Set up an appointment 2 weeks from Sunday at 5 pm", ... datetime(2016, 02, 19, 00, 00) ... ) [datetime.datetime(2016, 3, 6, 17, 0), 'set up appointment'] >>> extract_datetime( ... "Set up an appointment", ... datetime(2016, 02, 19, 00, 00) ... ) None """ lang_lower = str(lang).lower() if not anchorDate: anchorDate = now_local() if lang_lower.startswith("en"): return extract_datetime_en(text, anchorDate, default_time) elif lang_lower.startswith("es"): return extract_datetime_es(text, anchorDate, default_time) elif lang_lower.startswith("pt"): return extract_datetime_pt(text, anchorDate, default_time) elif lang_lower.startswith("it"): return extract_datetime_it(text, anchorDate, default_time) elif lang_lower.startswith("fr"): return extract_datetime_fr(text, anchorDate, default_time) elif lang_lower.startswith("sv"): return extract_datetime_sv(text, anchorDate, default_time) elif lang_lower.startswith("de"): return extract_datetime_de(text, anchorDate, default_time) # TODO: extract_datetime for other languages LOG.warning('Language "{}" not recognized! Please make sure your ' 'language is one of the following: ' 'en, es, pt, it, fr, sv, de.'.format(lang_lower)) return text
def extract_datetime(text, anchorDate=None, lang="en-us"): """ Parsing function that extracts date and time information from sentences. Parses many of the common ways that humans express dates and times. Includes relative dates like "5 days from today". Vague terminology are given arbitrary values, like: - morning = 8 AM - afternoon = 3 PM - evening = 7 PM If a time isn't supplied, the function defaults to 12 AM Args: str (string): the text to be normalized anchortDate (:obj:`datetime`, optional): the date to be used for relative dating (for example, what does "tomorrow" mean?). Defaults to the current date (acquired with datetime.datetime.now()) lang (string): the language of the sentence(s) Returns: [:obj:`datetime`, :obj:`str`]: 'datetime' is the extracted date as a datetime object. Times are represented in 24 hour notation. 'leftover_string' is the original phrase with all date and time related keywords stripped out. See examples for further clarification Returns 'None' if no date was extracted. Examples: >>> extract_datetime( ... "What is the weather like the day after tomorrow?", ... datetime(2017, 06, 30, 00, 00) ... ) [datetime.datetime(2017, 7, 2, 0, 0), 'what is weather like'] >>> extract_datetime( ... "Set up an appointment 2 weeks from Sunday at 5 pm", ... datetime(2016, 02, 19, 00, 00) ... ) [datetime.datetime(2016, 3, 6, 17, 0), 'set up appointment'] """ lang_lower = str(lang).lower() if lang_lower.startswith("en"): return extract_datetime_en(text, anchorDate) elif lang_lower.startswith("pt"): return extract_datetime_pt(text, anchorDate) elif lang_lower.startswith("it"): return extract_datetime_it(text, anchorDate) elif lang_lower.startswith("fr"): return extract_datetime_fr(text, anchorDate) elif lang_lower.startswith("sv"): return extract_datetime_sv(text, anchorDate) elif lang_lower.startswith("de"): return extract_datetime_de(text, anchorDate) # TODO: extract_datetime for other languages return text