В рамках небольшого проекта, над которым я работаю, мне нужно иметь возможность анализировать строку в пользовательском объекте, который представляет действие, дату и несколько других свойств.Сложность в том, что входная строка может быть разных видов, и все они должны быть правильно проанализированы.
Входные строки могут иметь следующие форматы:
Перейти к работе завтра в 9 утра
- Мойте машину в понедельник, в 15:00.
- Позвоните врачу в следующий вторник в 10:00
- Разбуди меня каждый день в 7:00 * 10101
И выходной объект будет выглядеть примерно так:
{
"Action":"Wash my car",
"DateTime":"2011-12-26 3:00PM", // Format is irrelevant at this point
"Recurring":False,
"RecurranceType":""
}
Сначала я подумал о создании какой-тодерева для представления различных состояний (On, In, Every и т. д.) с различными результатами и другими состояниями (кандидат на конечный автомат, верно?).Тем не менее, чем больше я думал об этом, тем больше это становилось проблемой грамматического разбора.Из-за (ограниченного) количества способов формирования предложения, похоже, что должен быть реализован некоторый алгоритм синтаксического анализа грамматики.
Кроме того, я делаю это во внешнем интерфейсе, поэтомуJavaScript является языком выбора здесь.Серверная часть будет написана на Python и может быть использована при вызове методов AJAX, если это необходимо, но я бы предпочел оставить все это в JavaScript.(Честно говоря, я не думаю, что язык здесь является большой проблемой).
Итак, я в пути над головой?У меня сильный опыт работы с JavaScript, но нет ничего, кроме школьных курсов, когда дело касается языкового дизайна, анализа и т. Д. Есть ли лучший способ решить эту проблему?Любые предложения приветствуются.