Index: branches/apertium-separable/src/transducer.cpp =================================================================== --- branches/apertium-separable/src/transducer.cpp (revision 80298) +++ branches/apertium-separable/src/transducer.cpp (revision 80299) @@ -48,15 +48,15 @@ int initial = t.getInitial(); int take_out = initial; //0 - take_out = t.insertSingleTransduction(alphabet(L't',L't'), take_out); //1 - take_out = t.insertSingleTransduction(alphabet(L'a',L'a'), take_out); //2 - take_out = t.insertSingleTransduction(alphabet(L'k',L'k'), take_out); //3 - take_out = t.insertSingleTransduction(alphabet(L'e',L'e'), take_out); //4 - take_out = t.insertSingleTransduction(alphabet(0,L'#'), take_out); //5 - take_out = t.insertSingleTransduction(alphabet(0,L' '), take_out); //6 - take_out = t.insertSingleTransduction(alphabet(0,L'o'), take_out); //7 - take_out = t.insertSingleTransduction(alphabet(0,L'u'), take_out); //8 - take_out = t.insertSingleTransduction(alphabet(0,L't'), take_out); //9 + take_out = t.insertSingleTransduction(alphabet(L't',L't'), take_out); + take_out = t.insertSingleTransduction(alphabet(L'a',L'a'), take_out); + take_out = t.insertSingleTransduction(alphabet(L'k',L'k'), take_out); + take_out = t.insertSingleTransduction(alphabet(L'e',L'e'), take_out); + take_out = t.insertSingleTransduction(alphabet(0,L'#'), take_out); + take_out = t.insertSingleTransduction(alphabet(0,L' '), take_out); + take_out = t.insertSingleTransduction(alphabet(0,L'o'), take_out); + take_out = t.insertSingleTransduction(alphabet(0,L'u'), take_out); + take_out = t.insertSingleTransduction(alphabet(0,L't'), take_out); take_out = t.insertSingleTransduction(alphabet(vblex_sym,vblex_sym), take_out); int loop = take_out; take_out = t.insertSingleTransduction(alphabet(any_tag,any_tag), loop); @@ -63,40 +63,92 @@ t.linkStates(take_out, loop, 0); take_out = t.insertSingleTransduction(alphabet(wb_sym,wb_sym), take_out); - int reset = take_out; + /* noun phrase acceptor: + n + prn + det.* n.* + adj. n.* + adj.* n.* + det.* adj n.* + adj.* adj.* n.* + prn.pers.* + prn.dem.* + */ + int after_takeout = take_out; - /* nothing */ + /* no np */ + take_out = after_takeout; + loop = take_out; + take_out = t.insertSingleTransduction(alphabet(0,0), loop); + t.linkStates(take_out, loop, 0); + /* first lemma in the np */ + loop = take_out; + take_out = t.insertSingleTransduction(alphabet(any_char,any_char), loop); + t.linkStates(take_out, loop, 0); - /* n */ - take_out = reset; + /* no modifier */ + int modifier = take_out; + take_out = modifier; loop = take_out; - int none = take_out; + take_out = t.insertSingleTransduction(alphabet(0,0), loop); + t.linkStates(take_out, loop, 0); + int from_nomod = take_out; + + /* det */ + take_out = modifier; + take_out = t.insertSingleTransduction(alphabet(det_sym,det_sym), take_out); + + loop = take_out; + take_out = t.insertSingleTransduction(alphabet(any_tag,any_tag), loop); + t.linkStates(take_out, loop, 0); + + take_out = t.insertSingleTransduction(alphabet(wb_sym,wb_sym), take_out); + + loop = take_out; take_out = t.insertSingleTransduction(alphabet(any_char,any_char), loop); - none = t.insertSingleTransduction(alphabet(0,0), none); t.linkStates(take_out, loop, 0); - t.linkStates(none, loop, 0); - take_out = t.insertSingleTransduction(alphabet(n_sym,n_sym), take_out); - none = t.insertSingleTransduction(alphabet(0,0), none); + int from_det = take_out; + /* adj */ + take_out = modifier; + take_out = t.insertSingleTransduction(alphabet(adj_sym,adj_sym), take_out); + loop = take_out; - none = take_out; take_out = t.insertSingleTransduction(alphabet(any_tag,any_tag), loop); - none = t.insertSingleTransduction(alphabet(0,0), none); t.linkStates(take_out, loop, 0); - t.linkStates(none, loop, 0); + //may not have a second tag + take_out = t.insertSingleTransduction(alphabet(0,0), take_out); + take_out = t.insertSingleTransduction(alphabet(wb_sym,wb_sym), take_out); - none = t.insertSingleTransduction(alphabet(0,0), none); + take_out = t.insertSingleTransduction(alphabet(wb_sym,wb_sym), take_out-1); - /* pr */ - take_out = reset; - //same as n except with pr_sym + loop = take_out; + take_out = t.insertSingleTransduction(alphabet(any_char,any_char), loop); + t.linkStates(take_out, loop, 0); + int from_adj = take_out; + /* n */ + take_out = from_nomod; + take_out = t.insertSingleTransduction(alphabet(n_sym,n_sym), take_out); + take_out = from_det; + take_out = t.insertSingleTransduction(alphabet(n_sym,n_sym), take_out); + + take_out = from_adj; + take_out = t.insertSingleTransduction(alphabet(n_sym,n_sym), take_out); + + loop = take_out; + take_out = t.insertSingleTransduction(alphabet(any_tag,any_tag), loop); + t.linkStates(take_out, loop, 0); + + take_out = t.insertSingleTransduction(alphabet(wb_sym,wb_sym), take_out); + + /* out */ take_out = t.insertSingleTransduction(alphabet(L'o',0), take_out); take_out = t.insertSingleTransduction(alphabet(L'u',0), take_out); take_out = t.insertSingleTransduction(alphabet(L't',0), take_out); @@ -103,6 +155,38 @@ take_out = t.insertSingleTransduction(alphabet(any_tag, 0), take_out); take_out = t.insertSingleTransduction(alphabet(wb_sym,0), take_out); + /* pr */ + // take_out = reset; + // + // loop = take_out; + // int none = take_out; + // take_out = t.insertSingleTransduction(alphabet(any_char,any_char), loop); + // none = t.insertSingleTransduction(alphabet(0,0), none); + // t.linkStates(take_out, loop, 0); + // t.linkStates(none, loop, 0); + // + // take_out = t.insertSingleTransduction(alphabet(n_sym,n_sym), take_out); + // none = t.insertSingleTransduction(alphabet(0,0), none); + // + // loop = take_out; + // none = take_out; + // take_out = t.insertSingleTransduction(alphabet(any_tag,any_tag), loop); + // none = t.insertSingleTransduction(alphabet(0,0), none); + // t.linkStates(take_out, loop, 0); + // t.linkStates(none, loop, 0); + // + // take_out = t.insertSingleTransduction(alphabet(wb_sym,wb_sym), take_out); + // none = t.insertSingleTransduction(alphabet(0,0), none); + // + // take_out = t.insertSingleTransduction(alphabet(L'o',0), take_out); + // take_out = t.insertSingleTransduction(alphabet(L'u',0), take_out); + // take_out = t.insertSingleTransduction(alphabet(L't',0), take_out); + // take_out = t.insertSingleTransduction(alphabet(any_tag, 0), take_out); + // take_out = t.insertSingleTransduction(alphabet(wb_sym,0), take_out); + + + + t.setFinal(take_out); FILE* fst = fopen("takeout.fst", "w+");