Сделал хак для распознавания глаголов с возвратным окончанием "-ся"
// замена "себя" на имя подходящего объекта 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 написал:
Вопрос:
почему verbs:= parserDictLookup([ret[3]], [PRSTYP_VERB]); возвращает пустой список для 'осмотреться'?
Не знаю, действительно ли ГрАнд не знает или это проверочное задание;), но отвечу.
спойлер…
Отредактировано uux (29.11.2010 09:10)
Неактивен
Dark[Ol(U23)leneri] написал:
GrAndrey написал:
// превращаем озвратные глаголы в глаголы прямые + "себя"
Мне кажется тут баг=)
ну, тут есть потенциал для багов. Например, при команде "покопаться в ..." система это поймет как "покопать себя в ...". Игрок будет несколько удивлен
Неактивен
GrAndrey написал:
Спасибо, Валя!
Я действительно не знал, и подумать не мог о таком нюансе, добавлю в FAQ.
Ну, я о таком нюансе тоже не знал на самом деле, просто минут 15 поэкспериментировал с отладчиком;).
Неактивен
GrAndrey написал:
Dark[Ol(U23)leneri] написал:
GrAndrey написал:
// превращаем озвратные глаголы в глаголы прямые + "себя"
Мне кажется тут баг=)
ну, тут есть потенциал для багов. Например, при команде "покопаться в ..." система это поймет как "покопать себя в ...". Игрок будет несколько удивлен
я говорил об "озвратных глаголах" ))
Неактивен
То-то же^^
Неактивен