Я бы начал с выбора стандартного способа представления всей информации, которая меня интересует: имя события, время начала / окончания (и дата), список гостей, местоположение. Например, я мог бы использовать нотацию XML как это:
<event>
<name>meet Sam</name>
<starttime>16:30 07/06/2010</starttime>
<endtime>17:30 07/06/2010</endtime>
</event>
Тогда я бы хотел создать свод дневниковых записей о датах, помеченных их XML-формами. Как я собираю данные? Ну, если бы я был Google, у меня, вероятно, были бы самые разные способы. Поскольку я - это я, я бы, вероятно, начал с того, что записывал все возможные способы выражения такого рода вещей, а затем комментировал их вручную. Если бы я мог добавить к этому, просматривая электронные письма друзей и еще много чего, тем лучше.
Теперь у меня есть корпус, он может служить набором юнит-тестов. Мне нужно кодировать парсер, чтобы соответствовать тестам. Парсер должен перевести строку естественного языка в логическую форму моей аннотации. Во-первых, он должен разбить строку на составляющие слова. Это называется токенизацией, и для этого есть готовое программное обеспечение. (Например, см. NLTK .) Чтобы интерпретировать слова, я бы искал закономерности в данных: например, текст после 'at' или 'in' должен быть помечен как местоположение; «за X минут» означает, что мне нужно добавить это количество минут к времени начала, чтобы получить время окончания. Статистические методы, вероятно, были бы здесь излишними - лучше всего создать серию правил, закодированных вручную, которые выражают ваши собственные знания о том, как интерпретировать слова, фразы и конструкции в этой области.