Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

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

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

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

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

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

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

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

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

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

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

ЗЫЫ если уж не понять настолько базовый момент, то про генерацию фраз я вообще молчу...
Aries вне форума   Ответить с цитированием
Старый 05.04.2011, 20:13   #32
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию

буду заниматся всякой фигней, набор фраз - полный отстой
__________________
Начало.
supernewbie вне форума   Ответить с цитированием
Старый 05.04.2011, 20:18   #33
Рыцарь
 
Аватар для destructor
 
Регистрация: 26.06.2009
Сообщений: 2,433
Сказал Спасибо: 154
Имеет 692 спасибок в 426 сообщенях
destructor на пути к лучшему
По умолчанию

приходит тебе в чат:
>>Положить желтый стул под синий стол

бот разбирает предложение и строит(согласно правилам) дерево:
Код:
Фраза = 
   Гл.[Положить]
   + 
   Гр. Сущ[желтый стул под синий стол]
       (
           Гр. Сущ.[желтый стул]
                 (
                      Прил.[желтый]
                      +
                      Сущ [стул]
                 )
           +
           Предл.[под]
           +
           Гр. Сущ.[синий стол]
                 (
                       Прил.[синий]
                       +
                       Сущ.[стол]
                 )
       )
дальше что?
__________________
Шожиделать.. ботить хочется..
destructor вне форума   Ответить с цитированием
Старый 05.04.2011, 20:19   #34
Местный
 
Аватар для Aries
 
Регистрация: 19.01.2011
Сообщений: 241
Сказал Спасибо: 7
Имеет 26 спасибок в 22 сообщенях
Aries пока неопределено
По умолчанию

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

ЗЫ Если все таки согласишься с данным методом, то мб и помогу в чем-то (хотя пока времени свободного практически нет)
Aries вне форума   Ответить с цитированием
Старый 05.04.2011, 20:23   #35
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию

думаю сейчас вся моя работа будет заключатся в наступаниях на грабли
__________________
Начало.
supernewbie вне форума   Ответить с цитированием
Старый 05.04.2011, 20:47   #36
Местный
 
Аватар для Aries
 
Регистрация: 19.01.2011
Сообщений: 241
Сказал Спасибо: 7
Имеет 26 спасибок в 22 сообщенях
Aries пока неопределено
По умолчанию

Цитата:
Сообщение от destructor Посмотреть сообщение
приходит тебе в чат:
>>Положить желтый стул под синий стол

бот разбирает предложение и строит(согласно правилам) дерево:

дальше что?
Принцип работы немного не такой
1.Фраза – > Гл., Гр. Сущ.
2.Гр. Сущ. – > Прил., Сущ
3.Гр. Сущ. – > Гр. Сущ., Предл., Гр. Сущ.
4.Гл. – > положить/взять
5.Сущ. – > стул/стол
6.Предл. – > в/на/под
7.Прил. – > синий/желтый

Допустим есть стек, куда кладутся лексемы
Считываем по словам, при этом анализируя содержимое стека:
Положить - Гл. (по правилу 4)
стек пустой, больше правила не применимы, значит
push (Гл.)
желтый - Прил. (7)
В стеке Гл., правил вида Гл., Прил. не существует, значит
push (Прил.)
стул - Сущ. (5)
На вершине стека Прил. -> применимо правило 2, значит
pop(),
Прил., Сущ. - Гр. Сущ.

