Бьюсь тут над анализатором вводимых игроком команд. Поскольку я не гений, то приходится делать некоторые ограничения игрокам при составлении предложений, а именно следующие:
1. Глагол должен всегда идти первым:
"возьми яблоко", а не "яблоко возьми"
2. Характеристики действия и объектов должны идти перед объектами:
"возьми красное яблоко", а не "возьми яблоко красное"
"осторожно положи камень на тумбу", а не "положи осторожно камень на тумбу"
По-моему, это не критично и, в принципе, естественно. Какие будут замечания или дополнения?
Неактивен
Совершенно согласен.
Боюсь в моей Hydra анализатор вообще ужасный. Надеюсь, у тебя лучше получится.
Неактивен
А в чем у тебя проблемы с анализатором? Какие трудности?
Неактивен
2Olegus: замечание у меня одно тут - упомянутые тобой "ограничения" присутствуют практически во всех адвентюрах которые я видел. Так что это скорее правила такие, а не ограничения.
Неактивен
1.Ставить глагол вначале вроде бы совершенно необязательно, т.к. его можно вытянуть из предложения в любом месте.
2.Характеристику действия тоже.
3.Прилагательное ставить перед существительным вроде тоже не обязательно, по крайней мере мне не приходит в голову никакого примера, где бы было неясно к какому существительному относится прилагательное.
Олегус, ты на каком языке пишешь программу? Я, в принципе, могу помочь и написать подпрограмму, которая бы вычленяла из предложения разные части речи.
Неактивен
Пишу-то я на Паскале.
Что касается расположения глаголов и пр., а если в предложении два действия: "возьми камень и кинь его в гоблина"? Хотя все это решаемо.
Что касается помощи, то пока справляюсь. Хотя характеристики еще не реализованы. Структура команды по Olegus'у такова:
глагол + осн.объект + всп.объект + доп.объект
"привяжи лошадь к забору веревкой"
Порядок следования объектов и предлоги роли не играют, то есть тем же самым для компьютера будет: "привяжи с помощью веревки лошадь к забору". Хотя все это требует нехилой словарной базы. К тому же возможно использования нескольких команд (см. пример выше про бедного гоблина), а также нескольких объектов: "возьми камень, пилу, топор и пожрать".
В любом случае, работа идет и, хвала небесам!, останавливаться не собирается! ;D
Неактивен
А если я скажу:
Привяжи к забору верёвкой лошадь или
Привяжи верёвкой к забору лошадь или
Лошадь привяжи верёвкой к забору...
Ведь понимать не будет, а это плохо:(
Неактивен
Из перечисленных выше примеров мой анализатор не поймет только "Лошадь привяжи верёвкой к забору". Все остальные - на ура... Я же говорю - любой грамотно составленный порядок объектов (то есть с падежами и предлогами). Главное, чтобы в словарной базе эти слова были.
Неактивен
Ну почему нужно глагол ставить только на первое место? Можно ведь легко обойти это ограничение.
Неактивен
...но пока лень реализовать. А так, сперва этот вариант было проще разработать. Нашел глагол - сразу ясно, какие объекты (из последующих слов) к нему можно прицепить. Основные проблемы с произвольным положением глагола проявляются только в случае использования в одной фразе нескольких команд. Если же допустить, что во фразе всего одна команда - то нет проблем. Это легко реализуемо.
Неактивен
Переписывая свой анализатор (в связи с новой структурой данных приходится все переписывать!) наткнулся на еще одну проблему - изменение падежей существительного ЧИСЛИТЕЛЬНЫМ (будь оно неладно!). Сейчас штудирую учебник русского языка, чтобы решить эту проблему наименее кровавым образом.
Неактивен
А как же ты без предлогов обходишься?
положи камень НА стол,
положи камень ПОД стол
- разные вещи...
Неактивен
С предлогами-то как раз проблем нет, но вот числительные - та еще штучка...
Кстати, в объекте "существительное" у меня запоминается каким предлогом оно сопровождается.
Неактивен
Olegus t.Gl. написал:
С предлогами-то как раз проблем нет, но вот числительные - та еще штучка...
С числительными я как-то разбирался.
Если не ошибаюсь, то всё, что кончается на 1, кроме 11, имеет И.п. (Именительный падеж).
Всё, что на 2, кроме 12, - В.п.
Всё на 3-9, кроме 13-19, - В.п.
А 11-19 - Р.п.
Ой, кажется я что-то напутал. Ну, думаю, мои мысли понятны. Или тебе не это нужно?
Неактивен
Olegus t.Gl. написал:
Пишу-то я на Паскале.
Что касается расположения глаголов и пр., а если в предложении два действия: "возьми камень и кинь его в гоблина"? Хотя все это решаемо.
Что касается помощи, то пока справляюсь. Хотя характеристики еще не реализованы. Структура команды по Olegus'у такова:
глагол + осн.объект + всп.объект + доп.объект
"привяжи лошадь к забору веревкой"
Порядок следования объектов и предлоги роли не играют, то есть тем же самым для компьютера будет: "привяжи с помощью веревки лошадь к забору". Хотя все это требует нехилой словарной базы. К тому же возможно использования нескольких команд (см. пример выше про бедного гоблина), а также нескольких объектов: "возьми камень, пилу, топор и пожрать".
В любом случае, работа идет и, хвала небесам!, останавливаться не собирается! ;D
А может реализовать всё через маски? Как в Inform`у.
Неактивен
В каком смысле? Можно поподробнее насчет масок в Inform'е?...
Неактивен
Olegus t.Gl. написал:
В каком смысле? Можно поподробнее насчет масок в Inform'е?...
В Inform`е же используются маски для парсинга введённой строки
Неактивен
В самом скором времени (до 8 февраля) выложу алгоритм анализа фразы игрока. Он прост, но хорош. Я его использую в "Наследство Мути...".
Это кому-либо интересно?
Неактивен
Olegus t.Gl. написал:
В самом скором времени (до 8 февраля) выложу алгоритм анализа фразы игрока. Он прост, но хорош. Я его использую в "Наследство Мути...".
Это кому-либо интересно?
Да-да, интересно было бы посмотреть.
Неактивен
Если кому это интересно, то статья уже вышла. Смотрите раздел "Инструменты" нашего сайта, или (что еще проще) вот она сама:
https://ifiction.ru/a/ifparser.html
Неактивен
Olegus t.Gl. написал:
Если кому это интересно, то статья уже вышла. Смотрите раздел "Инструменты" нашего сайта, или (что еще проще) вот она сама:
https://ifiction.ru/a/ifparser.html
Олегус, я прочел, весомо! Местами хихикал, вспоминая свои давешние дурацкие "без пальто из кино в казино"...
2Community: вот так и надо, робяты, помогать отечественному хип-хопу...тьфу, ИФ! Никакой метафизии, одна практика, бери и пользуйся хоть щаз!
неофит пиара,
Залумунда.
Неактивен
Как-то легко решился вопрос с местоимениями. Теперь вместо таких фраз, как:
>возьми лампу и зажги лампу
10
>возьми лампу
>зажги лампу
можно вводить так:
>возьми лампу и зажги ее
10
>возьми лампу
>зажги ее
а такую фразу, как "возьми меч и убей мечом дракона" можно заменить на "возьми меч и убей им дракона".
Пора бы приложение к статье выкладывать...
Неактивен
Да-да, Олегус, давай!
А вообще с местоимениями, я думаю, не так уж и сложно... Для каждого существительного добавлять падеж, сделать таблицу местоимений, а потом, при анализе просматривать строку, находить падеж, сравнивать его вид с видом существительного (падеж, род, число) и просто заменять падеж на сущ. Правильно говорю?
А вообще сейчас пойду и вставлю в свой код.
Отчаянный Дух (ОДИН)
Неактивен
В Inform`е есть "встроенные" постоянные переменные: it, this и др., которые указывают на: текущую локация, на переметры (предметы, фигурирующие в команде) и др. А так же на предметы-персонажи, которые являются "базовыми" в данной локации (например, he и she). Это, IMHO, очень удобно для разработчика, а также для игрока (ведь при вводе "его" и др. в эти переменные и подставляются нужные значения).
Неактивен
Так... Вопрос: где-нить еще (ленив я, чтоб весь форум перерывать) что-нить на Subj писалось?
Хоть название темы дайте...
Я, криво и плохонько, реализовал часть изложенных здесь идей.
Ну - числительные, прилагательные и местоимения я просто пока не трогал. Будет над чем еще подумать.
Я дошел до того, что фразы "осмотрись", "возьми ключ со стола", "открой дверь ключом", "выйди".. и т. д. - проходят на ура. С любым осмысленным порядком слов.
"Заставлять пользователя <подстраиваться> под возможности программы закономерно считается унизительным"(с)
А вот фраза "стукни ключом в дверь" ;( в алгоритм не укладывается.... или я что-то пропустил?
И мне кажется, что подобная формулировка - не единственная... Не то чтобы меня на данном этапе это сильно тормозило, но сам факт! Обсуждать будем?
Неактивен