从各种格式的字符串中提取日期

时间:2012-08-05 02:54:20

标签: sql nlp postgresql-9.1

我试图从SQL数据库中的一个非常大的文本样本中提取尽可能多的日期(YMD,YM,甚至只是Y)。数据库中的所有文本都是简单的英文,并包含大量数字。我想要做的是尽可能多地找到这些日期,将它们识别为日期,并提取它们代表的日期以及找到的字符串。有没有办法解决这个问题,除了思考每一个可能的正则表达式,我可以涵盖像1985年1月23日这样的案件,同时也涵盖像“1980年代”和“1962年标志着开始”这样的案例。是否有一个项目的例子已经采取了这个?谢谢!

2 个答案:

答案 0 :(得分:1)

您似乎需要混合使用:

1)从具有substring postgresql函数的正则表达式的日期中获取子串:

substring(string from pattern)
substring('foobar' from '%#"o_b#"%' for '#')   oob

2)处理所有可能的日期格式。 Regular Expression to match valid dates可以作为一个起点。

也许您可以编写自己的user defined function来进行此翻译。不要忘记与我们分享;)

*已编辑*

如果这是一次性工作。您可以导出日期并使用python parsedatetime library来解析日期,然后返回数据库。

parsedatetime is able to parse, for example, the following:

August 25th, 2008
25 Aug 2008
Aug 25 5pm
5pm August 25
next saturday
tomorrow
next thursday at 4pm
at 4pm
eod
tomorrow eod
eod tuesday
eoy
eom
in 5 minutes
5 minutes from now
5 hours before now
2 hours before noon
2 days from tomorrow

答案 1 :(得分:0)

这取决于您问题的未来复杂性(例如,更多格式和其他可能性),但我认为您可以检查一些时间标记,这些标记通常应该处理您认为的大多数情况。您可以从实际使用规则的Stanford SUTime开始。