% Maptask templates
% Torbjörn Lager and Natalia Zinovjeva, 1999
% Note that we look at the current and preceding context only...
da:A>B <- u_mem:W@[0].
da:A>B <- u_first:W@[0].
da:A>B <- u_last:W@[0].
da:A>B <- u_bigram:W@[0].
da:A>B <- da:C@[-1].
da:A>B <- da:C@[-1,-2].
da:A>B <- da:C@[-1] & da:D@[-2].
da:A>B <- da:C@[-1] & u_mem:W@[0].
da:A>B <- s:C@[0].
da:A>B <- s:C@[0] & u_mem:W@[0].
da:A>B <- s:C@[0] & u_bigram:W@[0].
da:A>B <- s:C@[0] & da:D@[-1].
da:A>B <- s_change:C@[0] & u_mem:W@[0].
da:A>B <- s_change:C@[0] & da:D@[-1].
da:A>B <- u_length:C@[0] & u_mem:W@[0].
da:A>B <- u_length:C@[0] & da:D@[-1].
% Auxiliary predicates
:- use_module(library(lists)).
u_mem(P,W) :-
u(P,Ws),
member(W,Ws).
u_first(P,W) :-
u(P,[W|_]).
u_last(P,W) :-
u(P,Ws),
last(Ws,W).
u_bigram(P,(Wi,Wj)) :-
u(P,Ws),
nextto(Wi,Wj,Ws).
s_change(P,V) :-
( s(P,A),
P1 is P-1,
s(P1,A)
-> V = false
; V = true
).
u_length(P,Length) :-
u(P,Ws),
length(Ws,N),
( N == 1
-> Length = '1'
; N == 2
-> Length = '2'
; N == 3
-> Length = '3'
; N > 3,
N =< 10
-> Length = '>3'
; Length = '>10'
).