NLP 中的解析时间

数据挖掘 nlp
2022-02-18 10:25:02

“我想下周二去游泳” 我想用机器学习我想去游泳的日期。是否有任何方法或库可以

  1. 提取“下周二”

  2. 并计算确切的日期?

4个回答

有一个名为dateparser的 Python 库,它可以接受多种格式,包括像“下周二”这样的相对日期,并返回精确的datetime表示。

一个好的解决方案即服务可以使用Microsoft LUIS在 LUIS 中,您可以使用预构建的 datetimeV2 实体来识别日期、时间、日期范围和持续时间。要了解有关此预建实体的更多信息,请参阅文档

我将列出解决您问题的可能方法:

A- 天真的方法

  1. 保存当前日期
  2. 使用正则表达式从字符串中提取日期并提取其在一周中的排名(例如 0 表示周一 1 表示周二等)
  3. 查找前面的单词以输出 3
  4. 如果输出 3 是“下一个”-> 确切日期 = 下一个日历周从 2 输出的日期
  5. 如果输出 3 为 "on"/"this" --> 确切日期 = 本日历周中 2 的输出日期。

如果您使用的是 python,您将需要recalendar包。

优点:

  1. 发展速度快
  2. 足以应付大多数情况

缺点:

  1. 实施缓慢,取决于文本的长度
  2. 您必须在上面的输出 4 中考虑所有可能的情况

B- 分类

使用正面和负面示例创建字符串的基本事实,并将其输入分类器以从这些示例中学习。

您需要首先解析文本作为预处理步骤(但大多数方法都是这种情况,不是吗?)

优点:

  1. 快速实施
  2. 较少基于规则
  3. 取决于分类器,预计准确度会很高

缺点:

  1. 创建基本事实是一项耗时的工作(可以通过将此方法与 Naïve 方法或与 some 结合使用来最小化nlp
  2. L 需要时间来训练(但这不应该太长)

C- 以苹果的方式去做

查看有关Apple 数据检测器的一些信息

这个问题有两个部分。

要解决第一个问题,您可以使用名为Named Entity Recognition的东西。查找日期的问题实际上是更一般的NER 问题的子问题不过,您可以尝试令人敬畏的Spacy NER Finder

import spacy

nlp = spacy.load('en_core_web_sm')
doc = nlp(u'I want to go swimming next Tuesday')

for ent in doc.ents:
    print(ent.text , ent.label_)

下周二 DATE

代码在文本中查找所有命名实体。如果您获得一种以上的实体,您可以过滤掉您的相关 DATE 实体

第二个问题稍微简单一些,一旦你有了 DATE 实体,它就只取决于你的 Python 能力了。您可以通过以下方式进行:

  • 获取 DATE 实体
  • 保存当前日期和日期。
  • 通过比较今天和从文本中提取的日期,确定需要添加到当前日期的天数。
  • 添加编号。几天到今天的日期以获得所需的日期