public String matchLemmas()

in opennlp-similarity/src/main/java/opennlp/tools/parse_thicket/matching/LemmaFormManager.java [24:80]


  public String matchLemmas(Stemmer ps, String lemma1, String lemma2, String POS) {
    if (POS == null) {
      return null;
    }
    lemma1 = lemma1.toLowerCase();
    lemma2 = lemma2.toLowerCase();
    // numbers have to be exact
    if (POS.equals("CD")) {
      if (lemma1.equals(lemma2)) {
        return lemma1;
      } else {
        return null;
      }
    }

    // 'must' occurrence of word - if not equal then 'fail'
    if (lemma1.endsWith("_xyz") || lemma2.endsWith("_xyz")) {
      lemma1 = lemma1.replace("_xyz", "");
      lemma2 = lemma2.replace("_xyz", "");
      if (lemma1.equals(lemma2)) {
        return lemma1;
      } else { // trying to check if nouns and different plural/single form
        if (POS.equals("NN") || POS.equals("NP")) {
          if ((lemma1.equals(lemma2 + "s") || lemma2.equals(lemma1 + "s"))
              || lemma1.endsWith(lemma2) || lemma2.endsWith(lemma1)
              || lemma1.startsWith(lemma2) || lemma2.startsWith(lemma1))
            return lemma1;
        }
        return "fail";
      }
    }

    if (lemma1.equals(lemma2)) {
      return lemma1;
    }

    if (POS.equals("NN") || POS.equals("NP")) {
      if ((lemma1.equals(lemma2 + "s") || lemma2.equals(lemma1 + "s"))
          || lemma1.endsWith(lemma2) || lemma2.endsWith(lemma1)
          || lemma1.startsWith(lemma2) || lemma2.startsWith(lemma1)) {
        return lemma1;
      }
    }
    try {
      if (ps != null) {
        if (ps.stem(lemma1).toString()
            .equalsIgnoreCase(ps.stem(lemma2).toString())) {
          return lemma1;
        }
      }
    } catch (Exception e) {
      System.err.println("Problem processing " + lemma1 + " " + lemma2);
      return null;
    }

    return null;
  }