Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFprint · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

   #1
14.11.2009 22:37

fireton
некто с бородой (+143, -29)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1029
Вебсайт

Тон

Две ошибки в библиотеке

Нашёл две ошибки в библиотеках. Одну серьёзную (фактически, блок) и одну мелкую косметическую.

1. Модуль advr.t, функция parseNounPhrase.

Код:

if (objs!=[] and (wasadjafn || specifed)) return [(i+1)]+objs;

+1 в этом выражении, как оказалось лишнее, т.к. i инкрементируется двумя строчками выше. Ошибка приводила к тому, что на фразу, скажем, "воткнуть булавку в подушечку" парсер отвечал "Я не понимаю это предложение".


2. Модуль errorru.t, функция parseError2.

Код:

 if (p=inPrep) {p.sdesc;" ";i.vdesc;} else

p.sdesc;" "; тут лишнее, т.к. уже выводилось на экран четырьмя строчками выше. Ошибка приводила к тому, что сообщение об ошибке выглядело как "Я не знаю как воткнуть булавку в в подушечку". Т.е. предлог дублировался.

Неактивен

 

   #2
16.11.2009 23:51

fireton
некто с бородой (+143, -29)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1029
Вебсайт

Тон

Re: Две ошибки в библиотеке

Кстати, первая ошибка еще здесь упоминалась...

Неактивен

 

   #3
17.11.2009 07:22

