Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
14.11.2009 22:37

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

Тон

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

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

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;" "; тут лишнее, т.к. уже выводилось на экран четырьмя строчками выше. Ошибка приводила к тому, что сообщение об ошибке выглядело как "Я не знаю как воткнуть булавку в в подушечку". Т.е. предлог дублировался.

Неактивен

0    0    #2
17.11.2009 07:22

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

меньше слов

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

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

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

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

теперь:

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

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

Неактивен

0    0    #3
17.11.2009 09:16

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

меньше слов

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

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

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

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

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

Неактивен

0    0    #4
20.11.2009 09:16

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

меньше слов

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

Неактивен

0    0    #5
20.11.2009 11:27

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

меньше слов

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

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

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

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


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

Неактивен

0    0    #6
23.11.2009 05:06

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

меньше слов

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

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

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

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

Неактивен

0    0    #7
14.03.2010 20:43

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

меньше слов

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

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


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

Неактивен

0    0    #8
25.03.2010 10:10

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

меньше слов

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

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

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru