Мне нужно найти даты в строке и их позиции. Рассмотрим пример строки
"Интересная дата - 4 дня от сегодняшнего дня, 20 июля этого года, другая дата - 18 февраля 1997 года"
Мне нужны выходные данные (если сегодня 14 июля 2013 г.)
17 июля 2013 г., позиция 25
20 июля 2013 г., позиция 56
18 февраля 1997 г., позиция 93
Мне удалось написать код для получения различных частей строки, которая распознается как дата. Необходимо улучшить/изменить это, чтобы добиться вышеуказанного результата. Любые подсказки или помощь приветствуются:
Properties props = new Properties();
AnnotationPipeline pipeline = new AnnotationPipeline();
pipeline.addAnnotator(new PTBTokenizerAnnotator(false));
pipeline.addAnnotator(new WordsToSentencesAnnotator(false));
pipeline.addAnnotator(new POSTaggerAnnotator(false));
pipeline.addAnnotator(new TimeAnnotator("sutime", props));
Annotation annotation = new Annotation("The interesting date is 4 days from today and it is 20th july of this year, another date is 18th Feb 1997");
annotation.set(CoreAnnotations.DocDateAnnotation.class, "2013-07-14");
pipeline.annotate(annotation);
List<CoreMap> timexAnnsAll = annotation.get(TimeAnnotations.TimexAnnotations.class);
timexAnnsAll.each(){
println it
}
С приведенным выше кодом я получаю вывод:
4 дня с сегодняшнего дня
20 июля этого года
18 февраля 1997 г.
РЕДАКТИРОВАТЬ::
Удалось получить часть даты со следующим изменением
timexAnnsAll.each(){it ->
Timex timex = it.get(TimeAnnotations.TimexAnnotation.class);
println timex.val + " from : $it"
}
Теперь вывод:
2013-07-18 от : 4 дня с сегодняшнего дня
2013-07-20 от : 20 июля этого года
1997-02-18 от : 18 февраля 1997
Все, что мне нужно решить сейчас, это найти положение даты в исходной строке.
println "pos:${it.beginPosition()} $it"
работает? - person tim_yates   schedule 14.07.2013