Извлечь распознанную строку даты, переданную методу разбора в Chronic
Я хотел бы подражать функциональности быстрого события календаря Mac или быстрого входа Fantastical. Используя камень Chronic, я могу передать строку вроде:
"Today at 3pm"
=> 2014-01-24 15:00:00 -0600
Хронический анализ не работает, если вы передаете что-то вроде:
"Eat at Joes Today at 3pm"
=> nil
До сих пор я использовал простое регулярное выражение для разбиения строки на слово, обычно используемое для возврата даты в Chronic. Начальное регулярное выражение простое:
scan(/(.+)(tomorrow{1}.+|in\s.+|next\s.+|today\s.+)/)
Это возвращает массив с заголовком, если хотите, и строкой, которую я хочу отправить в Chronic для анализа.
Два вопроса:
- Это действительно лучший способ сделать это? Я должен был бы предоставить какое-нибудь мега-регулярное выражение для разбиения любой строки, которую, я думаю, мои пользователи отправят сюда
- Будет ли лучше взломать Chronic? Это уже разбирает даты для меня, но моя первоначальная мысль - нет, потому что если вы сдадите
Eat at Joes Today at 3pm
к Chronic.parse, он вернет ноль. Кажется, он не распознает часть строки для форматирования даты в ее нынешнем виде.
1 ответ
Я бы не стал редактировать Chronic. Единственная функция Chronic - это анализ даты и времени на естественном языке, а не другой ввод. Вы можете быть заинтересованы в Nickel
жемчужина здесь:
https://github.com/iainbeeston/nickel
Это отделяет время от другого языка.
n = Nickel.parse("use the force on july 1st at 9am", Time.now)
n.message #=> "use the force"
n.occurrences.first.start_date #=> "20110701"