У меня есть очень простой код, взятый из этот пример, где я использую меры подобия Lin, Path и Wu-Palmer вычислить сходство между двумя словами. Мой код выглядит следующим образом:
import edu.cmu.lti.lexical_db.ILexicalDatabase;
import edu.cmu.lti.lexical_db.NictWordNet;
import edu.cmu.lti.ws4j.RelatednessCalculator;
import edu.cmu.lti.ws4j.impl.Lin;
import edu.cmu.lti.ws4j.impl.Path;
import edu.cmu.lti.ws4j.impl.WuPalmer;
public class Test {
private static ILexicalDatabase db = new NictWordNet();
private static RelatednessCalculator lin = new Lin(db);
private static RelatednessCalculator wup = new WuPalmer(db);
private static RelatednessCalculator path = new Path(db);
public static void main(String[] args) {
String w1 = "walk";
String w2 = "trot";
System.out.println(lin.calcRelatednessOfWords(w1, w2));
System.out.println(wup.calcRelatednessOfWords(w1, w2));
System.out.println(path.calcRelatednessOfWords(w1, w2));
}
}
И оценки соответствуют ожидаемым, ЗА ИСКЛЮЧЕНИЕМ случаев, когда оба слова идентичны. Если оба слова одинаковы (например, w1 = "walk"; w2 = "walk";
), каждая из трех мер, которые у меня есть, должна возвращать 1,0. Но вместо этого они возвращают 1.7976931348623157E308.
Раньше я использовал ws4j (на самом деле та же версия), но я никогда не видел такого поведения. Поиск в Интернете не дал никаких зацепок. Что здесь может пойти не так?
P.S. Тот факт, что меры Lin, Wu-Palmer и Path должны возвращать 1, также можно проверить с помощью демонстрации в Интернете. демо предоставлено ws4j