Вывод генератора:
1му - стол сто$1а сто$1у(#d) сто$1 сто$1ом(#t) сто$1е стол (-)
Объект:
table: fixeditem, surface location = lightRoom isHim = true adjective = 'изящный/1м' noun = 'стол/1м' ldesc = "Описание стола. " ;
Лексемы какие-то странные. Так и надо, или я опять что-то неправильно делаю?
С прилагательным вроде порядок.
Неактивен
Генератор на прилагательном adjective = 'восточное/с' зависает.
Некорректно воспроизводятся лексемы 'землЯ/1ж' (в В.П. даже пробел посреди слова!).
И ещё: sdesc, я так понял, автоматом не генерится? Было бы удобно, если бы для объекта, у которого не задан sdesc, он автоматом составлялся из первого существительного (возможно, первое прилагательное плюс первое существительное).
P.S. Слова типа "ставень" (ставня) надо руками прописывать?
Отредактировано Gremour (09.04.2008 18:07)
Неактивен
У меня еще подозрение, что, например, слово "яд" может обробатываться некорректно. Правда, не проверял, просто подозрение.
Отредактировано - VampirE - (09.04.2008 19:13)
Неактивен
GrAnd, может пока выпустить две версии библиотек: с генератором (RTADS 2.5G - генератор) и без (RTADS 2.5S - стандарт)
Я программер никудышный - у меня от твоего генератора голова ходит циркулем.
Неактивен
Хм. Это точно была последняя версия? Уже в прошлый раз не должно было возникать.
Выкладываю ещё одно обновление. Изменился только файл генератора.
Подоптимизировал, но все равно 800 миллисекунд на 113 слов без вывода на экран...
Туду для себя - ввести ключ однократного прохода в функции замены.
у меня от твоего генератора голова ходит циркулем.
Генератор вообще можно не подключать, а подключенный, он ничего не будет делать, если для него не оставить отметки. Сложность с ним будет только в изучении отметок.
sdec, rdesc... pdesc - все будут.
Неактивен
По-прежнему 'восточное/1с' и 'старинное/1с' дают слом генератора (выход за границы массива).
Очень хочется автоматической генерации *desc и флагов isHim, isHer, isThem. Делаю пока самостоятельно. Но работает как-то странно. Некоторые прилагательные для И.П. почему-то теряются
modify thing autoAdj = true // Признак автогенерации прилагательного descnoun = [ '', '', '', '', '', '' ] descadj = [ '', '', '', '', '', '' ] assembleDescription(n) = { if (autoAdj && descadj[n] != '') { say (descadj[n]); " "; } say (descnoun[n]); } sdesc = { self.assembleDescription(1); } rdesc = { self.assembleDescription(2); } ddesc = { self.assembleDescription(3); } vdesc = { self.assembleDescription(4); } tdesc = { self.assembleDescription(5); } pdesc = { self.assembleDescription(6); } printDescs = { "\n"; "sdesc={"; sdesc; "}"; "\n"; "rdesc={"; rdesc; "}"; "\n"; "ddesc={"; ddesc; "}"; "\n"; "vdesc={"; vdesc; "}"; "\n"; "tdesc={"; tdesc; "}"; "\n"; "pdesc={"; pdesc; "}"; } ;
В generator.t (метод start(...):
// перебираем склонения res:=generate(obj, nouns[i], 0, 1, true); for (sklon:=1; res<>nil && sklon<=length(res); ++sklon) { local same:=nil; local new_nouns:= getwords(obj, &noun); if (sklon >= 1 and sklon <= 6) // +++++++++++++++++++ obj.descnoun[sklon] := res[sklon][1]; // +++++++++++++++++++ // пополняем список лексем if (find(new_nouns,res[sklon][1])=nil) addword(obj, &noun, res[sklon][1]); else same:=true; <...> // СКЛОНЯЕМ ПРИЛАГАТЕЛЬНЫЕ for (i:=1; i<=al; ++i) { local res, sklon; if (find(adjs[i],'/')) { res:=generate(obj, adjs[i], 0, 2, true); for (sklon:=1; res<>nil && sklon<=length(res); ++sklon) { local same:=nil; local new_adjs:= getwords(obj, &adjective); if (sklon >= 1 and sklon <= 6) // +++++++++++++++++++++++ obj.descadj[sklon] := res[sklon][1]; // +++++++++++++++++++++++ if (find(new_adjs, res[sklon][1])=nil) addword(obj, &adjective, res[sklon][1]); else same:=true;
Неактивен
1жп - выгоревшая выгоревшой выгоревшой(-)(#d) выгоревшую выгоревшой(-)(#t) выгоревшой(-) выгоревшою(#t) выгоревшаяю
2жу - ромашки ромашек ромашок(#d) ромашк ромашкам(#t) ромашки(-) ромашками(#t) ромашках
И ещё, описания 'ложка/ж' и 'ложка/1ж' дают разные лексемы. Хотя не должны, по идее. Если число не указано, должно предполагаться единственное.
Update: (с васильками всё в порядке, не поставил род)
Отредактировано Gremour (14.04.2008 15:21)
Неактивен
Андрей, ответь пожалуйста, имеет ли смысл начинать пользоваться генератором и завязываться на него в новой игре? Не получится ли, что игра будет неработоспособной и придется все переделывать на старые рельсы? Вопрос правда очень актуален...
Неактивен
Генератор -- это один из альтернативных вариантов. Если для некоторых слов он не срабатывает, можно прописать лексемы вручную. Я пользуюсь. Ибо облегчает. Заодно найдём места, где он работает неправильно, и ГрАнд их исправит (надеюсь .
Неактивен
Совершенно верно. Это альтернативный вариант, который должен стать основным. Надеюсь вы разберетесь как вносить новые правила и поможете доработать алгоритм для всех извращенных случаев.
Чтобы увидеть какое из правил было задействовано, нужно раскомментировать строку
// generator.detailed:=true;
1 - индивидуальное правило, 2 - общий блок правил. Второе число - порядковый номер правила. После каждого фрагмента в комментарии написана его длина для упрощения ориентирования. Не забывайте изменять эти значения после внесения правокю
Неактивен
Можно начинать пользоваться. Неработающие варианты публиковать здесь. Если до релиза библиотеку не исправят, то просто вручную прописать правильный вариант. Буквы-флаги вряд-ли изменятся.
Чтобы было яснее - склонения формируются при запуске игры, но внутренне они принимают тот вид, который мы всегда ранее задавали. Библиотеку обновил, исправил "восточное" и "старинное", качать там же.
Неактивен
GrAndrey написал:
Можно начинать пользоваться. ... меньше слов
УРА! СПАСИБО!!!
Отредактировано Korwin (14.04.2008 19:39)
Неактивен
ГрАнд, ОГРОМНАЯ просьба сделать автогенерацию sdesc, rdesc ... pdesc. Без автогенерации desc'ов от генератора проку не много. Всё равно приходится использовать внешний (чтобы не прописывать desc'и руками).
Моё решение (приведено выше) не всегда однозначно выбирает слово, если есть синонимы. Иногда берётся первое слово. Иногда последнее. А иногда прилипает к одному из синонимов и берёт только его, независимо от положения слова в списке синонимов.
Я не вникал глубоко в алгоритм. Видимо ты разбираешь слова не подряд. Можно внести дополнительный флаг, который помечает синоним, который будет использоваться в desc'ах. Например 'рог/1м=' 'рожок/1м' 'загогулина/1ж'. Если флага нет, брать первый (или последний). То же самое с прилагательными. Флаги isHim/isHer/isThem генерить согласно выбранному синониму.
Неактивен
Gremour написал:
ГрАнд, ОГРОМНАЯ просьба сделать автогенерацию sdesc, rdesc ... pdesc. Без автогенерации desc'ов от генератора проку не много. Всё равно приходится использовать внешний (чтобы не прописывать desc'и руками).
Моё решение (приведено выше) не всегда однозначно выбирает слово, если есть синонимы. Иногда берётся первое слово. Иногда последнее. А иногда прилипает к одному из синонимов и берёт только его, независимо от положения слова в списке синонимов.
Я не вникал глубоко в алгоритм. Видимо ты разбираешь слова не подряд. Можно внести дополнительный флаг, который помечает синоним, который будет использоваться в desc'ах. Например 'рог/1м=' 'рожок/1м' 'загогулина/1ж'. Если флага нет, брать первый (или последний). То же самое с прилагательными.
поддерживаю. У меня та же беда - из списка синонимов Марина, Жена. Супруга. Стерва выбирает жена, хотя требовалось выбрать в описании имя. Порядок не влияет. Андрей, алгоритм выбирает слово в алфавитном порядке?
Неактивен
Korwin,
В текущей версии генератора Гранда *desc-и не создаются. Автоматическое создание *desc-ов -- моих рук дело (правку generator.t я постил выше; у тебя подправленная мной версия генератора). Но это всего лишь быстрое решение. Алгоритм у Гранда сложнее, чем мне казалось, и выдаёт лексемы в странном порядке (не в той очерёдности, в какой они прописаны в свойстве noun объекта). Будет лучше, если Гранд сделает создание *desc-ов сам, как автор генератора.
Неактивен
Извиняюсь за задержку - потихоньку пишу.
В TADS значения noun хранятся не упорядоченно, оригинальный порядок сохранить не удастся (если я правильно понял о чем идет речь). Сам же генератор выдает список склонений в обычном порядке.
Неактивен
Нашел маленькую ошибку в advr.t - если перегрузить героя вещами, интерпретатор сообщает "Ты не можИшь нести столько предметов". Там вместо glok(actor,1,1) стоит glok(actor,2,1)
Неактивен
Андрей, ну как? Будет релиз или пока перебиваться бетой? Особенно интересует рабочий генератор с инструкцией о том, как задавать собственные правила...
Неактивен
fireton написал:
Андрей, ну как? Будет релиз или пока перебиваться бетой? Особенно интересует рабочий генератор с инструкцией о том, как задавать собственные правила...
Столь внезапный и коварный вопрос лишил меня дара речи.
Инструкции в комментариях библиотеки. Готов ответить, если что не ясно.
Неактивен