Next: , Previous: MWE, Up: Grammars


5.30 MWEgen

This is a grammar for English covering the couple of sentences in the paper Multiword expressions as dependency subgraphs (References) for the ACL 2004 Workshop on Multiword Expressions. It uses three graph dimensions: ID and LP (as in TDG) and PA (Predicate Argument). The paper and the grammar were written by Ralph Debusmann.

This is the grammar for the generation direction.

usedim id
usedim lp
usedim pa
usedim lex
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% define dimension id
defdim id {
  %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %% define types
  defentrytype "id.entry"
  deflabeltype "id.label"
  deftype "id.entry" {in: valency("id.label")
                      out: valency("id.label")
                      end: vec("id.label" set("lp.label"))
                      outgroups: vec("id.label" iset("lex.group"))
                      word: string}
  deftype "id.label" {det obj part pcomp pobj pmod subj del root}
  %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %% use principles
  useprinciple "principle.graph" {
    dims {D: id}}
  useprinciple "principle.tree" {
    dims {D: id}}
  useprinciple "principle.valency" {
    dims {D: id}}
  useprinciple "principle.linkingEnd" {
    dims {D1: id
          D2: lp
          D3: id}}
  useprinciple "principle.government1" {
    dims {D: id
          D1: lex}
    args {Agr2: _.D1.entry.group
          Govern: ^.D.entry.outgroups}}
  %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %% use and choose outputs
  output "output.latex"
  output "output.latex1"
  output "output.pretty"
}
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% define dimension lp
defdim lp {
  %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %% define types
  defentrytype "lp.entry"
  deflabeltype "lp.label"
  deftype "lp.entry" {in: valency("lp.label")
                      out: valency("lp.label")
                      on: iset("lp.label")
                      outgroups: vec("lp.label" iset("lex.group"))
                      word: string}
  deftype "lp.label" {subjf finf objf partf pobjf
                      detf nounf pmodf
                      prepf pcompf
                      del root root1}
  %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %% use principles
  useprinciple "principle.graph" {
    dims {D: lp}}
  useprinciple "principle.tree" {
    dims {D: lp}}
  useprinciple "principle.valency" {
    dims {D: lp}}
  useprinciple "principle.order" {
    dims {D: lp}
    args {Order:     [subjf finf objf partf pobjf
                      detf nounf pmodf
                      prepf pcompf
                      del root root1]
          Yields: true}}
  useprinciple "principle.projectivity" {
    dims {D: lp}}
  useprinciple "principle.climbing" {
    dims {D1: lp
          D2: id}}
  useprinciple "principle.government1" {
    dims {D: lp
          D1: lex}
    args {Agr2: _.D1.entry.group
          Govern: ^.D.entry.outgroups}}
  %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %% use and choose outputs
  output "output.latex"
  output "output.latex1"
  output "output.pretty"
}
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% define dimension pa
defdim pa {
  %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %% define types
  defentrytype "pa.entry"
  deflabeltype "pa.label"
  deftype "pa.entry" {in: valency("pa.label")
                      out: valency("pa.label")
                      end: vec("pa.label" set("id.label"))
                      outgroups: vec("pa.label" iset("lex.group"))
                      word: string}
  deftype "pa.label" {arg1 arg2 del root}
  %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %% use principles
  useprinciple "principle.graph" {
    dims {D: pa}}
  useprinciple "principle.tree" {
    dims {D: pa}}
  useprinciple "principle.valency" {
    dims {D: pa}}
  useprinciple "principle.linkingEnd" {
    dims {D1: pa
          D2: id
          D3: pa}}
  useprinciple "principle.government1" {
    dims {D: pa
          D1: lex}
    args {Agr2: _.D1.entry.group
          Govern: ^.D.entry.outgroups}}
  %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %% use and choose outputs
  output "output.latex"
  output "output.latex1"
  output "output.pretty"
}
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% define dimension lex
defdim lex {
  %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %% define types
  deftype "lex.group" {rootg prong
                       date1g date2g
                       argue1g argue2g}
  defentrytype {word: string
                group: "lex.group"}
  %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %% use principles
  useprinciple "principle.entries" {}
  %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %% use and choose outputs
  output "output.dags"
  output "output.dags1"
  output "output.dags2"
  %%
  useoutput "output.dags1"
}
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% lexicon
defclass "ROOT" Word {
  dim id {in: {}
          out: {del* root}
          word: Word}
  dim lp {in: {}
          on: {root1}
          out: {del* root}
          word: Word}
  dim pa {in: {}
          out: {del* root*}
          word: Word}
  dim lex {word: Word
           group: rootg}}

defclass "PRON" Word {
  dim id {in: {root?}
          out: {}
          word: Word}
  dim lp {in: {root?}
          on: {nounf}
          word: Word}
  dim pa {in: {arg1* arg2*}
          word: Word}
  dim lex {word: Word
           group: prong}}

defclass "PRON_NOM" Word {
  "PRON" {Word: Word}
  dim id {in: {subj?}}
  dim lp {in: {subjf?}}}

defclass "PRON_ACC" Word {
  "PRON" {Word: Word}
  dim id {in: {obj? pcomp?}}
  dim lp {in: {objf? pcompf?}}}

defentry { "ROOT" {Word: "."} }

defentry { "PRON_NOM" {Word: "He"} }
defentry { "PRON_ACC" {Word: "her"} }

%% date1: "dates"
defclass "date1g_1" Syn Sem {
  dim id {in: {root?}
          out: {subj obj}
          end: {subj: {subjf}}
          word: Syn}
  dim lp {in: {root?}
          out: {subjf objf}
          on: {finf}
          word: Syn}
  dim pa {in: {root?}
          out: {arg1 arg2}
          end: {arg1: {subj}
                arg2: {obj}}
          word: Sem}
  dim lex {word: Sem
           group: date1g}}