GrAndrey
папа RTADS и Бяка (+37, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1202
Вебсайт

меньше слов

Re: Две ошибки в библиотеке

Спасибо за выявленную и исправленную ошибку. Протестировал, побочных эффектов не обнаружил. Внес в библиотеки. Попутно решилась следующая, давно волновавшая проблема:

>взять кирку с трупа
Кирка не на трупе гоблина! У тебя уже есть кирка!

>взять кирку с трупа
Я не понимаю это предложение.

теперь:

>взять кирку с трупа
Взята.

>взять кирку с трупа
Кирка не на трупе гоблина! У тебя уже есть кирка!

Неактивен

 

   #4
17.11.2009 09:16

GrAndrey
папа RTADS и Бяка (+37, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1202
Вебсайт

меньше слов

Re: Две ошибки в библиотеке

Вылезла маленькая проблемка, которую пока не знаю как решить.

>положить подушечку в иголку подушечки
Я не вижу здесь объект "подушечку of иголки".

Просьба протестировать комбинации сущ+прилагательное

Обновленные библиотеки: hhtp://www.rtads.org/libr26pre.rar. Там есть ещё одна небольшая доработка генератора.

Неактивен

 

   #5
17.11.2009 18:22

fireton
некто с бородой (+143, -29)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1029
Вебсайт

Тон

Re: Две ошибки в библиотеке

Вылезла маленькая проблемка, которую пока не знаю как решить.

Я так понимаю, там всё дело в parseNounPhrase, которая неправильно распознаёт принадлежность слова тому или иному объекту. Надо будет как-нибудь посмотреть на неё.

Неактивен

 

   #6
20.11.2009 02:56

fireton
некто с бородой (+143, -29)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1029
Вебсайт

Тон

Re: Две ошибки в библиотеке

Ещё одна гадкая ошибка.

"дать большой орех белке" - работает
"дать белке большой орех" - парсеру сносит крышу напрочь.

Как результат, в моей игре на КРИЛ нельзя будет использовать вторую форму, полностью корректную с т.з. русского языка. sad
Если только Андрей не разберется. Я что-то не смог. Андрей?

Неактивен

 

   #7
20.11.2009 09:16

GrAndrey
папа RTADS и Бяка (+37, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1202
Вебсайт

меньше слов

Re: Две ошибки в библиотеке

примерно 7370 строка адвр.т. Что сделал, сам толком не понял, так что хорошо протестите smile

Код:

// прилагательное
     if (((typelist[i] & PRSTYP_ADJ) != 0))
     {
              local tobjs2;
              tobjs:=parserDictLookup([(wordlist[i])], [PRSTYP_ADJ]);
                
              if (objs!=[]) tobjs2:=intersect( objs, tobjs ); 
                else objs:=tobjs;
                
              if (lasttype & PRSTYP_NOUN) wasadjafn:=true;
                
                // если было сущ + прил и они между собой не вяжутся
                if (wasadjafn && tobjs2=[])  
                    return [i]+objs;  
                
                // пересечение, видимо, годится
                if (tobjs2) objs:=tobjs2;
     }

     // существительное
         // нужно разобрать случай, сущ + прил + сущ, и прилагательное подходит ко всем!
         // видимо, просто уточнит, ничего страшного
            
     if (((typelist[i] & PRSTYP_NOUN) != 0))
     {
           local tobjs2;
       tobjs:=parserDictLookup([(wordlist[i])], [PRSTYP_NOUN]);
                
       if (objs!=[]) tobjs2:=intersect( objs, tobjs ); 
                else objs:=tobjs;
                
           // если цепочка увязки прервалась
           if (tobjs2=[])  return [i]+objs;             
       
           // пересечение, видимо, годится
           if (tobjs2) objs:=tobjs2;

результат:

>дать белке большой орех
Ты не несёшь ореха.
>взять белку большого
Я не понимаю это предложение.
>взять белку для большого
Я не понимаю это предложение.
>взять белку большую
Ты не можешь взять белку.

А правильно должно быть "Я не вижу здесь объект "белку of большого""


НО!!!

>дать большой белке большой орех
Я не понимаю это предложение.

потому как "дать to большой to белке большой орех"
Очевидно, подобный анализ нужно делать и в предпарсе... yikes

Неактивен

 

   #8
20.11.2009 11:16

fireton
некто с бородой (+143, -29)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1029
Вебсайт

Тон

Re: Две ошибки в библиотеке

Спасибо огромное, Андрей! Чтоб я без тебя делал!

Я проверил, вроде нормально работает.

Скажи, а если я определяю предмет двумя существительными:

Код:

zmey: Actor
  location = startroom
  desc = 'Змей/муо Горыныч/муо'
  noun = 'дракон/мо'
  ...
;

то игра обламывается при попытке дать предмет Змею Горынычу.

Я пока решил проблему тем, что сделал слово "Горыныч" прилагательным. Не уверен, что это правильно, но так, вроде, работает. Это вообще, как?

И еще. Если в определении существительного или прилагательного попадётся буква "ё", то это слово навсегда выпадает из поля зрения парсера. Т.е. не получится сделать desc = 'Ёжик/му' - этого ёжика потом в игре не найти.

Отредактировано fireton (20.11.2009 11:27)

Неактивен

 

   #9
20.11.2009 11:27

GrAndrey
папа RTADS и Бяка (+37, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1202
Вебсайт

меньше слов

Re: Две ошибки в библиотеке

Указанные баги уже исправил. В приложении

второе - не обезъЁживались прилагательные. С существительными был порядок.

"Горыныч" должен быть прилагательным, по логике системы. Кстати, спасибо что напомнил, нужно доработать склонение отчеств.


Прикрепленные файлы:
advr.t, Размер: 231,315 байт, Скачано: 424
generator.t, Размер: 40,144 байт, Скачано: 420

Неактивен

 

   #10
21.11.2009 23:46

fireton
некто с бородой (+143, -29)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1029
Вебсайт

Тон

Re: Две ошибки в библиотеке

Супер! Спасибо, Андрей!

Неактивен

 

   #11
23.11.2009 05:06

GrAndrey
папа RTADS и Бяка (+37, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1202
Вебсайт

меньше слов

Re: Две ошибки в библиотеке

Антон помог диагностировать ещё одну проблему.
Введена команда типа:  положить яблоко в корзину
в игре есть несколько яблок
Парсер начинает разбор, выясняет, что "яблоко" требует уточнения и откладывает его на поздний этап анализа.
Затем проходят все стандартные фазы разбора и приходит черед замены specialWords на системные значения. В текущей версии РТАДС 'of'='в'='на'='из', что приводит к тому, что после неоднозначности все команды типа "глагол + неодназначное сущ. + в/на/из + сущ." трактуются как "глагол + уточненное сущ. of сущ.".
Результат:

(в корзину)
Я не вижу здесь объект "яблоко of корзину".

Остается либо удалить эти предлоги из списка специальных слов и лишится возможности оперировать "салом в шоколаде", "статуэткой из папье-маше", "торбой на круче". Либо ещё больше усложнить код и пытаться заменять эти предлоги на "in", "on", "from" во избежание...

Неактивен

 

   #12
23.11.2009 08:59

fireton
некто с бородой (+143, -29)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1029
Вебсайт

Тон

Re: Две ошибки в библиотеке

И какие планы? Какое решение ты предпочёл?
Мне кажется, надо усложнять. smile

Доточим RTADS до невиданных высот! smile

У меня в конкурсной игре эта ошибка, кстати, проявляется самым неприятным образом.

Выход для игрока, чтобы обойти проблему - использовать краткую форму.
Например:

>положить орех
Куда вы хотите положить это?

>в корзину
Готово.


Но, конечно, это не дело. Надеюсь, всё будет исправлено и я выпущу послеконкурсную версию игры без этого гадкого бага.

Отредактировано fireton (24.11.2009 08:56)

Неактивен

 

   #13
14.03.2010 18:57

uux
Участник (+368, -25)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1458

Re: Две ошибки в библиотеке

И еще одна ошибка:

Код:

Gayka: item
noun='гайка/1ж'
location=startroom
;
Vint: item
noun='винт/1м'
location=startroom
;

>присоединить винт к гайке
Я не понимаю это предложение.

"присоединить винт к гайка" (или любой другой падеж, кроме дательного) - работает.

Неактивен

 

   #14
14.03.2010 20:43

GrAndrey
папа RTADS и Бяка (+37, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1202
Вебсайт

меньше слов

Re: Две ошибки в библиотеке

Фикс в приложении.
uux, извини, на письмо отвечу


Прикрепленные файлы:
advr26fix1.rar, Размер: 65,047 байт, Скачано: 360

Неактивен

 

   #15
15.03.2010 05:44

uux
Участник (+368, -25)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1458

Re: Две ошибки в библиотеке

GrAndrey написал:

Фикс в приложении.

Андрей, спасибо! Все пашет!

Неактивен

 

   #16
25.03.2010 05:41

uux
Участник (+368, -25)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1458

Re: Две ошибки в библиотеке

И еще один глючок:

Код:

>войти в пещеру
Ведущий внутрь пещеры проход слишком узок. 

>зайти в пещеру
Во что ты хочешь войти? 

>пещеру
Я не знаю как войти в пещеру.

Правда, пока выкрутился, применив compoundWord...

Отредактировано uux (25.03.2010 05:41)

Неактивен

 

   #17
25.03.2010 10:10

GrAndrey
папа RTADS и Бяка (+37, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1202
Вебсайт

меньше слов

Re: Две ошибки в библиотеке

Достаточно пополнить свойство verb в глаголе inVerb следующей лексемой: 'зайти в'

Неактивен

 

   #18
25.03.2010 21:15

fireton
некто с бородой (+143, -29)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1029
Вебсайт

Тон

Re: Две ошибки в библиотеке

Андрей, а ты в SVN библиотеку обновляешь?

Неактивен

 

   #19
26.03.2010 00:17

uux
Участник (+368, -25)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1458

Re: Две ошибки в библиотеке

GrAndrey написал:

Достаточно пополнить свойство verb в глаголе inVerb следующей лексемой: 'зайти в'

В моем случае почему-то не помогло:( - сам удивляюсь, почему. Правда, как уже сказано, обошел проблему при помощи compoundWord.

UPD: был неправ - действительно помогает. Видимо, забыл перекомпилировать игру.

Отредактировано uux (26.03.2010 05:48)

Неактивен

 

Powered by PunBB
© copyright 2001–2017 iFiction.Ru