如何从聊天机器人的输入文本中提取日期?

时间:2019-06-07 06:51:39

标签: python date chatbot

我正在用python构建一个聊天机器人。我需要从用户的输入文本中提取日期。一些测试用例可以如下:

1."last week of july"
2." in june"
3. "last month"
4. "last n days"

这些只是一个示例。提取日期后,我需要在sql中建立查询。我在少数情况下进行了热编码。但是当我认为时,越来越多的情况下热编码可能会很耗时。有内置的库可以减轻我的工作负担吗?

2 个答案:

答案 0 :(得分:1)

您可以使用dateparser库。

import dateparser

nl_dates = ["last week of july", " in june", "last month", "last n days"]

for nl_date in nl_dates:
    res = dateparser.parse(nl_date)
    if res:
         print('"{}"": {}'.format(nl_date,res.date()))

" in june": 2019-06-12
"last month": 2019-05-12

该库将能够正确处理您的4个示例中的2个。另外,使用NER(命名实体识别)模型可能会有所帮助,spacy提供了一种:

import spacy
nlp = spacy.load("en_core_web_sm")
nl_dates = ["last week of july", " in june", "last month", "last 7 days"]

for nl_date in nl_dates:
    doc = nlp(nl_date)
    for entity in doc.ents:
        print('{}: {}'.format(entity.label_, entity.text))

"DATE: last week"
"DATE: last month"
"DATE: last 7 days"

通常,您可能希望聊天机器人在无法从文本中提取日期时以一种更易于检测的格式具体要求日期。

答案 1 :(得分:0)

我会考虑使用诸如DialogflowWit.ai之类的NLP API。就个人而言,我更喜欢Wit.ai,因为它可以识别日期和日期范围,并且还可以接受上下文,这使您可以根据用户的时区调整识别(这可以为您节省很多麻烦,具体取决于时间)在用户区域中,“星期三”或“下周”可能会有不同的解释。