Как работает функция сравнения строк "Помни молока"? - PullRequest
2 голосов
/ 22 сентября 2011

Я заинтересован в разработке решения, аналогичного 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:)

1 Ответ

2 голосов
/ 22 сентября 2011

Я предполагаю, что у них есть несколько грамматик для разбора входного предложения.Эти грамматики могут выражать различные структуры НЛП, такие как извлечение сущностей.Для этой грамматики можно использовать GATE JAPE (http://gate.ac.uk/sale/tao/splitch8.html#chap:jape) или Gexp (http://code.google.com/p/graph-expression/)

).
...