首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中从字符串中识别日期

如何在Java中从字符串中识别日期
EN

Stack Overflow用户
提问于 2015-11-05 22:30:57
回答 4查看 6.4K关注 0票数 20

最近,我遇到了一个相当“简单”的问题。假设有句子(保存在字符串中),我需要找出这个字符串中是否有日期。挑战在于日期可以有很多不同的格式。列表中显示了一些示例:

伦敦

  • 1956年6月12日伦敦

  • 2014年10月21日

  • 10月13日

值得一提的是,这些都包含在一个字符串中。作为一个例子,它可以是这样的:

代码语言:javascript
复制
String s = "This event took place on 13 October 1999.";

在这种情况下,我的问题是如何检测这个字符串中是否有日期。我的第一种方法是搜索单词"event",然后尝试本地化日期。但是,随着日期的可能格式越来越多,这种解决方案并不是很美观。我尝试的第二个解决方案是创建一个几个月的列表并进行搜索。这有很好的结果,但仍然遗漏了日期都以数字表示的情况。

到目前为止,我还没有尝试过的一种解决方案是设计正则表达式,并尝试在字符串中找到匹配项。不确定此解决方案可能会在多大程度上降低性能。

我应该考虑的一个好的解决方案是什么?以前有没有人遇到过类似的问题,你找到了什么解决方案?

有一件事是肯定的,没有时间,所以唯一有趣的部分是日期。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-11-05 22:40:02

使用natty.joestelmach.com

Natty是用Java编写的自然语言日期解析器。给定日期表达式,natty将应用标准语言识别和转换技术来生成相应日期的列表,其中包含可选的解析和语法信息。

代码语言:javascript
复制
import com.joestelmach.natty.*;

List<Date> dates =new Parser().parse("Start date 11/30/2013 , end date Friday, Sept. 7, 2013").get(0).getDates();
        System.out.println(dates.get(0));
        System.out.println(dates.get(1));

//output:
//Sat Nov 30 11:14:30 BDT 2013
//Sat Sep 07 11:14:30 BDT 2013
票数 22
EN

Stack Overflow用户

发布于 2015-11-05 23:06:24

你在找Named Entity Recognition。我会从Stanford NLP开始。7级模型包括日期,但在线demo struggles和错过了"13“。:(

上面提到的Natty给出了一个better answer

票数 3
EN

Stack Overflow用户

发布于 2015-11-05 22:49:00

如果它只有一个字符串,您可以使用前面提到的正则表达式。必须找到不同的日期格式表达式。以下是一些示例:Regular Expressions - dates

如果是文档或大文本,则需要一个解析器。您可以使用Lexical analysis方法。

根据项目的不同,使用一些答案中提到的外部库可能是一个好主意。有时这不是一种选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33547179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档