Fw: разговоры

From: Тармо Пикаро ( tpikaro@turkuamk.fi ) Date: 1999-10-10 22:56

Я пересылаю одно интересное письмо с нового news-сервера. (194.87.75.146)
P.S. Есть идея слинкивать news сервер с данной конференцией, но
ничего не обещаю - пока ни времени,ни нужных мне знаний нету.

 --------------------------------------------------------
   Subject:      Разговоры...
   Date:         Wed, 6 Oct 1999 16:56:31 +0400
   From:         Daniil Smolyakov <Dan@jesby.tstu.ru
   >
   Newsgroups:   research.ai.consciousness
    Вот тут это... Учимся говорить... Вообще-то расчитывалось для RPG, но это
   смысла не меняет.
    *** File obraz.txt [begin] ***
    Начнем долгое (а может и не очень) повествование про образы. То, что
   написано ниже вобщем-то будет использовано в компьютерной RPG, но идею,
   я думаю можно применить и во многих других местах.
   Под словом "образ" я подразумеваю группу слов, которые обозначают
   по сути одно и тоже. Например, образ "перемещаться" содержит в себе
   "бежать", "идти", "ползти", "лететь". Когда я упомянул слово "лететь"
   сразу понятно, что этого для нормального разговора мало, поэтому введем
   некоторую иерархию образов, т.е. образ "перемещаться" влючает в себя
   образ "лететь" и образ "идти", а уже они включают в себя слова "идти
   быстро",
   "идти медленно" или "лететь быстро", "лететь медленно".
   Все это дело естесственно нужно как-то хранить, я пока надумал вот такую
   схему:
    +--------------------------------+
   N | Именительный: Арбуз            | Если слово существительное, то
   | Родительный:  Арбуз            | во всех падежах, если глагол, то
   | Дательный:    Арбузу           | во всех лицах, числах и родах.
   | Винительный:  Арбуз            | Ну и соответсвенно с местоимениями.
   | Творительный: Арбузом          |
   | Предложный:   Арбузе           |
   +--------------------------------|
   | Тип слова: глагол, местоимение,|
   | существительное и т.д.         |
   +--------------------------------|
   | Вежливость слова               | Нужно следить за речью...
   |--------------------------------|
   |+------------------------------+|
   || Количество образов к которым ||
   || относится слово              ||
   |+------------------------------+|
   |   +--------------------------+ |
   | N | Номер образа, к которому | |
   |   | относится слово          | |
   |   +--------------------------| |
   | N | И т.д.                   | |
   |   +--------------------------+ |
   +--------------------------------|
   |+------------------------------+|
   ||     Количество синонимов     ||
   |+------------------------------+|
   |   +--------------------------+ |
   | N |+------------------------+| |
   |   ||     Номер словаря      || |
   |   |+------------------------|| |
   |   ||Номер синонима в списке || |
   |   |+------------------------+| |
   |   +--------------------------| |
   | N | И т.д.                   | |
   |   +--------------------------+ |
   +--------------------------------|
   +--------------------------------|
   |+------------------------------+|
   ||     Количество антонимов     ||
   |+------------------------------+|
   |   +--------------------------+ |
   | N |+------------------------+| |
   |   ||     Номер словаря      || |
   |   |+------------------------|| |
   |   ||Номер антонима в списке || |
   |   |+------------------------|| |
   |   +--------------------------| |
   | N | И т.д.                   | |
   |   +--------------------------+ |
   +--------------------------------+
   +--------------------------------+
   N |         Описание слова         |
   +--------------------------------+
   И т.д.
    Так выглядет структура словаря. Добавление новых слов делать всегда в конец
   и ни в коем случае не сортировать, иначе нужно будет менять индексы у
   каждого слова и образа, что, помоему, несколько медленно. А для быстрого
   доступа к какому-то слову делаем так: заводим список, который выглядет
   примерно так:
    +------------------+-----------------------+
   | Порядковый номер | Номер слова в словаре |
   +------------------+-----------------------+
   | Порядковый номер | Номер слова в словаре |
   +------------------+-----------------------+
   | Порядковый номер | Номер слова в словаре |
   +------------------+-----------------------+
   и т.д.
    И далее будем сортировать только этот список. Ну и нужно, я думаю, хранить
   индексы начальных букв, т.е. номера первых в списке слов, начинающихся на
   какую-либо букву, например:
    1 Арбуз
   2 Арка
   3 Апельсин
   4 Баран
   5 Барабан
   6 Баня
   7 Бант
   8 Яблоня
   9 Яма
    Тут мы должны сделать таблицу типа:
    "A" : 1
   "Б" : 4
   "Я" : 8
    С этим вроде бы разобрались. Ан нет, не разобрались еще. Можно конечно все
   слова разбить на корни, слоги, приставки, суффиксы и окончания, а потом
   просто определять к какому типу слова этот корень относится и уже потом
   склонять, наклонять и разгибать... Незнаю, может потом я к этому и приду,
   но сейчас мне более удобной кажется идея с заранее указанными вариантами
   написания того или иного слова.
    Едем дальше...
   ... видим мост, на мосту ворона сохнет, мы ее за хвост и под мост - пусть
   она помокнет.
    Со словами разобрались, теперь об образах. Делаем снова список образов,
   который выглядет примерно так:
    +---------------------------------+
   N | Название образа                 |
   +---------------------------------+
   |+-------------------------------+|
   || Количество слов принадлежащих ||
   || этому образу                  ||
   |+-------------------------------||
   || Номер словаря, номер слова    ||
   |+-------------------------------||
   || Номер словаря, номер слова    ||
   |+-------------------------------||
   || И так далее                   ||
   |+-------------------------------+|
   +---------------------------------|
   | Номер образа, к которому отно-  |
   | сится данный образ. 0 - если    |
   | такового нет.                   |
   +---------------------------------|
   | Дальше можно указать список тех |
   | образов, для которых данный     |
   | является родителем, но примене- |
   | ния я этому пока не знаю.       |
   +---------------------------------+
    В итогде все образы опираются на те, которые "вшиты" непосредственно в саму
   программу. Но я делаю по другому: у меня остались те самые основные образы,
   но и они далеко не главные. Так как я использую это дело в RPG, то у меня в
   основном все разговоры связаны с каким-либо действием, типа: "Дай меч",
   "Иди за мной", "Подожди тут" и т.д. Естественно за исключением тех
   моментов,
   когда в разговоре говорящие получают просто дополнительную информацию, т.е.
   заносят что-то новенькое в свой блок памяти (но и это, в общем-то тоже
   действия). Вобщем я сделал так: каждый образ описывается командами и в
   итоге
   получается, что образы можно еще и дополнять. Команды примерно такого типа:
   идти куда-то, взять что-то, отдать что-то и т.д. Можно конечно еще сильнее
   упростить, но мне это не позволительно, так как описание образов будет,
   вобщем-то, доступно, нельзя допускать чтобы смухлевать можно было просто,
   по типу: образ "продать" (если это команды более низкого уровня) будет:
   "дать предмет, дать деньги, которые стоит это предмет", вместо: "дать
   предмет, взять (спросить) деньги". Всем изветсно, что любой обрабатывающей
   процедуре нужно передать какой-то параметр и получить у нее результат, в
   данном случае параметрами (и командами) будут: "объект" (тут может быть
   несколько объектов) - это то, с чем мы будем делать какие-либо действия;
   "действие" (или список действий) - и так понятно, что это. Во-о-от. Ниже
   рассмотрим примеры.
    Едем дальше, видим мост, под мостом ворона мокнет, мы ее за хвост и на
   мост - пусть она посохнет.
    Тут будет сплошное мое личное мнение, поэтому и отнестить к этому прошу
   соответственно, т.е. не ругать сразу, а указать на ошибки и прочее.
    Итак, когда мы разговариваем, для себя мы выделяем несколько целей, такие
   как объект разговора, например фраза "Где мой ключ?" указывает объект
   разговора "ключ" и его теперь можно не упоминать до тех пор, пока этот
   объект не заменят другим или просто слишком долго не будут упоминать.
   Продолжение примерно такое: "У Рамиреса." Тут мы уже не говорим
   "Ключ у Рамиреса." Тут видно, что "целью", а точнее, теперь уже
   "объектом" в основном являются существительные. Значит все существительные
   мы вносим в список объектов. Но чтобы избежать путаницы лучше срузу после
   объекта вставить еще и те действия, которые мы хотим с ним совершить.
   Как мы не старались, некотого перечисления нам все-равно не избежать, т.е.
   все-таки нужно описать для каждого действия шаблоны параметров. Например, в
   фразе "Где мой ключ?" стоит вопросительный знак, что означает желание
   получить ответ. Смотрим дальше, ЧТО мы хотим узнать? "Где" - образ
   "местоположение", "мой" - "принадлежность", "ключ" - объект. Следовательно
   нужно для каждого объекта хранить параметры "принадлежность",
   "местоположение". Так как этих параметров может быть великое множество, то
   используем динамические переменные, т.е. те переменные, которые могут быть,
   а могут и не быть. Например вместо того, чтобы хранить все данные о чем-то,
   мы задаем то, что по умолчанию, например "местоположение" будет равно
   "неизвестно", а "принадлежание" мы опишем так: [принадлежание=Владимир], а
   если нам нужно будет утановить местоположение, т.е. изменить значение по
   умолчанию на значение нужное нам, то просто добавляем еще и
   "местоположение",
   в итоге получается: [принадлежание=Владимир; местоположение=Рамирес]
   Это дело должно храниться в блоке данных самого предмета. Какже мы будем
   добывать результат? Примерно так: в конце стоит занак "?" (вопрос), значит,
   если у нас есть к этому предрасположение, хотим ли мы отвечать (но это
   только для игрушки), отвечаем: смотрим, а знаем ли мы вообще про какой-то
   ключ? Если знаем несколько ключей, то смотрим первый попавшийся (дальше по
   очереди). Если мы не знаем его принадлежность - можно спросить: он это или
   нет (опять таки зависит от доверчивости). Описание можно сделать по разным
   критериям, например по цвету, запаху, весу и т.д., естественно, все это
   должно быть в параметрах предмета.
    Вот вроде. По идее еще нужно описать другие варианты, но что-то голова
   припухла и сама ничего не вспоминает. Будет лучше если Вы напишете мне, а я
   отвечу на ваши вопросы. Так мне проще. Или ждите пока я дополню и
   подправлю,
   разобью на пункты этот самый текст. Думаю это тема будет интересна многим.
    *** File obraz.txt [end] ***