WS4j を使用して、2 つの単語の類似性を見つけています。また、Wu-Palmer 関連性計算機を使用しています。多くの単語で問題なく動作していますが、'play' と 'playing' の類似性を見つけようとすると、スコア 1.3333 になりました。0 と 1 または -1 の間で返さなければならないため、これは不可能です。理由がわかりません。その Web インターフェイス ' http://ws4jdemo.appspot.com/?mode=w&s1=&w1=play&s2=&w2=playing ' を使用すると、0.875 が返されました。これが私のコードです:
private static void findSimilarity(String word1, String word2) {
WS4JConfiguration.getInstance().setMFS(true);
List<POS[]> posPairs = wup.getPOSPairs();
double maxScore = -1D;
for(POS[] posPair: posPairs) {
List<Concept> synsets1 =
(List<Concept>)db.getAllConcepts(word1, posPair[0].toString());
List<Concept> synsets2 =
(List<Concept>)db.getAllConcepts(word2, posPair[1].toString());
for(Concept synset1: synsets1) {
for (Concept synset2: synsets2) {
Relatedness relatedness = wup.calcRelatednessOfSynset(synset1, synset2);
double score = relatedness.getScore();
if (score > maxScore) {
maxScore = score;
}
}
}
}
if (maxScore == -1D) {
maxScore = 0.0;
}
System.out.println("sim('" + word1 + "', '" + word2 + "') = " + maxScore);
}