2012-12-29 30 views
11

Tôi đang cố gắng tìm ra thứ gì đó dọc theo dòng Lịch Google (hoặc thậm chí một số thư gmail), nơi văn bản dạng tự do sẽ được phân tích cú pháp và chuyển đổi thành ngày/giờ cụ thể.Làm cách nào để trích xuất datetime từ văn bản dạng tự do?

Một số ví dụ (giả vì đơn giản rằng ngay bây giờ là 01 tháng một năm 2013 tại 01:00):

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

Trước hết tôi sẽ hỏi này - được có bất kỳ thư viện mã nguồn mở đã tồn tại rằng đây (hoặc một phần của điều này). Nếu không, bạn nghĩ tôi nên dùng loại phương pháp nào?

Tôi đang nghĩ đến một vài khả năng khác nhau:

  1. Rất nhiều biểu thức thông thường, như nhiều như tôi có thể đưa ra cho từng trường hợp sử dụng khác nhau
  2. Một số loại Net Bayesian kì ai nhìn vào n gram và phân loại chúng thành các kịch bản khác nhau như "ngày tương đối", "ngày tương đối trong tuần", "ngày cụ thể", "ngày và giờ", và sau đó chạy nó thông qua một công cụ quy tắc (có thể nhiều hơn regex) để tìm ra ngày thực tế .
  3. gửi nó vào một tìm kiếm Google và cố gắng trích xuất thông tin có ý nghĩa từ các kết quả tìm kiếm (cái này có lẽ là không thực tế)

Trả lời

9

Bạn có thể sử dụng thư viện này: https://github.com/wanasit/chrono

Demo:

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]; }))); 
} 
​ 

Output:

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

Ồ, điều này có mọi thứ tôi muốn! Cảm ơn! – Paul

Các vấn đề liên quan