Next: Entries, Previous: Dag, Up: Principles list
principle.dutch
D1, D2
Dutch (priority 110)
This principle assumes that the Graph principle (Graph) is used on
dimensions D1 and D2. It also assumes that an order
principle is used on D1, and that the set of edge labels on
D2 contains subj, iobj and obj.
The dutch principle is fairly specialized, and so far only used in the Dutch grammar (Dutch). It posits the conjunction of the following two constraints:
subj) daughter of v
precedes the indirect object (iobj) daughter, which in turn
precedes the direct object daughter (obj).
subj, iobj or obj) precede the set of noun
daughters of v
Here is the definition of the Dutch constraint functor:
%% Copyright 2001-2008
%% by Ralph Debusmann <rade@ps.uni-sb.de> (Saarland University) and
%% Denys Duchier <duchier@ps.uni-sb.de> (LIFO, Orleans) and
%% Jorge Marques Pelizzoni <jpeliz@icmc.usp.br> (ICMC, Sao Paulo) and
%% Jochen Setz <info@jochensetz.de> (Saarland University)
%%
functor
import
% System(show)
Helpers(checkModel) at 'Helpers.ozf'
export
Constraint
define
NounLAs = [subj iobj obj]
%%
proc {Constraint Nodes G Principle FD FS Select}
DVA2DIDA = Principle.dVA2DIDA
%%
D2DIDA = {DVA2DIDA 'D2'} %% id
in
%% MfOrder3 principle (xdg/parser/dg/Plugins-nl.oz)
%% subj < iobj < obj
if {Helpers.checkModel 'Dutch.oz' Nodes
[D2DIDA#daughtersL]} then
PosMs = {Map Nodes
fun {$ Node} Node.pos end}
in
for Node in Nodes do
PosNounsDaughterMs =
{Map NounLAs
fun {$ LA}
M = Node.D2DIDA.model.daughtersL.LA
in
{Select.union PosMs M}
end}
in
{FS.int.seq PosNounsDaughterMs}
end
end
%% MfOrder4 principle (xdg/parser/dg/Plugins-nl.oz)
if {Helpers.checkModel 'Dutch.oz' Nodes
[D2DIDA#daughtersL
D2DIDA#up]} then
PosMs = {Map Nodes
fun {$ Node} Node.pos end}
%%
NounDaughtersMs =
{Map Nodes
fun {$ Node}
Ms = {Map NounLAs
fun {$ LA} Node.D2DIDA.model.daughtersL.LA end}
M = {FS.unionN Ms}
in
M
end}
in
for Node in Nodes I in 1..{Length Nodes} do
NounDaughtersUpM =
{Select.union NounDaughtersMs Node.D2DIDA.model.up}
PosNounDaughtersUpM = {Select.union PosMs NounDaughtersUpM}
%%
NounDaughtersM = {Nth NounDaughtersMs I}
PosNounDaughtersM = {Select.union PosMs NounDaughtersM}
in
{FS.int.seq [PosNounDaughtersUpM PosNounDaughtersM]}
end
end
end
end