Относительное предложение (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
Другие вопросы по тегам