2012-12-29 3 views
11

저는 자유형 텍스트가 구문 분석되어 특정 날짜/시간으로 변환되는 Google 캘린더 (또는 일부 Gmail 메일)의 행을 따라 무엇인가를 제시하려고합니다.자유형 텍스트에서 datetime을 어떻게 추출 할 수 있습니까?

몇 가지 예는 (지금 오전 1시 년 1 월 01 2013 년 것을 단순화를 위해 가정) : 모든

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

우선이 요청할 것 - 모든 기존 오픈 소스 라이브러리가 그이 (또는 이 부분). 그렇지 않다면 어떤 접근 방식을 취해야한다고 생각합니까?

내가 몇 가지 다른 가능성을 생각하고있다 : 나는 각기 다른 사용 사례

  • N-에 보이는 베이지안 네트의 일종을 위해 가지고 올 수있는 정규 표현식의

    1. 많은, 많은 그램을 "상대 날짜", "상대 요일", "특정 날짜", "날짜 및 시간"과 같은 다른 시나리오로 분류 한 다음 규칙 엔진 (어쩌면 더 정규식)을 통해 실행하여 실제 날짜를 파악합니다 .
    2. Google 검색에 전송하고
  • 답변

    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

    관련 문제