假设我们在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计算分数。对于所有存储桶都使用阈值的解决方案也是可以接受的。
也许您可以使用HashTable类型的方法在同一存储桶中存储相似的字符串(即,分数在[score-bucket_size,score + bucket_size]范围内)。
存储桶将只是具有相似得分的所有字符串的(链接的)列表的数组。
理想情况下,您希望将存储桶中的列表保持较小,并使用指数增长算法根据需要增加存储桶的数量。当您长大时,会重新整理桌子。