2012-12-29 14 views
11

Próbuję wymyślić coś podobnego do Kalendarza Google (lub nawet niektórych wiadomości w Gmailu), w którym tekst w formacie swobodnym zostanie przeanalizowany i skonwertowany do określonych dat/godzin.Jak mogę wyodrębnić datę i godzinę z tekstu swobodnego?

Niektóre przykłady (dla uproszczenia zakładamy, że w tej chwili jest 1 stycznia 2013 o 1 w nocy):

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

Przede wszystkim Poproszę to - czy są jakieś już istniejących bibliotek open source, które to (lub część tego). Jeśli nie, jakie podej cie nale y przyjąć?

myślę o kilku różnych możliwości:

  1. Wiele wyrażeń regularnych, jak wiele, jak można wymyślić dla każdego innego przypadku użycia
  2. Jakiś Bayesa Net, że patrzy na n- Gram i kategoryzuje je w różnych scenariuszach, takich jak "względna data", "względny dzień tygodnia", "konkretna data", "data i czas", a następnie uruchamia je za pomocą mechanizmu reguł (może więcej wyrażeń regularnych), aby ustalić rzeczywistą datę .
  3. wysłaniem go do wyszukiwarki Google i spróbuj wyciągnąć sensowne informacje z wyników wyszukiwania (ten prawdopodobnie nie jest realistyczny)

Odpowiedz

9

Możesz użyć tej biblioteki: 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]; }))); 
} 
​ 

wyjściowa:

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

Wow, to ma wszystko, co chciałem! Dzięki! – Paul

Powiązane problemy