in opennlp-similarity/src/main/java/opennlp/tools/textsimilarity/LemmaFormManager.java [26:82]
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;
}