docs: public FeatureVector createWordFeatures(DependencyInstance dependencyInstance, int i) {
  
          int[] pos = dependencyInstance.getPostagids();
          int[] posA = dependencyInstance.getCpostagids();
          int[] toks = dependencyInstance.getFormids();
          int[] lemma = dependencyInstance.getLemmaids();
  
          int p0 = pos[i];
          int pp = i > 0 ? pos[i - 1] : this.tokenStart;
          int pn = i < pos.length - 1 ? pos[i + 1] : this.tokenEnd;
  
          int c0 = posA[i];
          int cp = i > 0 ? posA[i - 1] : this.tokenStart;
          int cn = i < posA.length - 1 ? posA[i + 1] : this.tokenEnd;
  
          int w0 = toks[i];
          int wp = i == 0 ? this.tokenStart : toks[i - 1];
          int wn = i == dependencyInstance.getLength() - 1 ? this.tokenEnd : toks[i + 1];
  
          int l0 = 0;
          int lp = 0;
          int ln = 0;
          if (lemma != null) {
              l0 = lemma[i];
              lp = i == 0 ? this.tokenStart : lemma[i - 1];
              ln = i == dependencyInstance.getLength() - 1 ? this.tokenEnd : lemma[i + 1];
          }
  
          FeatureVector fv = new FeatureVector();
  
          long code;
  
          code = createWordCodeP(WORDFV_BIAS, 0);
          addWordFeature(code, fv);
  
          code = createWordCodeW(WORDFV_W0, w0);
          addWordFeature(code, fv);
          code = createWordCodeW(WORDFV_Wp, wp);
          addWordFeature(code, fv);
          code = createWordCodeW(WORDFV_Wn, wn);
          addWordFeature(code, fv);
  
          if (l0 != 0) {
              code = createWordCodeW(WORDFV_W0, l0);
              addWordFeature(code, fv);
              code = createWordCodeW(WORDFV_Wp, lp);
              addWordFeature(code, fv);
              code = createWordCodeW(WORDFV_Wn, ln);
              addWordFeature(code, fv);
          }
  
          code = createWordCodeP(WORDFV_P0, p0);
          addWordFeature(code, fv);
          code = createWordCodeP(WORDFV_Pp, pp);
          addWordFeature(code, fv);
          code = createWordCodeP(WORDFV_Pn, pn);
          addWordFeature(code, fv);
  
          code = createWordCodeP(WORDFV_P0, c0);
          addWordFeature(code, fv);
          code = createWordCodeP(WORDFV_Pp, cp);
          addWordFeature(code, fv);
          code = createWordCodeP(WORDFV_Pn, cn);
          addWordFeature(code, fv);
  
          code = createWordCodePP(WORDFV_PpP0, pp, p0);
          addWordFeature(code, fv);
          code = createWordCodePP(WORDFV_P0Pn, p0, pn);
          addWordFeature(code, fv);
          code = createWordCodePP(WORDFV_PpPn, pp, pn);
          addWordFeature(code, fv);
          code = createWordCodePPP(WORDFV_PpP0Pn, pp, p0, pn);
          addWordFeature(code, fv);
  
          code = createWordCodePP(WORDFV_PpP0, cp, c0);
          addWordFeature(code, fv);
          code = createWordCodePP(WORDFV_P0Pn, c0, cn);
          addWordFeature(code, fv);
          code = createWordCodePP(WORDFV_PpPn, cp, cn);
          addWordFeature(code, fv);
          code = createWordCodePPP(WORDFV_PpP0Pn, cp, c0, cn);
          addWordFeature(code, fv);
  
          code = createWordCodeWP(WORDFV_W0P0, w0, p0);
          addWordFeature(code, fv);
  
          code = createWordCodeWP(WORDFV_W0P0, w0, c0);
          addWordFeature(code, fv);
  
          if (l0 != 0) {
              code = createWordCodeWP(WORDFV_W0P0, l0, p0);
              addWordFeature(code, fv);
  
              code = createWordCodeWP(WORDFV_W0P0, l0, c0);
              addWordFeature(code, fv);
  
              code = createWordCodeWP(WORDFV_W0Pp, l0, cp);
              addWordFeature(code, fv);
  
              code = createWordCodeWP(WORDFV_W0Pn, l0, cn);
              addWordFeature(code, fv);
  
              code = createWordCodeWP(WORDFV_WpPp, lp, cp);
              addWordFeature(code, fv);
  
              code = createWordCodeWP(WORDFV_WnPn, ln, cn);
              addWordFeature(code, fv);
          }
  
          int[][] feats = dependencyInstance.getFeatids();
          if (feats[i] != null) {
              for (int u = 0; u < feats[i].length; ++u) {
                  int f = feats[i][u];
  
                  code = createWordCodeP(WORDFV_P0, f);
                  addWordFeature(code, fv);
  
                  if (l0 != 0) {
                      code = createWordCodeWP(WORDFV_W0P0, l0, f);
                      addWordFeature(code, fv);
                  }
  
              }
          }
  
          return fv;
      }