Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
29.11.2010 00:36

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

меньше слов

Проблема с массивом в качестве параметра

Сделал хак для распознавания глаголов с возвратным окончанием "-ся"

Код:

// замена "себя" на имя подходящего объекта
replaceSelf: function(str)
    {
        local name;
        local ret := reSearch('себя',str);
        
        // превращаем возвратные глаголы в глаголы прямые + "себя"
        // игнорируем те, у которых есть специальные значения с "ся" (осмотреться!=осмотреть себя)
        // пока срабатывает на однократное вхождение
        if (ret=nil)
    {
            local alph='абвгдеёжзийклмнопрстуфхчцшщъыьэюя';
            local verbs, dVerb;
            ret := reSearch('[абвгдеёжзийклмнопрстуфхчцшщъыьэюя]+ся[^абвгдеёжзийклмнопрстуфхчцшщъыьэюя]*',str);
            if (ret && ret!=[]) 
            {
                verbs:= parserDictLookup([[]+ret[3]], [PRSTYP_VERB]);
                if (verbs=[]) 
                {
                    dVerb:=replaceStr(ret[3], '(.+)ся', '$1');
                    verbs:= parserDictLookup([dVerb], [PRSTYP_VERB]);
                    if (verbs!=nil) 
                        str:=replaceStr(str, '([абвгдеёжзийклмнопрстуфхчцшщъыьэюя]+)ся[^абвгдеёжзийклмнопрстуфхчцшщъыьэюя]*','$1 себя');
                }
            }
        }
        
    if (ret!=nil)
     {
      // Узнаем имя персонажа и его лексемы без флагов
      local actor_sdesc:=dToS(parserGetObj(PO_ACTOR),&sdesc);
      local nouns:= getwords(parserGetObj(PO_ACTOR),&noun);
      local i, oldstr:=str;
      for (i:=1; i<=length(nouns);i++) 
            if (reSearch('[#/]',nouns[i])<>nil) {nouns-=nouns[i]; i--;}

      // Стараемся использовать имя персонажа для уточнения о ком речь,
      // но если таких лексем нет - берем первое его попавшееся существительное
          if (find(nouns, actor_sdesc)<>nil)  name:=actor_sdesc;  else name:=nouns[1];

            str:=replaceStr(str, 'себя',  name);
     }
    return str;
}
;

Вопрос:
почему verbs:= parserDictLookup([ret[3]], [PRSTYP_VERB]); возвращает пустой список для 'осмотреться'?

Отредактировано GrAndrey (29.11.2010 08:48)

Неактивен

0    0    #2
29.11.2010 03:33

Dark[Ol(U23)leneri]
Участник (-3)
Зарегистрирован: 16.05.2010
Сообщений: 203

Re: Проблема с массивом в качестве параметра

GrAndrey написал:

// превращаем озвратные глаголы в глаголы прямые + "себя"

Мне кажется тут баг=)

Неактивен

0    0    #3
29.11.2010 10:10

Dark[Ol(U23)leneri]
Участник (-3)
Зарегистрирован: 16.05.2010
Сообщений: 203

Re: Проблема с массивом в качестве параметра

GrAndrey написал:

Dark[Ol(U23)leneri] написал:

GrAndrey написал:

// превращаем озвратные глаголы в глаголы прямые + "себя"

Мне кажется тут баг=)

ну, тут есть потенциал для багов. Например, при команде "покопаться в ..." система это поймет как "покопать себя в ...". Игрок будет несколько удивлен smile

я говорил об "озвратных глаголах" ))

Неактивен

0    0    #4
29.11.2010 17:48

Dark[Ol(U23)leneri]
Участник (-3)
Зарегистрирован: 16.05.2010
Сообщений: 203

Re: Проблема с массивом в качестве параметра

То-то же^^

Неактивен

Powered by PunBB
© copyright 2001–2023 iFiction.Ru