protected void cons3()

in opennlp-tools/src/main/java/opennlp/tools/parser/AbstractContextGenerator.java [172:305]


  protected void cons3(List<String> features, Cons c0, Cons c1, Cons c2, Collection<Parse> punct1s,
      Collection<Parse> punct2s, boolean trigram, boolean bigram1, boolean bigram2) {
    //  features.add("stage=cons(0),cons(1),cons(2)");
    if (punct1s != null) {
      if (c0.index == -2) {
        for (Parse p : punct1s) {
          // String punct = punct(p,c1.index);
          String punctbo = punctbo(p, c1.index <= 0 ? c1.index - 1 : c1.index);
          //punct(-2)
          //TODO consider changing
          //features.add(punct);

          //punctbo(-2)
          features.add(punctbo);
        }
      }
    }
    if (punct2s != null) {
      if (c2.index == 2) {
        for (Parse p : punct2s) {
          // String punct = punct(p,c2.index);
          String punctbo = punctbo(p, c2.index);
          //punct(2)
          //TODO consider changing
          //features.add(punct);

          //punctbo(2)
          features.add(punctbo);
        }
      }
      if (punct1s != null) {
        //cons(0),punctbo(1),cons(1),punctbo(2),cons(2)
        for (Parse punct2 : punct2s) {
          String punctbo2 = punctbo(punct2, c2.index <= 0 ? c2.index - 1 : c2.index);
          for (Parse punct1 : punct1s) {
            String punctbo1 = punctbo(punct1, c1.index <= 0 ? c1.index - 1 : c1.index);
            if (trigram)
              features.add(c0.cons + "," + punctbo1 + "," + c1.cons + "," + punctbo2 + "," + c2.cons);

            if (bigram2)
              features.add(c0.consbo + "," + punctbo1 + "," + c1.cons + "," + punctbo2 + "," + c2.cons);
            if (c0.unigram && c2.unigram)
              features.add(c0.cons + "," + punctbo1 + "," + c1.consbo + "," + punctbo2 + "," + c2.cons);
            if (bigram1)
              features.add(c0.cons + "," + punctbo1 + "," + c1.cons + "," + punctbo2 + "," + c2.consbo);

            if (c2.unigram)
              features.add(c0.consbo + "," + punctbo1 + "," + c1.consbo + "," + punctbo2 + "," + c2.cons);
            if (c1.unigram)
              features.add(c0.consbo + "," + punctbo1 + "," + c1.cons + "," + punctbo2 + "," + c2.consbo);
            if (c0.unigram)
              features.add(c0.cons + "," + punctbo1 + "," + c1.consbo + "," + punctbo2 + "," + c2.consbo);

            features.add(c0.consbo + "," + punctbo1 + "," + c1.consbo + "," + punctbo2 + "," + c2.consbo);

            if (zeroBackOff) {
              if (bigram1) features.add(c0.cons + "," + punctbo1 + "," + c1.cons + "," + punctbo2);
              if (c1.unigram) features.add(c0.consbo + "," + punctbo1 + "," + c1.cons + "," + punctbo2);
              if (c0.unigram) features.add(c0.cons + "," + punctbo1 + "," + c1.consbo + "," + punctbo2);
              features.add(c0.consbo + "," + punctbo1 + "," + c1.consbo + "," + punctbo2);
            }
          }
        }
      }
      else { //punct1s == null
        //cons(0),cons(1),punctbo(2),cons(2)
        for (Parse punct2 : punct2s) {
          String punctbo2 = punctbo(punct2, c2.index <= 0 ? c2.index - 1 : c2.index);
          if (trigram) features.add(c0.cons + "," + c1.cons + "," + punctbo2 + "," + c2.cons);

          if (bigram2)
            features.add(c0.consbo + "," + c1.cons + "," + punctbo2 + "," + c2.cons);
          if (c0.unigram && c2.unigram)
            features.add(c0.cons + "," + c1.consbo + "," + punctbo2 + "," + c2.cons);
          if (bigram1) features.add(c0.cons + "," + c1.cons + "," + punctbo2 + "," + c2.consbo);

          if (c2.unigram) features.add(c0.consbo + "," + c1.consbo + "," + punctbo2 + "," + c2.cons);
          if (c1.unigram) features.add(c0.consbo + "," + c1.cons + "," + punctbo2 + "," + c2.consbo);
          if (c0.unigram) features.add(c0.cons + "," + c1.consbo + "," + punctbo2 + "," + c2.consbo);

          features.add(c0.consbo + "," + c1.consbo + "," + punctbo2 + "," + c2.consbo);

          if (zeroBackOff) {
            if (bigram1) features.add(c0.cons + "," + c1.cons + "," + punctbo2);
            if (c1.unigram) features.add(c0.consbo + "," + c1.cons + "," + punctbo2);
            if (c0.unigram) features.add(c0.cons + "," + c1.consbo + "," + punctbo2);
            features.add(c0.consbo + "," + c1.consbo + "," + punctbo2);
          }
        }
      }
    }
    else {
      if (punct1s != null) {
        //cons(0),punctbo(1),cons(1),cons(2)
        for (Parse punct1 : punct1s) {
          String punctbo1 = punctbo(punct1, c1.index <= 0 ? c1.index - 1 : c1.index);
          if (trigram)
            features.add(c0.cons + "," + punctbo1 + "," + c1.cons + "," + c2.cons);

          if (bigram2)
            features.add(c0.consbo + "," + punctbo1 + "," + c1.cons + "," + c2.cons);
          if (c0.unigram && c2.unigram)
            features.add(c0.cons + "," + punctbo1 + "," + c1.consbo + "," + c2.cons);
          if (bigram1)
            features.add(c0.cons + "," + punctbo1 + "," + c1.cons + "," + c2.consbo);

          if (c2.unigram)
            features.add(c0.consbo + "," + punctbo1 + "," + c1.consbo + "," + c2.cons);
          if (c1.unigram)
            features.add(c0.consbo + "," + punctbo1 + "," + c1.cons + "," + c2.consbo);
          if (c0.unigram)
            features.add(c0.cons + "," + punctbo1 + "," + c1.consbo + "," + c2.consbo);

          features.add(c0.consbo + "," + punctbo1 + "," + c1.consbo + "," + c2.consbo);

          //zero backoff case covered by cons(0)cons(1)
        }
      }
      else {
        //cons(0),cons(1),cons(2)
        if (trigram) features.add(c0.cons   + "," + c1.cons   + "," + c2.cons);

        if (bigram2) features.add(c0.consbo + "," + c1.cons   + "," + c2.cons);
        if (c0.unigram && c2.unigram) features.add(c0.cons   + "," + c1.consbo + "," + c2.cons);
        if (bigram1) features.add(c0.cons   + "," + c1.cons   + "," + c2.consbo);

        if (c2.unigram) features.add(c0.consbo + "," + c1.consbo + "," + c2.cons);
        if (c1.unigram) features.add(c0.consbo + "," + c1.cons   + "," + c2.consbo);
        if (c0.unigram) features.add(c0.cons   + "," + c1.consbo + "," + c2.consbo);

        features.add(c0.consbo + "," + c1.consbo + "," + c2.consbo);
      }
    }
  }