【问题标题】:How to extract dates from input text for chatbot?如何从聊天机器人的输入文本中提取日期?
【发布时间】:2019-06-07 06:51:39
【问题描述】:

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

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

这些只是一个示例。提取日期后,我需要在 sql 中构建查询。我对少数情况进行了热编码。但是当我想到时,越来越多的情况出现了热编码可能很耗时。是否有任何内置库可以减轻我的工作?

【问题讨论】:

  • 基本上,您要求的是完整的聊天机器人。这正是这个机器人的想法,建立一个自动识别器。作为起点,你也许可以试试这个:stackoverflow.com/questions/9507648/… ...
  • 我预计我要求的太多了。好的,很酷,我会调查的。我会继续我正在做的事情。

标签: python date chatbot


【解决方案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"

一般来说,您可能希望聊天机器人在无法从文本中提取日期时,以更容易检测到的格式专门询问日期。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多