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