Как вы думаете, как работает функция быстрого добавления в Календаре Google?

Я думаю о проекте, который мог бы использовать функциональность, аналогичную тому, как «Быстрое добавление» обрабатывает синтаксический анализ естественного языка во что-то, что можно понять с некоторым уровнем семантики. Мне интересно лучше понять это, и мне интересно, что вы думаете о том, как это можно реализовать.


Если вы не знаете, что такое "Быстрое добавление", ознакомьтесь с база знаний Google об этом.


Обновление 04.06.10
Дополнительные исследования по теме "Синтаксический анализ естественного языка" (NLP) дают результаты, которые НАМНОГО шире, чем то, что, как мне кажется, реализовано в чем-то вроде "Быстрого добавления". Учитывая, что эта функция предполагает определенные типы ввода, а не настоящий текст в произвольной форме, я думаю, что это гораздо более узкая реализация НЛП. Если бы кто-нибудь мог предложить более узкую тему, которую я мог бы исследовать, а не всю широту НЛП, я был бы очень признателен.

Тем не менее, я нашел хорошую коллекцию ресурсов по НЛП включая этот замечательный часто задаваемые вопросы.


person mikegreenberg    schedule 02.06.2010    source источник
comment
Они просто написали умный синтаксический анализатор, похожий на datejs, но, очевидно, с большим количеством функций. С учетом сказанного .. спасибо, что поделились этим, это очень удобно.   -  person Matt    schedule 02.06.2010


Ответы (2)


Я бы начал с выбора стандартного способа представления всей интересующей меня информации: название события, время начала/окончания (и дата), список гостей, место. Например, я мог бы использовать такую ​​нотацию XML:

<event>
    <name>meet Sam</name>
    <starttime>16:30 07/06/2010</starttime>
    <endtime>17:30 07/06/2010</endtime>
</event>

Затем я стремился создать корпус дневниковых записей о датах, аннотированных их XML-формами. Как бы я собирал данные? Ну, если бы я был Google, у меня, наверное, было бы много способов. Поскольку я — это я, я бы, наверное, начал с того, что записал все способы, которыми я мог бы придумать, чтобы выразить подобные вещи, а затем аннотировал их вручную. Если бы я мог добавить к этому, просматривая электронную почту друзей и еще много чего, тем лучше.

Теперь у меня есть корпус, он может служить набором модульных тестов. Мне нужно закодировать синтаксический анализатор, чтобы соответствовать тестам. Парсер должен перевести строку на естественном языке в логическую форму моей аннотации. Во-первых, он должен разбить строку на составляющие ее слова. Это называется токенизацией, и для этого есть готовое программное обеспечение. (Например, см. NLTK.) Чтобы интерпретировать слова, я искал закономерности в данных: для например, текст, следующий за «в» или «в», должен быть помечен как местоположение; «за X минут» означает, что мне нужно добавить это количество минут к времени начала, чтобы получить время окончания. Статистические методы, вероятно, были бы здесь излишними — лучше всего создать серию закодированных вручную правил, которые выражают ваши собственные знания о том, как интерпретировать слова, фразы и конструкции в этой области.

person Tommy Herbert    schedule 07.06.2010
comment
NLTK — фантастический ресурс, и этот подход похож на мои собственные мысли! Знаете ли вы какие-либо наборы инструментов на основе PHP, которые вы могли бы порекомендовать. Я понимаю ограничения PHP в отношении скорости выполнения такой сложной операции, но заинтересован в использовании HipHop (Developers.facebook.com/blog/post/358) решить эту задачу. - person mikegreenberg; 09.06.2010
comment
Боюсь, я ничего не знаю. Следующая запись в блоге предполагает, что вам нужно либо свернуть свои собственные, либо прыгать через обручи, чтобы использовать NLTK из PHP. Хотя ему полтора года. akshatsinghal.com/content/natural-language-processing-php - person Tommy Herbert; 10.06.2010

Казалось бы, узкого подхода к этой проблеме действительно нет. Я хотел избежать использования всего НЛП, чтобы найти решение, но я не нашел никакой альтернативы. Я обновлю это, если позже найду действительно отличное решение.

person mikegreenberg    schedule 18.06.2010