我遇到了尝试识别段落中是否包含日期信息的问题。以下是问题:
我们不知道日期字符串可能出现在哪里。一个段落就像是“我们想在11月15日设置约会。然后我们会......”。所以我们不能直接使用DateTime.parse()
日期的格式是任意的,可以是更正式的形式,如“11月15日”或“08/21/1988”或“本月5日”。
考虑到日期信息可能有多种形式,我不太可能涵盖所有情况,我只想尽可能多地涵盖案例。我能想出的轻量级解决方案是我猜的正则表达式......再次说明这将是一个巨大的表达。有没有人知道是否有更好的解决方案或可用的正则表达式?
(P.S。我更喜欢更轻量级的方法,机器学习等方法可能更通用但不适用于我的任务)
答案 0 :(得分:2)
我也可以使用正则表达式(或多个)来处理它。
我通过匹配“th”,“nd”“st”,月/日名称和缩写,点/线/斜杠/冒号分隔数字等周围的所有内容,使正则表达式匹配区域看起来像日期一样的东西。试验一下,看看有多少测试用例找到日期有多好。
解析可能的日期是另一回事。我想你需要像PHP的strtotime一样强大的功能。
另一种方法是明确定义大量可能的格式。然后,当检测到一个时,您可以轻松解析它。对我来说感觉太暴力了
答案 1 :(得分:1)
作为一个起点,http://regexlib.com处有七页日期正则表达式。如果你不知道你正在寻找哪一个,我会创建一个数组并一次应用一个。你还会遇到像2015年12月11日对2015年12月12日这样的日期的问题,所以仍然需要某种澄清程序(例如,自动回邮并询问"你的意思是12月11月或11月12日?")。