смотрим стек, видим что можно применить правило 1, но на данном примере видим, что будет ошибка, соответственно не учли при построении грамматики у нас должно было быть дополнительное ограничение о применимости правила 1 (например, если след слово - не предлог)
с учетом этого условия, больше правила не применимы, значит
push (Гр. Сущ.)
и т.д.
в итоге стек: Гл. Гр. Сущ. Предл.
текущая лексема - Гр. Сущ.
Извлекаем из стека, получается Гр. Сущ. Предл. Гр. Сущ. - Гр. Сущ.
Затем Гл. Гр. Сущ. - Фраза
Т.е. предложение свернулось и значит фраза построена верно...
Значит можно включать мозги по распознанию смысла (т.е. синтаксический анализатор)... С этим вопросом я конечно уже не продумывал все как следует. Там по подобному принципу разбирается фраза, но при разбитии на лексемы уже делаются дополнительные действия, которые будут связаны с конкретными значениями слов, формирование внутренних таблиц и скорее всего формирование внутреннего представления значения данной фразы... Т.е. формирование однозначно определенной последовательности действий. Пример из теории компиляторов, это на уровне синтаксического анализа часто идет построение Польской Формы записи, которая как раз однозначно определяет всю дальнейшую последовательность действий.
Aries вне форума   Ответить с цитированием
Старый 05.04.2011, 21:42   #37
Рыцарь
 
Аватар для destructor
 
Регистрация: 26.06.2009
Сообщений: 2,433
Сказал Спасибо: 154
Имеет 692 спасибок в 426 сообщенях
destructor на пути к лучшему
По умолчанию

Цитата:
Сообщение от Aries Посмотреть сообщение
Принцип работы немного не такой
какая нафик разница как это происходит.

Цитата:
Сообщение от Aries Посмотреть сообщение
Т.е. формирование однозначно определенной последовательности действий.
опять ты про компиляторы
эта последовательность действий разбирается и выполняется без проблем.
тут не нужно ничего похожего на мозги.
__________________
Шожиделать.. ботить хочется..
destructor вне форума   Ответить с цитированием
Старый 05.04.2011, 22:43   #38
Местный
 
Аватар для Aries
 
Регистрация: 19.01.2011
Сообщений: 241
Сказал Спасибо: 7
Имеет 26 спасибок в 22 сообщенях
Aries пока неопределено
По умолчанию

Цитата:
Сообщение от destructor Посмотреть сообщение
какая нафик разница как это происходит.

опять ты про компиляторы
эта последовательность действий разбирается и выполняется без проблем.
тут не нужно ничего похожего на мозги.
видимо кто-то кого-то не понял))))
а я говорил про мозги?
Я говорил, что прежде чем писать мозги, нужно построить грамматику языка и разобраться с этим, а не начинать сразу с "восприятия мира"

А общий принцип создания в любом случае 1 в 1 с компилятором... Разница будет заключаться в том что при разборе текста на этапе синтаксического анализа в случае компилятора мы сразу формируем форму которая грубо говоря будет потом исполняться, а вот при разборе естественного языка тут уже нужен более сложный анализ (и только начиная с этого момента нужно задумываться о смысловой его составляющей). Хотя в любом случае надо строить какую-то внутреннюю форму представления фразы с жесткими правилами (так что и тут отличия от компилятора заключаются только в наличии большего количества правил и ограничений).

ЗЫ а ты надеялся, что я тебе раскрою секреты построения искусственного интеллекта? xD
Aries вне форума   Ответить с цитированием
Старый 05.04.2011, 22:58   #39
Местный
 
Регистрация: 10.08.2010
Сообщений: 634
Сказал Спасибо: 22
Имеет 95 спасибок в 70 сообщенях
mira пока неопределено
По умолчанию

в любом случае фразу нада сначало привести в программно-понятный вид, так сказать структуру. потом уже обработать и дать ответ. в идеале переварив его еще и мозгами (это уже последнее что стоит делать)
__________________
читернуть бы ништяг
mira вне форума   Ответить с цитированием
Старый 05.04.2011, 23:04   #40
Местный
 
Аватар для Aries
 
Регистрация: 19.01.2011
Сообщений: 241
Сказал Спасибо: 7
Имеет 26 спасибок в 22 сообщенях
Aries пока неопределено
По умолчанию

Цитата:
Сообщение от mira Посмотреть сообщение
в любом случае фразу нада сначало привести в программно-понятный вид, так сказать структуру. потом уже обработать и дать ответ. в идеале переварив его еще и мозгами (это уже последнее что стоит делать)
по-моему единственный человек, который сейчас понял меня, да?)))))
Aries вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 03:27.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!