我有一个取自这个示例的非常简单的代码,其中我使用 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(实际上是相同的版本),但我从未见过这种行为。在网上搜索并没有找到任何线索。这里可能出了什么问题?
PS Lin、Wu-Palmer 和 Path 度量应该返回 1 的事实也可以通过 ws4j 提供的在线演示来验证