2015-10-30 2 views
0

Я использую библиотеки времени Stanford NLPCore SU построить временной анализатор. У меня возникают проблемы с установкой контрольного времени. Вот мой код:Как установить начало отсчета времени в Стэнфордском SUTime

public static String dateFormatString = "yyyy-MM-dd HH:mm"; 
private static void setup() { 
    try { 
     String defs_sutime = rulesFiles + "/defs.sutime.txt"; 
     String holiday_sutime = rulesFiles + "/english.holidays.sutime.txt"; 
     String _sutime = rulesFiles + "/english.sutime.txt"; 
     pipeline = new AnnotationPipeline(); 
     Properties props = new Properties(); 
     String sutimeRules = defs_sutime + "," + holiday_sutime 
       + "," + _sutime; 
     props.setProperty("sutime.rules", sutimeRules); 
     props.setProperty("sutime.binders", "0"); 
     props.setProperty("sutime.markTimeRanges", "true"); 
     props.setProperty("sutime.includeRange", "true"); 
     pipeline.addAnnotator(new TokenizerAnnotator(false)); 
     pipeline.addAnnotator(new TimeAnnotator("sutime", props)); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
public void annotateText(String text, String referenceDate) { 
    try { 
     if (pipeline != null) { 
      Annotation annotation = new Annotation(text); 
      annotation.set(CoreAnnotations.DocDateAnnotation.class, referenceDate); 
      pipeline.annotate(annotation); 
      List<CoreMap> timexAnnsAll = annotation.get(TimeAnnotations.TimexAnnotations.class); 
      for (CoreMap cm : timexAnnsAll) { 
       try { 
        Temporal temporal = cm.get(TimeExpression.Annotation.class).getTemporal(); 

        System.out.println("Token text : " + cm.toString()); 
        System.out.println("Temporal Value : " + temporal.toString()); 
        System.out.println("Timex : " + temporal.getTimexValue()); 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     } else { 
      System.out.println("Annotation Pipeline object is NULL"); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public static void main (String [] args) { 
    UnderstandTime time = new UnderstandTime(); 
    setup(); 
    time.annotateText("20 minutes from now", "2015-07-20 10:00"); 
} 

Выходные данные показывают:

Токен текст: 20 минут спустя

Temporal Значение: 2015-07-20T00: 20

Timex: 2015-07 -20T00: 20

Референтное время, которое он выбирает, составляет 00:00. Тот же выход, когда я ввожу «20 минут спустя»

ответ

0

Строка datetime, которую вы предоставляете, должна быть в формате ISO, принятом в date parser code. Попробуйте разделяющую дату и время с T, а не пространством (не тестировались):

time.annotateText("20 minutes from now", "2015-07-20T10:00"); 
+0

Я побежал этот пример сам с предложением Джона и получил желаемый результат: Токен текста: 20 минут от теперь височного Значения: 2015 -07-20T10: 20 Timex: 2015-07-20T10: 20 – StanfordNLPHelp

 Смежные вопросы

  • Нет связанных вопросов^_^