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