【问题标题】:Group matrix filled with similarity scores into buckets将填充有相似度分数的矩阵分组到桶中
【发布时间】:2020-02-06 06:35:07
【问题描述】:

假设我们在strs 中有 n 个字符串。您将所有字符串比较在一起,全排列 (n^2) 并构建一个 nxn 矩阵,其中每个单元格是 2 个字符串 (i, j) 之间的相似度分数。

如何更进一步并将它们分组到存储桶中?实际上,我希望这些字符串相似/落入一个桶中——但有可能一些新字符串可能不会,所以我想找到最相似的地方或重新计算桶。

public Map<String, List<String>> bucketIt(String[] strs) {
    int[][] arr = new int[strs.length][strs.length];
    for (int i = 0; i < strs.length; i++) {
        for (int j = 0; j < strs.length; j++) {
            arr[i][j] = getSimilarityScore(strs[i], strs[j]);
        }
    }

    // How do I take the scores out of arr[][] and group the strings of strs into buckets.
}

我打算使用tdebatty/java-string-similarity 来计算分数。对所有桶使用阈值的解决方案也是可以接受的。

【问题讨论】:

  • 到目前为止尝试/研究了什么?分享您的想法/发现。
  • 那么在计算了成对相似度之后,你想cluster他们吗?

标签: java algorithm sorting data-science computer-science


【解决方案1】:

也许您可以使用 HashTable 类型的方法,在同一个存储桶中存储相似的字符串(即分数在 [score - bucket_size, score + bucket_size) 范围内)。

存储桶只是一个包含所有字符串的(链接)列表的数组,这些字符串具有上述定义的相似分数。

理想情况下,您希望保持桶中的列表较小,并使用指数增长算法根据需要增加桶的数量。当你长大后,你会重新整理你的表格。

【讨论】:

  • 我喜欢这个解决方案。这很简单,我认为它会起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
相关资源
最近更新 更多