最近,我遇到了一个相当“简单”的问题。假设有句子(保存在字符串中),我需要找出这个字符串中是否有日期。挑战在于日期可以有很多不同的格式。列表中显示了一些示例:
伦敦
值得一提的是,这些都包含在一个字符串中。作为一个例子,它可以是这样的:
String s = "This event took place on 13 October 1999.";
在这种情况下,我的问题是如何检测这个字符串中是否有日期。我的第一种方法是搜索单词"event",然后尝试本地化日期。但是,随着日期的可能格式越来越多,这种解决方案并不是很美观。我尝试的第二个解决方案是创建一个几个月的列表并进行搜索。这有很好的结果,但仍然遗漏了日期都以数字表示的情况。
到目前为止,我还没有尝试过的一种解决方案是设计正则表达式,并尝试在字符串中找到匹配项。不确定此解决方案可能会在多大程度上降低性能。
我应该考虑的一个好的解决方案是什么?以前有没有人遇到过类似的问题,你找到了什么解决方案?
有一件事是肯定的,没有时间,所以唯一有趣的部分是日期。
发布于 2015-11-05 22:40:02
Natty是用Java编写的自然语言日期解析器。给定日期表达式,natty将应用标准语言识别和转换技术来生成相应日期的列表,其中包含可选的解析和语法信息。
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
发布于 2015-11-05 23:06:24
你在找Named Entity Recognition。我会从Stanford NLP开始。7级模型包括日期,但在线demo struggles和错过了"13“。:(
上面提到的Natty给出了一个better answer。
发布于 2015-11-05 22:49:00
如果它只有一个字符串,您可以使用前面提到的正则表达式。必须找到不同的日期格式表达式。以下是一些示例:Regular Expressions - dates
如果是文档或大文本,则需要一个解析器。您可以使用Lexical analysis方法。
根据项目的不同,使用一些答案中提到的外部库可能是一个好主意。有时这不是一种选择。
https://stackoverflow.com/questions/33547179
复制相似问题