Ответ действительно зависит от того, как вы моделируете своих пользователей и что представляет собой дубликат.
Возможно, пользователь использует имена всех персонажей Гарри Поттера. Удачи в поиске этого паттерна:)
Если вы ищете записи, которые приблизительно похожи, попробуйте этот простой подход:
Хэшируйте каждое слово в документе и выбирайте минимальный гонт. Сделайте это для k различных хеш-функций. Объедините эти минимальные хеши. То, что у вас есть, является почти дубликатом.
Для ясности, допустим, в записи есть слова w1 .... wn. Допустим, ваши хеш-функции h1 ... hk.
let m_i = min_j (h_i (w_j)
и подпись S = m1.m2.m3 .... mk
Крутая вещь с этой подписью состоит в том, что если два документа содержат 90% одинаковых слов, то есть хороший шанс того, что подписи для этих двух документов будут одинаковыми. Следовательно, вместо поиска близких дубликатов, вы ищете точные дубликаты в сигнатурах. Если вы хотите увеличить количество совпадений, тогда вы уменьшаете значение k, если вы получаете слишком много ложных срабатываний, то вы увеличиваете число k.
Конечно, существует подход неявных функций пользователей, таких как их IP-адреса, файлы cookie и т. Д.