Бьюсь тут над анализатором вводимых игроком команд. Поскольку я не гений, то приходится делать некоторые ограничения игрокам при составлении предложений, а именно следующие:
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 писалось?
Хоть название темы дайте...
Я, криво и плохонько, реализовал часть изложенных здесь идей.
Ну - числительные, прилагательные и местоимения я просто пока не трогал. Будет над чем еще подумать.
Я дошел до того, что фразы "осмотрись", "возьми ключ со стола", "открой дверь ключом", "выйди".. и т. д. - проходят на ура. С любым осмысленным порядком слов.
"Заставлять пользователя <подстраиваться> под возможности программы закономерно считается унизительным"(с)
А вот фраза "стукни ключом в дверь" ;( в алгоритм не укладывается.... или я что-то пропустил?
И мне кажется, что подобная формулировка - не единственная... Не то чтобы меня на данном этапе это сильно тормозило, но сам факт! Обсуждать будем?
Неактивен
По идее, фраза "стукни ключом в дверь" должна проходить по моему алгоритму на ура, если, конечно, в базе данных у глагола "стукнуть" есть основной объект винительного падежа с предлогом "в", а также вспомогательный объект творительного падежа. В этом случае на выходе будет следующая конструкция:
Глагол: Стукнуть
Осн. объект: Дверь
Всп. объект: Ключ
А вот как автор будет обрабатывать эту конструкцию - дело его.
Неактивен
Olegus t.Gl. написал:
если, конечно, в базе данных у глагола "стукнуть" есть основной объект винительного падежа с предлогом "в", а также вспомогательный объект творительного падежа
Я с самого начала танцевал не от действий, а от объектов. Дескать - выделим т.н. главный объект ("открой ключом дверь" - это дверь) и предоставим ему самому разбираться: возможно ли это, что для этого необходимо, а если возможно - то что получится...
Впрочем анализ фразы - отдельная функция. Всегда могу и переписать. добавить базу по глаголам, или вообще, к примеру, применять несколько алгоритмов, с последующим выбором из нескольких решений наиболее вероятного.
Но пока - и то что есть сойдет...
(да... статьи надо читать внимательнее... согласен)
Неактивен
Olegus t.Gl. написал:
...наткнулся на еще одну проблему - изменение падежей существительного ЧИСЛИТЕЛЬНЫМ (будь оно неладно!). Сейчас штудирую учебник русского языка, чтобы решить эту проблему наименее кровавым образом.
В основном эту проблему преодолел, но есть затрудения с родительным и винительным падежами...
Как более правильно:
"не хватает двух стульей" или "не хватает два стула" ?
"вижу двух солдат" или "вижу два солдата" ?
В каких случаях применять первую форму, а в каких вторую?
Отредактировано ASBer (03.03.2008 14:09)
Неактивен
Hind спасибо!
С родительным падежом согласен:
Деньги двух солдат (р.п.) (без вариантов)
Спинки двух стульев (р.п.) (без вариантов)
Затруднения возникли из-за попытки провериться на глаголах:
Не хватает двух стульев. (тут р.п.)
Не хватает два стула. (тут в.п.)
т.е. оба варианта допустимы.
С винительным падежом неодушевленного тоже все прозрачно:
Вижу два стула (без вариантов)
С винительным падежом одушевленного все еще колеблюсь, если исходить из правила, что для одушевленных сущ. винительный падеж всегда совпадат с родительным, то верно "вижу двух солдат".
Но и "вижу два солдата" мне слух почему-то не режет...
Нет ли примера где это явно проявляется?
Неактивен
ASBer написал:
Затруднения возникли из-за попытки провериться на глаголах:
Не хватает двух стульев. (тут р.п.)
Не хватает два стула. (тут в.п.)
т.е. оба варианта допустимы.
По нормам русского языка второй вариант недопустим и относится к вульгарной разговорной форме (в общем случае, падежи подчиненного существительного и глагола, задающего вопрос существительному {не хватает ЧЕГО?} должны всегда совпадать)
Отредактировано Owl Wilson (07.03.2008 12:51)
Неактивен
Существует масса глаголов, которые сочетаются с существительным как в родительном падеже (вопрос ЧЕГО?), так и в винительном падеже (вопрос ЧТО?).
Пример: "Дать хлеба" (р.п) "Дать хлеб" (в.п).
Вероятно глагол "не хватает" в примере неудачен.
Отредактировано ASBer (07.03.2008 19:52)
Неактивен
ASBer написал:
Существует масса глаголов, которые сочетаются с существительным как в родительном падеже (вопрос ЧЕГО?), так и в винительном падеже (вопрос ЧТО?).
Вот в каком падеже они "сочетаются", в таком и должно быть существительное. В примере "дать хлеб" действительно используется винительный, потому и "хлеб".
Неактивен