Относительное предложение (which) в GF
"Play История игрушек, которая была опубликована в прошлом году"
Sentence = mkUtt( mkImp (mkVP
(mkV2 "play")
(mkNP (mkCN
(mkCN (mkN "Toy Story"))
(mkS pastTense simultaneousAnt(mkCl (mkVP
(mkV2 "publish")
(mkNP (mkCN (mkN "last yser")))
)))
))
));
При создании предложения относительного предложения в GF всегда синтаксис S для предложения будет добавлять, что между двумя предложениями есть способ заменить то, на что.
1 ответ
Прежде всего, созданная вами структура - это не относительное предложение, а эта структура:
mkCN : CN -> S -> CN -- rule that she sleeps
Относительное предложение имеет тип
RS
в RGL.
Как построить настоящий RS
Здесь я строю RS постепенно. Не стесняйтесь возвращать эти шаги к одному выражению, если хотите, но я считаю, что это более ясно для таких вещей.
oper
last_year_Adv : Adv = ParadigmsEng.mkAdv "last year" ;
published_last_year_VP : VP = mkVP (passiveVP (mkV2 "publish")) last_year_Adv ;
which_is_published_last_year_RCl : RCl = mkRCl which_RP published_last_year_VP ;
which_was_published_last_year_RS : RS = mkRS pastTense which_is_published_last_year_RCl ;
lin
play_TS = mkUtt (mkImp (mkVP
(mkV2 "play")
(mkNP
(mkNP (mkPN "Toy Story"))
which_was_published_last_year_RS)
)
) ;
Теперь, когда мы тестируем его на оболочке GF, мы видим, что, несмотря на название,
which_RP
на самом деле "это".
> l play_TS
play Toy Story , that was published last year
Как заменить "то" на "которое"
Первое, что нужно проверить, когда вы хотите создать новый лексический элемент, - это модуль Paradigms. К сожалению, нет
mkRP
для английского прямо сейчас. Я, конечно, могу добавить это прямо сейчас, но вот общий совет, как быстро все исправить.
Во-первых, давайте посмотрим на линкат
RP
в CatEng,
{s : RCase => Str ; a : RAgr}
. Тогда давайте посмотрим на его реализацию в RelativeEng. Здесь вы также видите объяснение того, почему всегда "то": в отличие от who и which, "that" работает для одушевленных и неодушевленных NP.
Итак, я бы сделал это, чтобы заставить строку "which":
oper
myWhich_RP : RP = which_RP ** {s = table {_ => "which"}} ;
В
**
синтаксис означает расширение записи. Все остальные поля мы используем из оригинала
which_RP
, но в
s
В поле мы помещаем таблицу, все ветви которой содержат строку "which". (Подробнее об этой технике вы можете прочитать в моем блоге.)
Затем мы используем вновь определенный
myWhich_RP
при формировании относительного предложения:
oper
which_is_published_last_year_RCl : RCl = mkRCl myWhich_RP published_last_year_VP ;
А остальной код такой же, как и раньше. Это дает желаемый результат.
> l play_TS
play Toy Story , which was published last year