Тема: чат боты?
Показать сообщение отдельно
Старый 05.04.2011, 19:23   #31
Местный
 
Аватар для Aries
 
Регистрация: 19.01.2011
Сообщений: 241
Сказал Спасибо: 7
Имеет 26 спасибок в 22 сообщенях
Aries пока неопределено
По умолчанию

Таааакс… Маленький фейл с моей стороны))))
Хотел все показать на конкретном программном примере, но понял, что даже для простейшего случае надо не так уж мало времени, как показалось….

В общем начну сначала (т.е. с лингвистики по сути), с кодом если повезет все же потом доделаю, но пока чисто покажу простейшее описание грамматики языка, построенное по принципу описания грамматики языка программирования… Кто занимался теорией компиляторов, думаю, и сам сможет разобраться как на основе этого описания строить анализаторы.

Для начала по теории… По сути грамматика состоит из 4 элементов:
- входной алфавит
- нетерминальные символы
- начальный символ (из нетерминальных)
- правила применения

Т.к. простейший, то словарный запас маленький, и описание языка тоже минимальное… Но дальнейшее усложнение – чисто дело техники, т.к. в плане понимания вопроса ничего не изменит уже.

Возьмем:
Входной алфавит: положить, взять, синий, желтый, стул, окно, в, на, под…
Нетерминальные символы – Фраза, Гл., Гр. Сущ., Сущ., Прил., Предл.
Начальный символ – Фраза.

Теперь правила:
Фраза – > Гл., Гр. Сущ.
Гр. Сущ. – > Прил., Сущ
Гр. Сущ. – > Гр. Сущ., Предл., Гр. Сущ.
Гл. – > положить/взять
Сущ. – > стул/стол
Предл. – > в/на/под
Прил. – > синий/желтый

На основе данной грамматики можно в принципе строить фразы любой сложности, т.к. есть рекурсия вида Гр. Сущ. – > Гр. Сущ., Предл., Гр. Сущ.
Про осмысленные фразы конечно пока не говорим, но с точки зрения грамматики фразы будут построены правильно
Например:
«Взять синий стол»
«Положить желтый стул под синий стол»

Конечно на моем примере много не построишь, надо куда больше правил (при этом если брать случай синтаксического анализатора, на правила применения накладываются дополнительные ограничения применения).
Дальше делается на основе конечных автоматов:
считывается строка по словам и на основе правил грамматики ее нужно свернуть к начальному символу. В случае если строка не свернулась, то с точки зрения грамматики строка заведомо неверная и разбор ее смысла уже не имеет значения.
А если свернулась, то надо переходить к синтаксическому анализу…

ЗЫ все это описываю в большей степени для supernewbie, чтобы не занимался всякой фигней и понял, что проще сделать конечный набор фраз))) Ну или хотя бы, чтобы попробовал понять, что без определения начальной грамматики языка все равно в итоге ничего хорошего не выйдет, если создавать бота хотя бы умеющего понимать не сложные, но уже более-менее естественные фразы.

ЗЫЫ если уж не понять настолько базовый момент, то про генерацию фраз я вообще молчу...
Aries вне форума   Ответить с цитированием