%%% Transforms the Prolog format output of the CCG parser to %%% treebankviewer format %%% In directory candc/ %%% Input: test.txt Output: test.pl %%% Command: %%% bin/pos --model models/pos --input test.txt | %%% bin/parser --parser models/parser --super models/super %%% --printer prolog > test.pl %%% sem(S#,T) tree stored in T %%% word(S#,W#,Word,Tag,STag) words stored here %%% %%% Cases %%% %%% other(right_punc/leftpunc,C,T1,T2) eat punctuation %%% other(misc,C,T1,T2) "funny stuff" %%% bapp(C,T1,T2) backward application %%% fapp(C,T1,T2) forward application %%% lex(C,Cp,T) lexical rule (type change) %%% leaf(#,Word#,C) lexeme %%% bcomp(C,T1,T2) backward composition %%% fcomp(C,T1,T2) forward composition %%% tr(C,T) type raising %%% bcross(C,T1,T2) backwards cross composition %%% conj(Type,Ct,C,Tc,T) conjunction %%% treebankviewer external format %%% n(C,_,_..,_) %%% %%% treebankviewer internal format %%% [C,[...]] %%% [[C,Word]] uses 2ndline %%% [[C,[],MSText]...] MSText for the mouseoverline % if a sentence has no parse no corresponding sem/2 clause is present % need to detect a gap convertall :- max(K), nTo(N,K), (convert(N) -> true ; format('tree(notree).~n',[])), fail. convertall. nTo(X,K) :- K > 1, K1 is K-1, nTo(X,K1) ; X = K. max(K) :- findall(X,sem(X,_),L), sort(L,LS), last(LS,K), !. last([X],X). last([_|L],X) :- last(L,X). convert(S) :- sem(S,T), (convert(T,Tp,S) -> format('tree(~q).~n',[Tp]) ; format('Fail on ~d~n',[S]), fail). %%% External converte(other(_,C,T1,T2),n(C,V1,V2),S) :- converte(T1,V1,S), converte(T2,V2,S). converte(bapp(C,T1,T2),n(C,V1,V2),S) :- converte(T1,V1,S), converte(T2,V2,S). converte(fapp(C,T1,T2),n(C,V1,V2),S) :- converte(T1,V1,S), converte(T2,V2,S). converte(bcomp(C,T1,T2),n(C,V1,V2),S) :- converte(T1,V1,S), converte(T2,V2,S). converte(fcomp(C,T1,T2),n(C,V1,V2),S) :- converte(T1,V1,S), converte(T2,V2,S). converte(bcross(C,T1,T2),n(C,V1,V2),S) :- converte(T1,V1,S), converte(T2,V2,S). converte(conj(_,_,C,T1,T2),n(C,V1,V2),S) :- converte(T1,V1,S), converte(T2,V2,S). converte(tr(C,T),n(C,V),S) :- converte(T,V,S). converte(lex(_,C,T),n(C,V),S) :- converte(T,V,S). % _C and C may not be the same % e.g. (S[X]NP)(S[X]NP) vs. (S\NP)\(S\NP) converte(leaf(S,N,_C),n(C,n(Tag,Word)),S) :- word(S,N,Word,Tag,C). %%% Internal %%% %%% olivedrab other %%% blue backward application %%% Firebrick2 forward application %%% Brown backward composition %%% ForestGreen forward composition %%% BlueViolet backward cross composition %%% CornflowerBlue conjunction %%% Thistle type raising %%% Tan type change convert(other(_,C,T1,T2),[[C,[],olivedrab],[V1,V2]],S) :- convert(T1,V1,S), convert(T2,V2,S). convert(bapp(C,T1,T2),[[C,[],blue],[V1,V2]],S) :- convert(T1,V1,S), convert(T2,V2,S). convert(fapp(C,T1,T2),[[C,[],firebrick2],[V1,V2]],S) :- convert(T1,V1,S), convert(T2,V2,S). convert(bcomp(C,T1,T2),[[C,[],brown],[V1,V2]],S) :- convert(T1,V1,S), convert(T2,V2,S). convert(fcomp(C,T1,T2),[[C,[],forestgreen],[V1,V2]],S) :- convert(T1,V1,S), convert(T2,V2,S). convert(bcross(C,T1,T2),[[C,[],blueviolet],[V1,V2]],S) :- convert(T1,V1,S), convert(T2,V2,S). convert(conj(_,_,C,T1,T2),[[C,[],cornflowerblue],[V1,V2]],S) :- convert(T1,V1,S), convert(T2,V2,S). convert(tr(C,T),[[C,[],thistle],[V]],S) :- convert(T,V,S). convert(lex(_,C,T),[[C,[],tan],[V]],S) :- convert(T,V,S). convert(leaf(S,N,_C),[C,[[[Tag,Word]]]],S) :- word(S,N,Word,Tag,C).