2012-12-29 61 views
11

我試圖想出一些沿着Google日曆(甚至是一些Gmail郵件)的東西,其中自由格式的文本將被解析並轉換爲特定的日期/時間。如何從自由格式文本中提取日期時間?

一些例子(假設爲簡單起見,自己目前是2013年1月01日凌晨1點):

"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" 

首先我會問這個 - 是否有任何現有的開源庫,這個(或這部分)。如果不是,你認爲我應該採取什麼樣的方法?

我想到了幾個不同的可能性:

  1. 大量的正則表達式,多達我可以拿出爲每個不同的使用情況
  2. 某種貝葉斯網,着眼於N-克和分類成不同的情況下,如「相對日期」,「相對星期幾」,「特定日期」,「日期和時間」,然後通過規則引擎運行它(也許更正則表達式)來計算出實際日期。
  3. 其發送到谷歌搜索,並嘗試從搜索結果中提取有意義的信息(這一項可能是不現實的)

回答

9

你可以使用這個庫:https://github.com/wanasit/chrono

演示:

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"]] 

http://jsfiddle.net/TXX3Z/

+2

哇,這有我想要的一切!謝謝! – Paul

相關問題