package extractors; import is2.data.*; import java.util.Arrays; final public class ExtractorClusterStackedR2 implements Extractor { public static int s_rel, s_word, s_type, s_dir, s_dist, s_feat, s_child, s_spath, s_lpath, s_pos; MFB mf; final D4 d0, dl1, dl2, dwr, dr, dwwp, dw, dwp, dlf, d3lp, d2lp, d2pw, d2pp; public final Long2IntInterface li; public ExtractorClusterStackedR2(Long2IntInterface li) { initFeatures(); this.li = li; d0 = new D4(li); dl1 = new D4(li); dl2 = new D4(li); dwr = new D4(li); dr = new D4(li); dwwp = new D4(li); dw = new D4(li); dwp = new D4(li); dlf = new D4(li); d3lp = new D4(li); d2lp = new D4(li); d2pw = new D4(li); d2pp = new D4(li); } @Override public void initStat() { mf = new MFB(); s_rel = mf.getFeatureCounter().get(REL).intValue(); s_pos = mf.getFeatureCounter().get(POS).intValue(); s_word = mf.getFeatureCounter().get(WORD).intValue(); s_type = mf.getFeatureCounter().get(TYPE).intValue();//mf.getFeatureBits(); s_dir = mf.getFeatureCounter().get(DIR); la = mf.getValue(DIR, LA); ra = mf.getValue(DIR, RA); s_dist = mf.getFeatureCounter().get(DIST);//mf.getFeatureBits(DIST); s_feat = mf.getFeatureCounter().get(FEAT);//mf.getFeatureBits(Pipe.FEAT); s_spath = mf.getFeatureCounter().get(Cluster.SPATH) == null ? 0 : mf.getFeatureCounter().get(Cluster.SPATH);//mf.getFeatureBits(Cluster.SPATH); s_lpath = mf.getFeatureCounter().get(Cluster.LPATH) == null ? 0 : mf.getFeatureCounter().get(Cluster.LPATH);//mf.getFeatureBits(Cluster.LPATH); } @Override public void init() { // DB.println("init"); d0.a0 = s_type; d0.a1 = s_pos; d0.a2 = s_pos; d0.a3 = s_pos; d0.a4 = s_pos; d0.a5 = s_pos; d0.a6 = s_pos; d0.a7 = s_pos; dl1.a0 = s_type; dl1.a1 = s_rel; dl1.a2 = s_pos; dl1.a3 = s_pos; dl1.a4 = s_pos; dl1.a5 = s_pos; dl1.a6 = s_pos; dl1.a7 = s_pos; dl2.a0 = s_type; dl2.a1 = s_rel; dl2.a2 = s_word; dl2.a3 = s_pos; dl2.a4 = s_pos; dl2.a5 = s_pos; dl2.a6 = s_pos; dl2.a7 = s_pos; dwp.a0 = s_type; dwp.a1 = s_rel; dwp.a2 = s_word; dwp.a3 = s_pos; dwp.a4 = s_pos; dwp.a5 = s_word; dwwp.a0 = s_type; dwwp.a1 = s_rel; dwwp.a2 = s_word; dwwp.a3 = s_word; dwwp.a4 = s_pos; dwwp.a5 = s_word; dlf.a0 = s_type; dlf.a1 = s_rel; dlf.a2 = s_pos; dlf.a3 = s_pos; dlf.a4 = s_feat; dlf.a5 = s_feat; dlf.a6 = s_pos; dlf.a7 = s_pos; d3lp.a0 = s_type; d3lp.a1 = s_rel; d3lp.a2 = s_lpath; d3lp.a3 = s_lpath; d3lp.a4 = s_lpath; d3lp.a5 = s_word; d3lp.a6 = s_spath; d3lp.a7 = s_spath; d2lp.a0 = s_type; d2lp.a1 = s_rel; d2lp.a2 = s_lpath; d2lp.a3 = s_lpath; d2lp.a4 = s_word; d2lp.a5 = s_word; //d3lp.a6 = s_spath; d3lp.a7 = s_spath; d2pw.a0 = s_type; d2pw.a1 = s_rel; d2pw.a2 = s_lpath; d2pw.a3 = s_lpath; d2pw.a4 = s_word; d2pw.a5 = s_word; //d3lp.a6 = s_spath; d3lp.a7 = s_spath; d2pp.a0 = s_type; d2pp.a1 = s_rel; d2pp.a2 = s_lpath; d2pp.a3 = s_lpath; d2pp.a4 = s_pos; d2pp.a5 = s_pos; //d3lp.a6 = s_spath; d3lp.a7 = s_spath; } @Override public int basic(short[] pposs, int[] form, int p, int d, Cluster cluster, IFV f) { d0.clean(); dl1.clean(); dl2.clean(); dwp.clean(); dwwp.clean(); dlf.clean(); d3lp.clean(); d3lp.clean(); d2lp.clean(); d2pw.clean(); d2pp.clean(); int n = 1; int dir = (p < d) ? ra : la; // d0.v0= n; d0.v1=pposs[p]; d0.v2=pposs[d]; //d0.stop=4; int end = (p >= d ? p : d); int start = (p >= d ? d : p) + 1; StringBuilder s = new StringBuilder(end - start); int[] x = new int[end - start]; int c = 0; for (int i = start; i < end; i++) { //d0.v3=pposs[i]; //d0.cz4(); //d0.csa(s_dir,dir,f); // s.append((char)pposs[i]); x[c++] = pposs[i]; } Arrays.sort(x); for (int i = 0; i < x.length; i++) { if (i == 0 || x[i] != x[i - 1]) { s.append(x[i]); } } int v = mf.register("px", s.toString()); dwp.v0 = n++; dwp.v1 = 1; dwp.v2 = v; dwp.v3 = pposs[p]; dwp.v4 = pposs[d]; dwp.cz5(); dwp.csa(s_dir, dir, f); return n; } @Override public void firstm(Instances is, int i, int prnt, int dpnt, int label, Cluster cluster, long[] f) { //short[] pposs, int[] form, int[] lemmas, short[][] feats for (int k = 0; k < f.length; k++) { f[k] = 0; } short[] pposs = is.pposs[i]; int[] form = is.forms[i]; short[][] feats = is.feats[i]; int pF = form[prnt], dF = form[dpnt]; int pL = is.plemmas[i][prnt], dL = is.plemmas[i][dpnt]; int pP = pposs[prnt], dP = pposs[dpnt]; int prntLS = pF == -1 ? -1 : cluster.getLP(pF), chldLS = dF == -1 ? -1 : cluster.getLP(dF); final int dir = (prnt < dpnt) ? ra : la; if (pF > maxForm) { pF = -1; } if (pL > maxForm) { pL = -1; } if (dF > maxForm) { dF = -1; } if (dL > maxForm) { dL = -1; } int n = 3, c = 0; dl2.v1 = label; dl2.v0 = n++; dl2.v2 = pF; dl2.v3 = dP; dl2.cz4(); f[c++] = dl2.csa(s_dir, dir); dl2.v0 = n++; dl2.cz3(); f[c++] = dl2.csa(s_dir, dir); dl2.v0 = n++; dl2.v2 = dF; dl2.v3 = pP; dl2.cz4(); f[c++] = dl2.csa(s_dir, dir); dl2.v0 = n++; dl2.cz3(); f[c++] = dl2.csa(s_dir, dir); dwwp.v1 = label; dwwp.v0 = n++; dwwp.v2 = pF; dwwp.v3 = dF; dwwp.cz4(); f[c++] = dwwp.csa(s_dir, dir); dl1.v1 = label; dl1.v0 = n++; dl1.v2 = dP; dl1.cz3(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = pP; dl1.cz3(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v3 = dP; dl1.cz4(); f[c++] = dl1.csa(s_dir, dir); int pPm1 = prnt > 0 ? pposs[prnt - 1] : s_str, dPm1 = dpnt > 0 ? pposs[dpnt - 1] : s_str; int pPp1 = prnt < pposs.length - 1 ? pposs[prnt + 1] : s_end, dPp1 = dpnt < pposs.length - 1 ? pposs[dpnt + 1] : s_end; int pPm2 = prnt > 1 ? pposs[prnt - 2] : s_str, dPm2 = dpnt > 1 ? pposs[dpnt - 2] : s_str; int pPp2 = prnt < pposs.length - 2 ? pposs[prnt + 2] : s_end, dPp2 = dpnt < pposs.length - 2 ? pposs[dpnt + 2] : s_end; int pFm1 = prnt > 0 ? form[prnt - 1] : s_stwrd, dFm1 = dpnt > 0 ? form[dpnt - 1] : s_stwrd; int pFp1 = prnt < form.length - 1 ? form[prnt + 1] : s_stwrd, dFp1 = dpnt < form.length - 1 ? form[dpnt + 1] : s_stwrd; dl1.v0 = n++; dl1.v2 = pP; dl1.v3 = pPp1; dl1.v4 = dP; dl1.v5 = dPp1; dl1.cz6(); f[n++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v5 = dPm1; dl1.cz6(); f[n++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v3 = pPm1; dl1.cz6(); f[n++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v5 = dPp1; dl1.cz6(); f[n++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v3 = pPm1; dl1.cz5(); f[n++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v3 = dPm1; dl1.cz5(); f[n++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v3 = dPp1; dl1.cz5(); f[n++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v3 = pPp1; dl1.cz5(); f[n++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = pP; dl1.v3 = pPp2; dl1.v4 = dP; dl1.v5 = dPp2; dl1.cz6(); f[n++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v5 = dPm2; dl1.cz6(); f[n++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v3 = pPm2; dl1.cz6(); f[n++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v5 = dPp2; dl1.cz6(); f[n++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v3 = pPm2; dl1.cz5(); f[n++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v3 = dPm2; dl1.cz5(); f[n++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v3 = dPp2; dl1.cz5(); f[n++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v3 = pPp2; dl1.cz5(); f[n++] = dl1.csa(s_dir, dir); dl2.v0 = n++; dl2.v3 = dFm1; dl2.v3 = pPp1; dl2.v4 = pP; dl2.cz5(); f[n++] = dl2.getVal(); dl2.v0 = n++; dl2.v3 = dFp1; dl2.v3 = pPm1; dl2.cz5(); f[n++] = dl2.getVal(); dl2.v0 = n++; dl2.v3 = pFm1; dl2.v3 = dPp1; dl2.v4 = dP; dl2.cz5(); f[n++] = dl2.getVal(); dl2.v0 = n++; dl2.v3 = pFp1; dl2.v3 = dPm1; dl2.cz5(); f[n++] = dl2.getVal(); dl2.v0 = n++; dl2.v3 = dFm1; dl2.v3 = dPm2; dl2.v4 = pP; dl2.cz5(); f[n++] = dl2.getVal(); dl2.v0 = n++; dl2.v3 = dFp1; dl2.v3 = dPp2; dl2.cz5(); f[n++] = dl2.getVal(); dl2.v0 = n++; dl2.v3 = pFm1; dl2.v3 = pPm2; dl2.v4 = dP; dl2.cz5(); f[n++] = dl2.getVal(); dl2.v0 = n++; dl2.v3 = pFp1; dl2.v3 = pPp2; dl2.cz5(); f[n++] = dl2.getVal(); dwwp.v0 = n++; dwwp.v2 = pF; dwwp.v3 = dF; dwwp.v4 = dP; dwwp.cz5(); f[n++] = dwwp.csa(s_dir, dir); dwwp.v0 = n++; dwwp.v2 = pF; dwwp.v3 = dF; dwwp.v4 = pP; dwwp.cz5(); f[n++] = dwwp.csa(s_dir, dir); dwwp.v0 = n++; dwwp.v2 = dF; dwwp.v3 = pF; dwwp.v4 = pP; dwwp.v4 = dP; dwwp.cz6(); f[n++] = dwwp.csa(s_dir, dir); // lemmas dl2.v1 = label; dl2.v0 = n++; dl2.v2 = pL; dl2.v3 = dP; dl2.cz4(); f[c++] = dl2.csa(s_dir, dir); dl2.v0 = n++; dl2.cz3(); f[c++] = dl2.csa(s_dir, dir); dl2.v0 = n++; dl2.v2 = dL; dl2.v3 = pP; dl2.cz4(); f[c++] = dl2.csa(s_dir, dir); dl2.v0 = n++; dl2.cz3(); f[c++] = dl2.csa(s_dir, dir); dwwp.v1 = label; dwwp.v0 = n++; dwwp.v2 = pL; dwwp.v3 = dL; dwwp.cz4(); f[c++] = dwwp.csa(s_dir, dir); dwp.v1 = label; dwp.v0 = n++; dwp.v2 = dL; dwp.v3 = pP; dwp.v4 = dP; dwp.v5 = pL; dwp.cz6(); f[c++] = dwp.csa(s_dir, dir); dwp.v0 = n++; dwp.cz5(); f[c++] = dwp.csa(s_dir, dir); dwp.v0 = n++; dwp.v2 = pL; dwp.cz5(); f[c++] = dwp.csa(s_dir, dir); dwwp.v0 = n++; dwwp.v2 = pL; dwwp.v3 = dL; dwwp.v4 = dP; dwwp.cz5(); f[c++] = dwwp.csa(s_dir, dir); dwwp.v0 = n++; dwwp.v4 = pP; dwwp.cz5(); f[c++] = dwwp.csa(s_dir, dir); // cluster d2pw.v1 = label; d2pw.v0 = n++; d2pw.v2 = prntLS; d2pw.v3 = chldLS; d2pw.cz4(); f[c++] = d2pw.csa(s_dir, dir); d2pw.v0 = n++; d2pw.v4 = pF; d2pw.cz5(); f[c++] = d2pw.csa(s_dir, dir); d2pw.v0 = n++; d2pw.v4 = dF; d2pw.cz5(); f[c++] = d2pw.csa(s_dir, dir); d2pw.v0 = n++; d2pw.v5 = pF; d2pw.cz6(); f[c++] = d2pw.csa(s_dir, dir); d2pp.v1 = label; d2pp.v0 = n++; d2pp.v2 = prntLS; d2pp.v3 = chldLS; d2pp.cz4(); f[c++] = d2pp.csa(s_dir, dir); d2pp.v0 = n++; d2pp.v4 = pP; d2pp.cz5(); f[c++] = d2pp.csa(s_dir, dir); d2pp.v0 = n++; d2pp.v4 = dP; d2pp.cz5(); f[c++] = d2pp.csa(s_dir, dir); d2pp.v0 = n++; d2pp.v5 = pP; d2pp.cz6(); f[c++] = d2pp.csa(s_dir, dir); short[] prel = is.plabels[i]; short[] phead = is.pheads[i]; //take those in for stacking // dl2.v1=label; // dl2.v0= n++;dl2.v2=prel[dpnt];dl2.v3=pP;dl2.v4=dP; dl2.v5=prnt==phead[dpnt]?1:2; dl2.cz6(); f[c++]=dl2.csa(s_dir,dir); // dl2.v0= n++;dl2.v2=pP;dl2.v3=dP; dl2.v4=prnt==phead[dpnt]?1:2; dl2.cz5(); f[c++]=dl2.csa(s_dir,dir); if (feats == null) { return; } short[] featsP = feats[prnt], featsD = feats[dpnt]; dlf.v0 = n++; dlf.v1 = label; dlf.v2 = pP; dlf.v3 = dP; extractFeat(f, c, dir, featsP, featsD); } @Override public void gcm(Instances is, int i, int p, int d, int gc, int label, Cluster cluster, long[] f) { for (int k = 0; k < f.length; k++) { f[k] = 0; } short[] pos = is.pposs[i]; int[] forms = is.forms[i]; int[] lemmas = is.plemmas[i]; short[][] feats = is.feats[i]; int pP = pos[p], dP = pos[d]; int prntF = forms[p], chldF = forms[d]; int prntL = lemmas[p], chldL = lemmas[d]; int prntLS = prntF == -1 ? -1 : cluster.getLP(prntF), chldLS = chldF == -1 ? -1 : cluster.getLP(chldF); int gP = gc != -1 ? pos[gc] : s_str; int gcF = gc != -1 ? forms[gc] : s_stwrd; int gcL = gc != -1 ? lemmas[gc] : s_stwrd; int gcLS = (gc != -1) && (gcF != -1) ? cluster.getLP(gcF) : s_stwrd; if (prntF > maxForm) { prntF = -1; } if (prntL > maxForm) { prntL = -1; } if (chldF > maxForm) { chldF = -1; } if (chldL > maxForm) { chldL = -1; } if (gcF > maxForm) { gcF = -1; } if (gcL > maxForm) { gcL = -1; } int dir = (p < d) ? ra : la, dir_gra = (d < gc) ? ra : la; int n = 84, c = 0; //dl1.v023(); dl1.v1 = label; dl1.v0 = n++; dl1.v2 = pP; dl1.v3 = dP; dl1.v4 = gP; dl1.cz5(); dl1.cs(s_dir, dir); f[c++] = dl1.csa(s_dir, dir_gra); dl1.v0 = n++; dl1.v2 = pP; dl1.v3 = gP; dl1.cz4(); dl1.cs(s_dir, dir); f[c++] = dl1.csa(s_dir, dir_gra); dl1.v0 = n++; dl1.v2 = dP; dl1.cz4(); dl1.cs(s_dir, dir); f[c++] = dl1.csa(s_dir, dir_gra); dwwp.v1 = label; dwwp.v0 = n++; dwwp.v2 = prntF; dwwp.v3 = gcF; dwwp.cz4(); dwwp.cs(s_dir, dir); f[c++] = dwwp.csa(s_dir, dir_gra); dwwp.v0 = n++; dwwp.v2 = chldF; dwwp.v3 = gcF; dwwp.cz4(); dwwp.cs(s_dir, dir); f[c++] = dwwp.csa(s_dir, dir_gra); dwp.v1 = label; dwp.v0 = n++; dwp.v2 = gcF; dwp.v3 = pP; dwp.cz4(); dwp.cs(s_dir, dir); f[c++] = dwp.csa(s_dir, dir_gra); dwp.v0 = n++; dwp.v2 = gcF; dwp.v3 = dP; dwp.cz4(); dwp.cs(s_dir, dir); f[c++] = dwp.csa(s_dir, dir_gra); dwp.v0 = n++; dwp.v2 = prntF; dwp.v3 = gP; dwp.cz4(); dwp.cs(s_dir, dir); f[c++] = dwp.csa(s_dir, dir_gra); dwp.v0 = n++; dwp.v2 = chldF; dwp.v3 = gP; dwp.cz4(); dwp.cs(s_dir, dir); f[c++] = dwp.csa(s_dir, dir_gra); // lemma dwwp.v0 = n++; dwwp.v2 = prntL; dwwp.v3 = gcL; dwwp.cz4(); dwwp.cs(s_dir, dir); f[c++] = dwwp.csa(s_dir, dir_gra); dwwp.v0 = n++; dwwp.v2 = chldL; dwwp.v3 = gcL; dwwp.cz4(); dwwp.cs(s_dir, dir); f[c++] = dwwp.csa(s_dir, dir_gra); dwp.v0 = n++; dwp.v2 = gcL; dwp.v3 = pP; dwp.cz4(); dwp.cs(s_dir, dir); f[c++] = dwp.csa(s_dir, dir_gra); dwp.v0 = n++; dwp.v2 = gcL; dwp.v3 = dP; dwp.cz4(); dwp.cs(s_dir, dir); f[c++] = dwp.csa(s_dir, dir_gra); dwp.v0 = n++; dwp.v2 = prntL; dwp.v3 = gP; dwp.cz4(); dwp.cs(s_dir, dir); f[c++] = dwp.csa(s_dir, dir_gra); dwp.v0 = n++; dwp.v2 = chldL; dwp.v3 = gP; dwp.cz4(); dwp.cs(s_dir, dir); f[c++] = dwp.csa(s_dir, dir_gra); // clusters d2lp.v1 = label; d2lp.v0 = n++; d2lp.v2 = prntLS; d2lp.v3 = gcLS; d2lp.cz4(); d2lp.cs(s_dir, dir); f[c++] = d2lp.csa(s_dir, dir_gra);// f.add(li.l2i(l)); d2lp.v0 = n++; d2lp.v2 = chldLS; d2lp.v3 = gcLS; d2lp.cz4(); d2lp.cs(s_dir, dir); f[c++] = d2lp.csa(s_dir, dir_gra); d3lp.v0 = n++; d3lp.v1 = label; d3lp.v2 = prntLS; d3lp.v3 = chldLS; d3lp.v4 = gcLS; d3lp.cz5(); d3lp.cs(s_dir, dir); f[c++] = d3lp.csa(s_dir, dir_gra); //_f83; d2lp.v0 = n++; d2lp.v2 = prntLS; d2lp.v3 = chldLS; d2lp.v4 = gcF; d2lp.cz5(); f[c++] = d2lp.csa(s_dir, dir); d2lp.v0 = n++; d2lp.v2 = prntLS; d2lp.v3 = gcLS; d2lp.v4 = chldF; d2lp.cz5(); f[c++] = d2lp.csa(s_dir, dir); d2lp.v0 = n++; d2lp.v2 = chldLS; d2lp.v3 = gcLS; d2lp.v4 = prntF; d2lp.cz5(); f[c++] = d2lp.csa(s_dir, dir); d2pp.v1 = label; d2pp.v0 = n++; d2pp.v2 = prntLS; d2pp.v3 = chldLS; d2pp.v4 = gP; d2pp.cz5(); f[c++] = d2pp.csa(s_dir, dir); d2pp.v0 = n++; d2pp.v2 = prntLS; d2pp.v3 = gcLS; d2pp.v4 = dP; d2pp.cz5(); f[c++] = d2pp.csa(s_dir, dir); d2pp.v0 = n++; d2pp.v2 = chldLS; d2pp.v3 = gcLS; d2pp.v4 = pP; d2pp.cz5(); f[c++] = d2pp.csa(s_dir, dir); // linear features int prntPm1 = p != 0 ? pos[p - 1] : s_str; // parent-pos-minus1 int chldPm1 = d - 1 >= 0 ? pos[d - 1] : s_str; // child-pos-minus1 int prntPp1 = p != pos.length - 1 ? pos[p + 1] : s_end; int chldPp1 = d != pos.length - 1 ? pos[d + 1] : s_end; int gcPm1 = gc > 0 ? pos[gc - 1] : s_str; int gcPp1 = gc < pos.length - 1 ? pos[gc + 1] : s_end; dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = gcPp1; dl1.v4 = dP; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = gcPm1; dl1.v4 = dP; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = dP; dl1.v4 = chldPp1; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = dP; dl1.v4 = chldPm1; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = gcPp1; dl1.v4 = chldPm1; dl1.v5 = dP; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gcPm1; dl1.v3 = gP; dl1.v4 = chldPm1; dl1.v5 = dP; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = gcPp1; dl1.v4 = dP; dl1.v5 = chldPp1; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gcPm1; dl1.v3 = gP; dl1.v4 = dP; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = gcPp1; dl1.v4 = pP; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = gcPm1; dl1.v4 = pP; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = pP; dl1.v4 = prntPp1; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = pP; dl1.v4 = prntPm1; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = gcPp1; dl1.v4 = prntPm1; dl1.v5 = pP; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gcPm1; dl1.v3 = gP; dl1.v4 = prntPm1; dl1.v5 = pP; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = gcPp1; dl1.v4 = pP; dl1.v5 = prntPp1; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gcPm1; dl1.v3 = gP; dl1.v4 = pP; dl1.v5 = prntPp1; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); int pLSp1 = p != pos.length - 1 ? forms[p + 1] == -1 ? -1 : cluster.getLP(forms[p + 1]) : _cend; int cLSp1 = d != pos.length - 1 ? forms[d + 1] == -1 ? -1 : cluster.getLP(forms[d + 1]) : _cend; int gcLSp1 = gc < pos.length - 1 ? forms[gc + 1] == -1 ? -1 : cluster.getLP(forms[gc + 1]) : s_end; int pLSm1 = p != 0 ? lemmas[p - 1] == -1 ? -1 : cluster.getLP(lemmas[p - 1]) : _cstr; int cLSm1 = d - 1 >= 0 ? lemmas[d - 1] == -1 ? -1 : cluster.getLP(lemmas[d - 1]) : _cstr; int gcLSm1 = gc > 0 ? lemmas[gc - 1] == -1 ? -1 : cluster.getLP(lemmas[gc - 1]) : _cstr; dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = gcLSp1; dl1.v4 = dP; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = gcLSm1; dl1.v4 = dP; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = dP; dl1.v4 = cLSp1; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = dP; dl1.v4 = cLSm1; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = gcLSp1; dl1.v4 = cLSm1; dl1.v5 = dP; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gcLSm1; dl1.v3 = gP; dl1.v4 = cLSm1; dl1.v5 = dP; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = gcLSp1; dl1.v4 = dP; dl1.v5 = cLSp1; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = cLSm1; dl1.v3 = gP; dl1.v4 = dP; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = gcLSp1; dl1.v4 = pP; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = gcLSm1; dl1.v4 = pP; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = pP; dl1.v4 = pLSp1; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = pP; dl1.v4 = pLSm1; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = gcLSp1; dl1.v4 = pLSm1; dl1.v5 = pP; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gcLSm1; dl1.v3 = gP; dl1.v4 = pLSm1; dl1.v5 = pP; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gP; dl1.v3 = gcLSp1; dl1.v4 = pP; dl1.v5 = pLSp1; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = gcLSm1; dl1.v3 = gP; dl1.v4 = pP; dl1.v5 = pLSp1; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); short[] prel = is.plabels[i], phead = is.pheads[i]; int g = p == phead[d] ? 1 : 2; if (gc >= 0) { g += d == phead[gc] ? 4 : 8; } int gr = gc == -1 ? s_relend : prel[gc]; // take those in for stacking /* * dl2.v1=label; dl2.v0= * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); * dl2.v0= * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); * dl2.v0= * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++]=dl2.csa(s_dir,dir); * * dl2.v0= * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); * dl2.v0= * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); * dl2.v0= * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=gP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++]=dl2.csa(s_dir,dir); * */ if (feats == null) { return; } short[] featsP = feats[d]; short[] featsD = gc != -1 ? feats[gc] : null; dlf.v0 = n++; dlf.v1 = label; dlf.v2 = gP; dlf.v3 = dP; extractFeat(f, c, dir, featsP, featsD); } @Override public void siblingm(Instances is, int i, short pos[], int forms[], int[] lemmas, short[][] feats, int prnt, int d, int sblng, int label, Cluster cluster, long[] f, int v) { for (int k = 0; k < f.length; k++) { f[k] = 0; } int pP = pos[prnt], dP = pos[d]; int prntF = forms[prnt], chldF = forms[d]; int prntL = lemmas[prnt], chldL = lemmas[d]; int prntLS = prntF == -1 ? -1 : cluster.getLP(prntF), chldLS = chldF == -1 ? -1 : cluster.getLP(chldF); int sP = sblng != -1 ? pos[sblng] : s_str, sblF = sblng != -1 ? forms[sblng] : s_stwrd, sblL = sblng != -1 ? lemmas[sblng] : s_stwrd; int sblLS = (sblng != -1) && (sblF != -1) ? cluster.getLP(sblF) : s_stwrd; int dir = (prnt < d) ? ra : la; int abs = Math.abs(prnt - d); final int dist; if (abs > 10) { dist = d10; } else if (abs > 5) { dist = d5; } else if (abs == 5) { dist = d4; } else if (abs == 4) { dist = d3; } else if (abs == 3) { dist = d2; } else if (abs == 2) { dist = d1; } else { dist = di0; } int n = 147; if (prntF > maxForm) { prntF = -1; } if (prntL > maxForm) { prntL = -1; } if (chldF > maxForm) { chldF = -1; } if (chldL > maxForm) { chldL = -1; } if (sblF > maxForm) { sblF = -1; } if (sblL > maxForm) { sblL = -1; } dl1.v0 = n++; dl1.v1 = label; dl1.v2 = pP; dl1.v3 = dP; dl1.v4 = sP; dl1.cz5(); f[0] = dl1.csa(s_dir, dir); f[1] = dl1.csa(s_dist, dist); dl1.v0 = n++; dl1.v3 = sP; dl1.cz4(); f[2] = dl1.csa(s_dir, dir); f[3] = dl1.csa(s_dist, dist); dl1.v0 = n++; dl1.v2 = dP; dl1.cz4(); f[4] = dl1.csa(s_dir, dir); f[5] = dl1.csa(s_dist, dist); // sibling only could be tried dwwp.v1 = label; dwwp.v0 = n++; dwwp.v2 = prntF; dwwp.v3 = sblF; dwwp.cz4(); f[6] = dwwp.csa(s_dir, dir); f[7] = dwwp.csa(s_dist, dist); dwwp.v0 = n++; dwwp.v2 = chldF; dwwp.cz4(); f[8] = dwwp.csa(s_dir, dir); f[9] = dwwp.csa(s_dist, dist); dwp.v0 = n++; dwp.v1 = label; dwp.v2 = sblF; dwp.v3 = pP; dwp.cz4(); f[10] = dwp.csa(s_dir, dir); f[11] = dwp.csa(s_dist, dist); dwp.v0 = n++; /* * dwp.v1=label; */ dwp.v3 = dP; dwp.cz4(); f[12] = dwp.csa(s_dir, dir); f[13] = dwp.csa(s_dist, dist); dwp.v0 = n++; /* * dwp.v1=label; */ dwp.v2 = prntF; dwp.v3 = sP; dwp.cz4(); f[14] = dwp.csa(s_dir, dir); f[15] = dwp.csa(s_dist, dist); dwp.v0 = n++; /* * dwp.v1=label; */ dwp.v2 = chldF; dwp.cz4(); f[16] = dwp.csa(s_dir, dir); f[17] = dwp.csa(s_dist, dist); //lemmas dwwp.v0 = n++; dwwp.v2 = prntL; dwwp.v3 = sblL; dwwp.cz4(); f[18] = dwwp.csa(s_dir, dir); dwwp.v0 = n++; dwwp.v2 = chldL; dwwp.cz4(); f[19] = dwwp.csa(s_dir, dir); f[20] = dwwp.csa(s_dist, dist); dwp.v0 = n++; /* * dwp.v1=label; */ dwp.v2 = sblL; dwp.v3 = pP; dwp.cz4(); f[21] = dwp.csa(s_dir, dir); f[22] = dwp.csa(s_dist, dist); dwp.v0 = n++; /* * dwp.v1=label; */ dwp.v3 = dP; dwp.cz4(); f[23] = dwp.csa(s_dir, dir); f[24] = dwp.csa(s_dist, dist); dwp.v0 = n++; /* * dwp.v1=label; */ dwp.v2 = prntL; dwp.v3 = sP; dwp.cz4(); f[25] = dwp.csa(s_dir, dir); f[26] = dwp.csa(s_dist, dist); dwp.v0 = n++; /* * dwp.v1=label; */ dwp.v2 = chldL; dwp.cz4(); f[27] = dwp.csa(s_dir, dir); f[28] = dwp.csa(s_dist, dist); // clusters d2lp.v1 = label; d2lp.v0 = n++; d2lp.v2 = prntLS; d2lp.v3 = sblLS; d2lp.cz4(); f[29] = d2lp.csa(s_dir, dir); d2lp.v0 = n++; d2lp.v2 = chldLS; d2lp.v3 = sblLS; d2lp.cz4(); f[30] = d2lp.csa(s_dir, dir); f[31] = d2lp.csa(s_dist, dist); d3lp.v1 = label; d3lp.v0 = n++; d3lp.v2 = prntLS; d3lp.v3 = chldLS; d3lp.v4 = sblLS; d3lp.cz5(); f[32] = d3lp.csa(s_dir, dir); d2lp.v0 = n++; d2lp.v2 = prntLS; d2lp.v3 = chldLS; d2lp.v4 = sblF; d2lp.cz5(); f[33] = d2lp.csa(s_dir, dir); f[34] = d2lp.csa(s_dist, dist); d2lp.v0 = n++; d2lp.v2 = prntLS; d2lp.v3 = sblLS; d2lp.v4 = chldF; d2lp.cz5(); f[35] = d2lp.csa(s_dir, dir); f[36] = d2lp.csa(s_dist, dist); d2lp.v0 = n++; d2lp.v2 = chldLS; d2lp.v3 = sblLS; d2lp.v4 = prntF; d2lp.cz5(); f[37] = d2lp.csa(s_dir, dir); f[38] = d2lp.csa(s_dist, dist); d2pp.v1 = label; d2pp.v0 = n++; d2pp.v2 = prntLS; d2pp.v3 = chldLS; d2pp.v4 = sP; d2pp.cz5(); f[39] = d2pp.csa(s_dir, dir); f[40] = d2pp.csa(s_dist, dist); d2pp.v0 = n++; d2pp.v2 = prntLS; d2pp.v3 = sblLS; d2pp.v4 = dP; d2pp.cz5(); f[41] = d2pp.csa(s_dir, dir); f[42] = d2pp.csa(s_dist, dist); d2pp.v0 = n++; d2pp.v2 = chldLS; d2pp.v3 = sblLS; d2pp.v4 = pP; d2pp.cz5(); f[43] = d2pp.csa(s_dir, dir); f[44] = d2pp.csa(s_dist, dist); int prntPm1 = prnt != 0 ? pos[prnt - 1] : s_str; int chldPm1 = d - 1 >= 0 ? pos[d - 1] : s_str; int prntPp1 = prnt != pos.length - 1 ? pos[prnt + 1] : s_end; int chldPp1 = d != pos.length - 1 ? pos[d + 1] : s_end; // sibling part of speech minus and plus 1 int sblPm1 = sblng > 0 ? pos[sblng - 1] : s_str; int sblPp1 = sblng < pos.length - 1 ? pos[sblng + 1] : s_end; dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sblPp1; dl1.v4 = pP; dl1.cz5(); f[45] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sblPm1; dl1.v4 = pP; dl1.cz5(); f[46] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = pP; dl1.v4 = prntPp1; dl1.cz5(); f[47] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = pP; dl1.v4 = prntPm1; dl1.cz5(); f[48] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sblPp1; dl1.v4 = prntPm1; dl1.v5 = pP; dl1.cz6(); f[49] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sblPm1; dl1.v3 = sP; dl1.v4 = prntPm1; dl1.v5 = pP; dl1.cz6(); f[50] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sblPp1; dl1.v4 = pP; dl1.v5 = prntPp1; dl1.cz6(); f[51] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); dl1.v0 = n++; dl1.v2 = sblPm1; dl1.v3 = sP; dl1.v4 = pP; dl1.v5 = prntPp1; dl1.cz6(); f[52] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sblPp1; dl1.v4 = dP; dl1.cz5(); f[53] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sblPm1; dl1.v4 = dP; dl1.cz5(); f[54] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = dP; dl1.v4 = chldPp1; dl1.cz5(); f[55] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = dP; dl1.v4 = chldPm1; dl1.cz5(); f[56] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sblPp1; dl1.v4 = chldPm1; dl1.v5 = dP; dl1.cz6(); f[57] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); dl1.v0 = n++; dl1.v2 = sblPm1; dl1.v3 = sP; dl1.v4 = chldPm1; dl1.v5 = dP; dl1.cz6(); f[58] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sblPp1; dl1.v4 = dP; dl1.v5 = chldPp1; dl1.cz6(); f[59] = dl1.csa(s_dir, dir);// f.add(li.l2i(l)); dl1.v0 = n++; dl1.v2 = sblPm1; dl1.v3 = sP; dl1.v4 = dP; dl1.v5 = chldPp1; dl1.cz6(); f[60] = dl1.csa(s_dir, dir); int c = 61; int pLSp1 = prnt != pos.length - 1 ? forms[prnt + 1] == -1 ? -1 : cluster.getLP(forms[prnt + 1]) : _cend; int cLSp1 = d != pos.length - 1 ? forms[d + 1] == -1 ? -1 : cluster.getLP(forms[d + 1]) : _cend; int sLSp1 = sblng < pos.length - 1 ? forms[sblng + 1] == -1 ? -1 : cluster.getLP(forms[sblng + 1]) : _cend; int pLSm1 = prnt != 0 ? forms[prnt - 1] == -1 ? -1 : cluster.getLP(forms[prnt - 1]) : _cstr; int cLSm1 = d - 1 >= 0 ? forms[d - 1] == -1 ? -1 : cluster.getLP(forms[d - 1]) : _cstr; int sLSm1 = sblng > 0 ? forms[sblng - 1] == -1 ? -1 : cluster.getLP(forms[sblng - 1]) : _cstr; //int c=61; dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sLSp1; dl1.v4 = pP; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sLSm1; dl1.v4 = pP; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = pP; dl1.v4 = pLSp1; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = pP; dl1.v4 = pLSm1; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sLSp1; dl1.v4 = pLSm1; dl1.v5 = pP; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sLSm1; dl1.v3 = sP; dl1.v4 = pLSm1; dl1.v5 = pP; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sLSp1; dl1.v4 = pP; dl1.v5 = pLSp1; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sLSm1; dl1.v3 = sP; dl1.v4 = pP; dl1.v5 = pLSp1; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sLSp1; dl1.v4 = dP; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sLSm1; dl1.v4 = dP; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = dP; dl1.v4 = cLSp1; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = dP; dl1.v4 = cLSm1; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sLSm1; dl1.v4 = cLSm1; dl1.v5 = dP; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sLSm1; dl1.v3 = sP; dl1.v4 = cLSm1; dl1.v5 = dP; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sLSp1; dl1.v4 = dP; dl1.v5 = cLSp1; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sLSm1; dl1.v3 = sP; dl1.v4 = dP; dl1.v5 = cLSp1; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sLSp1; dl1.v4 = pP; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sLSm1; dl1.v4 = pP; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = pP; dl1.v4 = pLSp1; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = pP; dl1.v4 = pLSm1; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sLSp1; dl1.v4 = pLSm1; dl1.v5 = pP; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sLSm1; dl1.v3 = sP; dl1.v4 = pLSm1; dl1.v5 = pP; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sLSp1; dl1.v4 = pP; dl1.v5 = pLSp1; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sLSm1; dl1.v3 = sP; dl1.v4 = pP; dl1.v5 = pLSp1; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sLSp1; dl1.v4 = dP; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sLSm1; dl1.v4 = dP; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = dP; dl1.v4 = cLSp1; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = dP; dl1.v4 = cLSm1; dl1.cz5(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sLSm1; dl1.v4 = cLSm1; dl1.v5 = dP; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sLSm1; dl1.v3 = sP; dl1.v4 = cLSm1; dl1.v5 = dP; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sP; dl1.v3 = sLSp1; dl1.v4 = dP; dl1.v5 = cLSp1; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); dl1.v0 = n++; dl1.v2 = sLSm1; dl1.v3 = sP; dl1.v4 = dP; dl1.v5 = cLSp1; dl1.cz6(); f[c++] = dl1.csa(s_dir, dir); // take those in for stacking /* * short[] prel = is.plabels[i],phead=is.pheads[i]; * * int g = prnt==phead[d]?1:2 ; if (sblng>=0) g += * prnt==phead[sblng]?4:8; * * int gr = sblng==-1?s_relend:prel[sblng]; * * * dl2.v0= * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); * dl2.v0= * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); * dl2.v0= * n++;dl2.v2=prel[d];dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++]=dl2.csa(s_dir,dir); * * dl2.v0= * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=dP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); * dl2.v0= * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.cz6();f[c++]=dl2.csa(s_dir,dir); * dl2.v0= * n++;dl2.v2=gr;dl2.v3=g;dl2.v4=sP;dl2.v5=pP;dl2.v6=dP;dl2.cz7();f[c++]=dl2.csa(s_dir,dir); */ if (feats == null) { return; } int cnt = c; short[] featsP = feats[d]; short[] featsSbl = sblng != -1 ? feats[sblng] : null; dlf.v0 = n++; dlf.v1 = label; dlf.v2 = sP; dlf.v3 = dP; cnt = extractFeat(f, cnt, dir, featsP, featsSbl); featsP = feats[prnt]; featsSbl = sblng != -1 ? feats[sblng] : null; dlf.v0 = n++; dlf.v1 = label; dlf.v2 = pP; dlf.v3 = sP; if (featsP != null && featsSbl != null) { for (short i1 = 0; i1 < featsP.length; i1++) { for (short i2 = 0; i2 < featsSbl.length; i2++) { dlf.v4 = featsP[i1]; dlf.v5 = featsSbl[i2]; dlf.cz6(); f[cnt++] = dlf.csa(s_dir, prnt < sblng ? 1 : 2); } } } else if (featsP == null && featsSbl != null) { for (short i2 = 0; i2 < featsSbl.length; i2++) { dlf.v4 = nofeat; dlf.v5 = featsSbl[i2]; dlf.cz6(); f[cnt++] = dlf.csa(s_dir, dir); } } else if (featsP != null && featsSbl == null) { for (short i1 = 0; i1 < featsP.length; i1++) { dlf.v4 = featsP[i1]; dlf.v5 = nofeat; dlf.cz6(); f[cnt++] = dlf.csa(s_dir, dir); } } } private int extractFeat(long[] f, int cnt, int dir, short[] featsP, short[] featsD) { if (featsP != null && featsD != null) { for (short i1 = 0; i1 < featsP.length; i1++) { for (short i2 = 0; i2 < featsD.length; i2++) { dlf.v4 = featsP[i1]; dlf.v5 = featsD[i2]; dlf.cz6(); f[cnt++] = dlf.csa(s_dir, dir); } } } else if (featsP == null && featsD != null) { for (short i2 = 0; i2 < featsD.length; i2++) { dlf.v4 = nofeat; dlf.v5 = featsD[i2]; dlf.cz6(); f[cnt++] = dlf.csa(s_dir, dir); } } else if (featsP != null && featsD == null) { for (short i1 = 0; i1 < featsP.length; i1++) { dlf.v4 = featsP[i1]; dlf.v5 = nofeat; dlf.cz6(); f[cnt++] = dlf.csa(s_dir, dir); } } return cnt; } @Override public FV encodeCat(Instances is, int ic, short pposs[], int forms[], int[] lemmas, short[] heads, short[] types, short feats[][], Cluster cluster, FV f) { long[] svs = new long[250]; for (int i = 1; i < heads.length; i++) { int n = basic(pposs, forms, heads[i], i, cluster, f); firstm(is, ic, heads[i], i, types[i], cluster, svs); for (int k = 0; k < svs.length; k++) { dl1.map(f, svs[k]); } int ch, cmi, cmo; if (heads[i] < i) { ch = rightmostRight(heads, heads[i], i); cmi = leftmostLeft(heads, i, heads[i]); cmo = rightmostRight(heads, i, heads.length); } else { ch = leftmostLeft(heads, heads[i], i); cmi = rightmostRight(heads, i, heads[i]); cmo = leftmostLeft(heads, i, 0); } siblingm(is, ic, pposs, forms, lemmas, feats, heads[i], i, ch, types[i], cluster, svs, n); for (int k = 0; k < svs.length; k++) { dl1.map(f, svs[k]); } gcm(is, ic, heads[i], i, cmi, types[i], cluster, svs); for (int k = 0; k < svs.length; k++) { dl1.map(f, svs[k]); } gcm(is, ic, heads[i], i, cmo, types[i], cluster, svs); for (int k = 0; k < svs.length; k++) { dl1.map(f, svs[k]); } } return f; } @Override public float encode3(short[] pos, short heads[], short[] types, DataF d2) { double v = 0; for (int i = 1; i < heads.length; i++) { int dir = (heads[i] < i) ? 0 : 1; v += d2.pl[heads[i]][i]; v += d2.lab[heads[i]][i][types[i]][dir]; boolean left = i < heads[i]; short[] labels = Edges.get(pos[heads[i]], pos[i], left); int lid = -1; for (int k = 0; k < labels.length; k++) { if (types[i] == labels[k]) { lid = k; break; } } int ch, cmi, cmo; if (heads[i] < i) { ch = rightmostRight(heads, heads[i], i); cmi = leftmostLeft(heads, i, heads[i]); cmo = rightmostRight(heads, i, heads.length); if (ch == -1) { ch = heads[i]; } if (cmi == -1) { cmi = heads[i]; } if (cmo == -1) { cmo = heads[i]; } } else { ch = leftmostLeft(heads, heads[i], i); cmi = rightmostRight(heads, i, heads[i]); cmo = leftmostLeft(heads, i, 0); if (ch == -1) { ch = i; } if (cmi == -1) { cmi = i; } if (cmo == -1) { cmo = i; } } v += d2.sib[heads[i]][i][ch][dir][lid]; v += d2.gra[heads[i]][i][cmi][dir][lid]; v += d2.gra[heads[i]][i][cmo][dir][lid]; } return (float) v; } /** * Provide the scores of the edges * * @param pos * @param heads * @param types * @param edgesScores * @param d2 * @return */ public static float encode3(short[] pos, short heads[], short[] types, float[] edgesScores, DataF d2) { double v = 0; for (int i = 1; i < heads.length; i++) { int dir = (heads[i] < i) ? 0 : 1; edgesScores[i] = d2.pl[heads[i]][i]; edgesScores[i] += d2.lab[heads[i]][i][types[i]][dir]; boolean left = i < heads[i]; short[] labels = Edges.get(pos[heads[i]], pos[i], left); int lid = -1; for (int k = 0; k < labels.length; k++) { if (types[i] == labels[k]) { lid = k; break; } } int ch, cmi, cmo; if (heads[i] < i) { ch = rightmostRight(heads, heads[i], i); cmi = leftmostLeft(heads, i, heads[i]); cmo = rightmostRight(heads, i, heads.length); if (ch == -1) { ch = heads[i]; } if (cmi == -1) { cmi = heads[i]; } if (cmo == -1) { cmo = heads[i]; } } else { ch = leftmostLeft(heads, heads[i], i); cmi = rightmostRight(heads, i, heads[i]); cmo = leftmostLeft(heads, i, 0); if (ch == -1) { ch = i; } if (cmi == -1) { cmi = i; } if (cmo == -1) { cmo = i; } } edgesScores[i] += d2.sib[heads[i]][i][ch][dir][lid]; edgesScores[i] += d2.gra[heads[i]][i][cmi][dir][lid]; edgesScores[i] += d2.gra[heads[i]][i][cmo][dir][lid]; v += edgesScores[i]; } return (float) v; } private static int rightmostRight(short[] heads, int head, int max) { int rightmost = -1; for (int i = head + 1; i < max; i++) { if (heads[i] == head) { rightmost = i; } } return rightmost; } private static int leftmostLeft(short[] heads, int head, int min) { int leftmost = -1; for (int i = head - 1; i > min; i--) { if (heads[i] == head) { leftmost = i; } } return leftmost; } public static final String REL = "REL", END = "END", STR = "STR", LA = "LA", RA = "RA"; private static int ra, la; private static int s_str; private static int s_end, _cend, _cstr, s_stwrd, s_relend; protected static final String TYPE = "TYPE", DIR = "D", FEAT = "F"; public static final String POS = "POS"; protected static final String DIST = "DIST", MID = "MID"; private static final String _0 = "0", _4 = "4", _3 = "3", _2 = "2", _1 = "1", _5 = "5", _10 = "10"; private static int di0, d4, d3, d2, d1, d5, d10; private static final String WORD = "WORD", STWRD = "STWRD", STPOS = "STPOS"; private static int nofeat; private static int maxForm; /** * Initialize the features. * * @param maxFeatures */ static public void initFeatures() { MFB mf = new MFB(); mf.register(POS, MID); s_str = mf.register(POS, STR); s_end = mf.register(POS, END); s_relend = mf.register(REL, END); _cstr = mf.register(Cluster.SPATH, STR); _cend = mf.register(Cluster.SPATH, END); mf.register(TYPE, POS); s_stwrd = mf.register(WORD, STWRD); mf.register(POS, STPOS); la = mf.register(DIR, LA); ra = mf.register(DIR, RA); // mf.register(TYPE, CHAR); mf.register(TYPE, FEAT); nofeat = mf.register(FEAT, "NOFEAT"); for (int k = 0; k < 215; k++) { mf.register(TYPE, "F" + k); } di0 = mf.register(DIST, _0); d1 = mf.register(DIST, _1); d2 = mf.register(DIST, _2); d3 = mf.register(DIST, _3); d4 = mf.register(DIST, _4); d5 = mf.register(DIST, _5); // d5l=mf.register(DIST, _5l); d10 = mf.register(DIST, _10); } /* * (non-Javadoc) @see extractors.Extractor#getType() */ @Override public int getType() { return s_type; } /* * (non-Javadoc) @see extractors.Extractor#setMaxForm(java.lang.Integer) */ @Override public void setMaxForm(int max) { maxForm = max; } /* * (non-Javadoc) @see extractors.Extractor#getMaxForm() */ @Override public int getMaxForm() { return maxForm; } }