Я заинтересован в разработке решения, аналогичного Smart Add Feature RTM.
Для тех, кто не знает «Помни о молоке», вот как это работает: добавление задач выполняется с помощью поля ввода, которое принимает строки и анализирует различные параметры, такие как имя задачи, срок выполнения, приоритет, теги и т. Д. параметрам обычно предшествуют специальные символы (^, #, & и т. д.). RTM также принимает варианты, такие как «Теннис в среду».
Мой основной вопрос к вам: как бы вы спроектировали систему, способную интеллектуально различать различные части строки? Придется ли мне изучать обработку естественного языка?
Пока что я использую простое выражение регулярного выражения, которое ищет специальные предшествующие символы (^, #, & и т. Д.), А затем анализирует различные части строки. Это становится все труднее с большим количеством неупорядоченных параметров. возможно, это связано с моим отсутствием опыта в области регулярных выражений.
Подобная проблема возникает при попытке конвертировать различные форматы сроков исполнения («27 мая 2008 г. 16:00», «27 мая 2008 г.», «16 июня 16:00», «16 июня 12:00», «сегодня» 12:00 и т. Д.) В объекты datetime. В настоящее время я использую Python и регулярные выражения. Мой метод состоит в том, чтобы в основном пройти через длинный список возможных комбинаций даты и времени и преобразовать соответствующее выражение в date.strptime. Я обнаружил, что этот подход трудно поддерживать; много ложных срабатываний, остатки строк и т. д. Вы можете посмотреть мой код здесь: https://gist.github.com/1233786 Это не красиво, вы были предупреждены.
Буду признателен за любой намек в правильном направлении, чтобы подойти к этой теме. Кодирование dateparser было действительно забавным, но прежде чем выискивать все ошибки в сотнях различных вариантов использования, я подумал, что проверю, есть ли более элегантный шаблон дизайна.
P.S .: Я хотел бы, чтобы некоторые примеры кода впитались. Желательно, Python:)