【问题标题】:Is there a good way to identify whether there is date information contained in a String有没有一种好方法可以识别字符串中是否包含日期信息
【发布时间】:2015-04-17 21:29:01
【问题描述】:

我在尝试识别段落中是否包含日期信息时遇到了这个问题。那么问题来了:

  1. 我们不知道日期字符串可能出现在哪里。一段类似于“我们想将约会定在 11 月 15 日。然后我们会......”。所以我们不能直接使用 DateTime.parse()

  2. 日期的格式是任意的,可以是“11月15日”或“08/21/1988”或“本月5日”等更正式的形式。

鉴于日期信息可以有多种形式,因此不太可能涵盖所有情况,我只想涵盖尽可能多的情况。我想,我能想出的轻量级解决方案是正则表达式……这又是一个巨大的表达式。有谁知道是否有更好的解决方案或可用的正则表达式?

(P.S. 我更喜欢更轻量级的方法,机器学习之类的方法可能更通用,但不适用于我这里的任务)

【问题讨论】:

  • 用可能的格式创建一个列表。检查是否有任何单词或单词组与列表中的任何可能格式匹配。
  • 您可以为每种可能的日期格式编写一个正则表达式,然后对每个正则表达式的文本运行搜索。
  • 除非您可以预先定义什么是 date 且没有任何歧义,否则不会有简单的解决方案。
  • 类似post

标签: java date


【解决方案1】:

我也可以使用正则表达式(或多个)来处理它。

我会让正则表达式匹配看起来像日期的区域,方法是匹配“th”、“nd”、“st”、月/日名称和缩写、点/线/斜线/冒号分隔的数字等事物。对此进行试验,看看它在大量测试用例中找到日期的效果如何。

解析可能的日期是另一回事。我猜你需要像 PHP 的 strtotime 这样强大的东西。

另一种方法是明确定义大量可能的格式。然后,当检测到一个时,您可以轻松解析它。不过对我来说感觉太暴力了

【讨论】:

  • 谢谢,我想我会先从建议开始,看看我能覆盖多少....
【解决方案2】:

作为起点,http://regexlib.com 上有七页日期正则表达式。如果您不知道要查找哪一个,我会创建一个数组并一次应用一个。对于 2015 年 11 月 12 日和 2015 年 12 月 11 日这样的日期,您仍然会遇到问题,因此仍然需要进行某种澄清过程(例如,自动回邮件并询问“您是指 12 月 11 日还是 11 月 12 日? ")。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 2020-11-26
    相关资源
    最近更新 更多