Exemplo n.º 1
0
  public List<MExpression> postProcess(List<MExpression> melAnalResult) throws Exception {
    MExpression me1 = null;
    MExpression me2 = null;
    MExpression me3 = null;
    for (int i = 1; i < melAnalResult.size(); i++) {
      me1 = (MExpression) melAnalResult.get(i - 1);
      me2 = (MExpression) melAnalResult.get(i);
      if ((!me2.isComplete()) || (me1.isOneEojeolCheckable()) || (me2.isOneEojeolCheckable())) {
        if ((me1.isNotHangul()) && (me2.isNotHangul())) {
          MCandidate mc1 = (MCandidate) me1.get(0);
          MCandidate mc2 = (MCandidate) me2.get(0);

          if (mc1.firstMorp.index + mc1.getExp().length() == mc2.firstMorp.index) {
            me1.exp += me2.exp;
            mc1.addAll(mc2);
            mc1.setExp(me1.exp);
            melAnalResult.remove(i);
            i--;
          }

        } else if (me1.isNotHangul()) {
          MCandidate mc1 = (MCandidate) me1.get(0);
          MCandidate mc2 = (MCandidate) me2.get(0);

          if (mc1.firstMorp.index + mc1.getExp().length() == mc2.firstMorp.index) {
            me3 = me1.derive(me2);
            melAnalResult.remove(i - 1);
            melAnalResult.remove(i - 1);
            melAnalResult.add(i - 1, me3);
            i--;
          }
        } else {
          me3 = me1.derive(me2);
          if (me3.isOneEojeol()) {
            melAnalResult.remove(i - 1);
            melAnalResult.remove(i - 1);
            melAnalResult.add(i - 1, me3);
            i--;
          }
        }
      }
    }

    me1 = (MExpression) melAnalResult.get(0);
    int i = 0;
    for (int size = 0; (i < (size = me1.size())) && (size > 1); i++) {
      MCandidate mc = (MCandidate) me1.get(i);
      if (((mc.cclEnc != Condition.ENG) && (mc.cclEnc != 0L))
          || (mc.firstMorp.isTagOf(POSTag.J | POSTag.E | POSTag.XS))) {
        me1.remove(i);
        i--;
      }
    }

    setBestPrevMC(melAnalResult);

    return melAnalResult;
  }