Сделал хак для распознавания глаголов с возвратным окончанием "-ся"
// замена "себя" на имя подходящего объекта
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)
Неактивен
GrAndrey написал:
// превращаем озвратные глаголы в глаголы прямые + "себя"
Мне кажется тут баг=)
Неактивен
GrAndrey написал:
Dark[Ol(U23)leneri] написал:
GrAndrey написал:
// превращаем озвратные глаголы в глаголы прямые + "себя"
Мне кажется тут баг=)
ну, тут есть потенциал для багов. Например, при команде "покопаться в ..." система это поймет как "покопать себя в ...". Игрок будет несколько удивлен
я говорил об "озвратных глаголах" ))
Неактивен
То-то же^^
Неактивен