java - Java中的 vector 空间模型算法来获得两个人之间的相似度分数

标签 java algorithm vector artificial-intelligence text-mining

我正在尝试在 Java 中使用/实现 vector 空间模型算法,以根据关键字获得两个人之间的相似度分数。所以我有以下类(class):

Person - 有一个关键字列表;

关键字 - 字符串文本; 整数分;

关键字得分是用户提及关键字的次数。

关于如何在 Java 中实现它有什么建议吗?

问候

最佳答案

非常简单。

  1. 首先,您应该创建 vector 表示,例如每个人代表其关键字的 map 。
  2. 其次你应该选择指标,我会推荐 http://en.wikipedia.org/wiki/Cosine_similarity .

现在是真正的代码:

  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);
    }

关于java - Java中的 vector 空间模型算法来获得两个人之间的相似度分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3622112/

相关文章:

c++ - 将 vector 引用复制到另一个

java - 包含传统部分和 SL4A 部分的 Android 应用程序

java - uuid5 实现中命名空间是必需的吗?

java - 在 3d 中找到 2 个任意立方体的交集

java - 使用四叉树获取边界圆内的所有点

c++ - vector 的随机访问

c++ - 重载运算符以合并 vector

java - 如何从文件导入和操作字符串

algorithm - 主方法 - 为什么它不能解 T(n) = T(n/2) + n^2/logn?

algorithm - 需要 3D 旋转算法