defclass "date1g_2" Syn Sem {
  dim id {in: {del?}
          out: {}
          word: Syn}
  dim lp {in: {del?}
          out: {}
          on: {del}
          word: Syn}
  dim pa {in: {del?}
          out: {}
          word: Sem}
  dim lex {word: Sem
           group: date1g}}

defentry { "date1g_1" {Syn: "dates" Sem: "date1"} }
defentry { "date1g_2" {Syn: "" Sem: "date2"} }

%% date2: "takes out"
defclass "date2g_1" Syn Sem {
  dim id {in: {root?}
          out: {subj obj part}
          end: {subj: {subjf}}
          outgroups: {part: {date2g}}
          word: Syn}
  dim lp {in: {root?}
          out: {subjf objf partf}
          on: {finf}
          outgroups: {partf: {date2g}}
          word: Syn}
  dim pa {in: {root?}
          out: {arg1 arg2}
          end: {arg1: {subj}
                arg2: {obj}}
          word: Sem}
  dim lex {word: Sem
           group: date2g}}

defclass "date2g_2" Syn Sem {
  dim id {in: {part?}
          out: {}
          word: Syn}
  dim lp {in: {partf?}
          out: {}
          on: {partf}
          word: Syn}
  dim pa {in: {del?}
          out: {}
          word: Sem}
  dim lex {word: Sem
           group: date2g}}

defentry { "date2g_1" {Syn: "takes" Sem: "date1"} }
defentry { "date2g_2" {Syn: "out" Sem: "date2"} }

%% argues with
defclass "argue1g_1" Syn Sem {
  dim id {in: {root?}
          out: {subj pobj}
          outgroups: {pobj: {argue1g}}
          word: Syn}
  dim lp {in: {root?}
          out: {subjf pobjf}
          on: {finf}
          outgroups: {pobjf: {argue1g}}
          word: Syn}
  dim pa {in: {root?}
          out: {arg1 arg2}
          end: {arg1: {subj}
                arg2: {pcomp}}
          word: Sem}
  dim lex {word: Sem
           group: argue1g}}

defclass "argue1g_2" Syn Sem {
  dim id {in: {pobj?}
          out: {pcomp}
          word: Syn}
  dim lp {in: {pobjf?}
          out: {pcompf}
          on: {prepf}
          word: Syn}
  dim pa {in: {del?}
          out: {}
          word: Sem}
  dim lex {word: Sem
           group: argue1g}}

defclass "argue1g_3" Syn Sem {
  dim id {in: {del?}
          out: {}
          word: Syn}
  dim lp {in: {del?}
          out: {}
          on: {del}
          word: Syn}
  dim pa {in: {del?}
          out: {}
          word: Sem}
  dim lex {word: Sem
           group: argue1g}}

defclass "argue1g_4" Syn Sem {
  dim id {in: {del?}
          out: {}
          word: Syn}
  dim lp {in: {del?}
          out: {}
          on: {del}
          word: Syn}
  dim pa {in: {del?}
          out: {}
          word: Sem}
  dim lex {word: Sem
           group: argue1g}}

defentry { "argue1g_1" {Syn: "argues" Sem: "argue1"} }
defentry { "argue1g_2" {Syn: "with" Sem: "argue2"} }
defentry { "argue1g_3" {Syn: "" Sem: "argue3"} }
defentry { "argue1g_4" {Syn: "" Sem: "argue4"} }

%% has an argument with
defclass "argue2g_1" Syn Sem {
  dim id {in: {root?}
          out: {subj obj}
          end: {subj: {subjf}}
          outgroups: {obj: {argue2g}}
          word: Syn}
  dim lp {in: {root?}
          out: {subjf objf}
          on: {finf}
          outgroups: {objf: {argue2g}}
          word: Syn}
  dim pa {in: {del?}
          out: {}
          word: Sem}
  dim lex {word: Sem
           group: argue2g}}

defclass "argue2g_2" Syn Sem {
  dim id {in: {det?}
          out: {}
          word: Syn}
  dim lp {in: {detf?}
          out: {}
          on: {detf}
          word: Syn}
  dim pa {in: {del?}
          out: {}
          word: Sem}
  dim lex {word: Sem
           group: argue2g}}

defclass "argue2g_3" Syn Sem {
  dim id {in: {obj?}
          out: {det pmod}
          outgroups: {det: {argue2g}
                      pmod: {argue2g}}
          word: Syn}
  dim lp {in: {objf?}
          out: {detf pmodf}
          on: {nounf}
          outgroups: {detf: {argue2g}
                      pmodf: {argue2g}}
          word: Syn}
  dim pa {in: {root?}
          out: {arg1 arg2}
          end: {arg1: {subj}
                    arg2: {pcomp}}
          word: Sem}
  dim lex {word: Sem
           group: argue2g}}

defclass "argue2g_4" Syn Sem {
  dim id {in: {pmod?}
          out: {pcomp}
          word: Syn}
  dim lp {in: {pmodf?}
          out: {pcompf}
          on: {prepf}
          word: Syn}
  dim pa {in: {del?}
          out: {}
          word: Sem}
  dim lex {word: Sem
           group: argue2g}}

defentry { "argue2g_1" {Syn: "has" Sem: "argue1"} }
defentry { "argue2g_2" {Syn: "an" Sem: "argue2"} }
defentry { "argue2g_3" {Syn: "argument" Sem: "argue3"} }
defentry { "argue2g_4" {Syn: "with" Sem: "argue4"} }