0

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

4

2 回答 2

1

看来你需要混合:

1) 使用带有子字符串 postgresql函数的正则表达式从日期中获取子字符串:

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

2) 处理所有可能的日期格式。匹配有效日期的正则表达式可以作为起点。

也许您可以编写自己的用户定义函数来进行这种翻译。不要忘记与我们分享;)

*已编辑*

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

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
于 2012-08-05T14:37:44.873 回答
0

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

于 2012-08-06T12:17:55.817 回答