Групповая матрица, заполненная показателями сходства в ведра - PullRequest
0 голосов
/ 06 февраля 2020

Допустим, у нас есть n строк в strs. Вы сравниваете все строки вместе, полную перестановку (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 для подсчета очков. Решение, которое использует пороговое значение для всех сегментов, также приемлемо.

1 Ответ

0 голосов
/ 06 февраля 2020

Возможно, вы могли бы использовать подход типа HashTable, в котором вы храните похожие строки (то есть, имеющие оценки в диапазоне [score - bucket_size, score + bucket_size)) в одном и том же сегменте.

Элементы будут просто массив (связанных) списков всех строк, имеющих одинаковые оценки, как определено выше.

В идеале вы хотели бы, чтобы списки в сегментах были небольшими и использовали алгоритм экспоненциального роста, чтобы увеличить количество сегментов по мере необходимости. Когда вы вырастете, вы будете reha sh ваш стол.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...