Javascript 如何从自由格式文本中提取日期时间?

Javascript 如何从自由格式文本中提取日期时间?,javascript,datetime,nlp,Javascript,Datetime,Nlp,我正试图想出一些类似谷歌日历(甚至是一些gmail邮件)的东西,在那里,自由格式的文本将被解析并转换为特定的日期/时间 一些示例(为简单起见,假设现在是2013年1月1日凌晨1点): 首先,我要问一个问题——是否有任何已经存在的开源库(或其中的一部分)支持这一点。如果没有,你认为我应该采取什么样的方法 我正在考虑几种不同的可能性: 很多正则表达式,我可以为每个不同的用例提供尽可能多的正则表达式 某种贝叶斯网络,它查看n-gram并将它们分类为不同的场景,如“相对日期”、“相对星期日”、“特定日期

我正试图想出一些类似谷歌日历(甚至是一些gmail邮件)的东西,在那里,自由格式的文本将被解析并转换为特定的日期/时间

一些示例(为简单起见,假设现在是2013年1月1日凌晨1点):

首先,我要问一个问题——是否有任何已经存在的开源库(或其中的一部分)支持这一点。如果没有,你认为我应该采取什么样的方法

我正在考虑几种不同的可能性:

  • 很多正则表达式,我可以为每个不同的用例提供尽可能多的正则表达式
  • 某种贝叶斯网络,它查看n-gram并将它们分类为不同的场景,如“相对日期”、“相对星期日”、“特定日期”、“日期和时间”,然后通过规则引擎(可能更正则表达式)运行它以计算出实际日期
  • 将其发送到谷歌搜索,并尝试从搜索结果中提取有意义的信息(这可能不现实)

  • 您可以使用此库:

    演示:


    哇,这是我想要的一切!谢谢
    "I should call Mom tomorrow to wish her a happy birthday" -> "tomorrow" = "2013-01-02"
    "The super bowl is on Feb 3rd at 6:30pm" -> "Feb 3rd at 6:30" => "2013-02-03T06:30:00Z"
    "Remind me to take out the trash on Friday" => "Friday" => "2013-01-04"
    
    inputs = ["I should call Mom tomorrow to with her a happy birthday",
    "The super bowl is on Feb 3rd at 6:30pm", "Remind me to take out the trash on Friday"];
    
    for(var i = 0; i < inputs.length; i++) {
        var input = inputs[i];
        var parsed = chrono.parse(input);
        console.log(input + " parsed as: " + JSON.stringify(parsed.map(function(p) { return [p.text, p.startDate]; })));
    }
    ​
    
    I should call Mom tomorrow to with her a happy birthday parsed as: [["tomorrow","2012-12-31T06:30:00.000Z"]]
    The super bowl is on Feb 3rd at 6:30pm parsed as: [["Feb 3rd at 6:30pm","2013-02-03T13:00:00.000Z"]]
    Remind me to take out the trash on Friday parsed as: [["Friday","2013-01-04T06:30:00.000Z"]]