我正在尝试在 Java 中使用/实现向量空间模型算法,以根据其关键字获得两个人之间的相似度得分。所以我有以下课程:
Person - 有一个关键字列表;
关键字 - 字符串文本;整数分数;
关键字得分是该人对关键字的提及次数。
关于如何在 Java 中实现这一点的任何建议?
问候
我正在尝试在 Java 中使用/实现向量空间模型算法,以根据其关键字获得两个人之间的相似度得分。所以我有以下课程:
Person - 有一个关键字列表;
关键字 - 字符串文本;整数分数;
关键字得分是该人对关键字的提及次数。
关于如何在 Java 中实现这一点的任何建议?
问候
它很容易。
所以现在真正的代码:
static double cosine_similarity(Map<String, Double> v1, Map<String, Double> v2) {
Set<String> both = Sets.newHashSet(v1.keySet());
both.retainAll(v2.keySet());
double sclar = 0, norm1 = 0, norm2 = 0;
for (String k : both) sclar += v1.get(k) * v2.get(k);
for (String k : v1.keySet()) norm1 += v1.get(k) * v1.get(k);
for (String k : v2.keySet()) norm2 += v2.get(k) * v2.get(k);
return sclar / Math.sqrt(norm1 * norm2);
}
我认为上面的示例代码中有一个错误。更正后的代码如下。
static double cosine_similarity(Map<String, Double> v1, Map<String, Double> v2) {
Set<String> both = Sets.newHashSet(v1.keySet());
both.removeAll(v2.keySet());
double sclar = 0, norm1 = 0, norm2 = 0;
/* We need to perform cosine similarity only on words that
* exist in both lists */
for (String k : both) {
sclar += v1.get(k) * v2.get(k);
norm1 += v1.get(k) * v1.get(k);
norm2 += v2.get(k) * v2.get(k);
}
return sclar / Math.sqrt(norm1 * norm2);
}