Если вы намереваетесь сравнивать только два документа за раз (насколько сходен документ A с документом B?), То сохранение мини-хэшей каждого документа в виде объединенной строки - это нормально. Вы бы сравнили два документа, разбив строки каждого документа обратно на составляющие их мини-хэши и посчитав, сколько мини-хэшей было разделено (идентично).
Но если вы хотите спросить «какие другие документы похожи на документ А», это плохое решение, поскольку вам придется сравнивать документ А по отдельности с любым другим документом, который вы ранее видели. Хуже того, если вы хотите найти все сходства между документами в корпусе, вы должны сравнить каждый документ с любым другим документом. В группе из 1000 документов это потребует 499 500 сравнений. С миллионами документов это почти 500 миллиардов сравнений. Это проблема O (n 2 ).
Вместо этого, подходящий способ сделать это - сохранить хеш-словарь, сопоставляя минши с идентификаторами документов. Каждый раз, когда вы сталкиваетесь с новым документом, вы генерируете его мини-хэши, а затем ищите в словаре хэшей все остальные документы, которые имеют один или несколько из этих хэшей. Чем больше хэшей разделяет документ с входящим документом, тем выше его приблизительное сходство с jaccard.
Наконец, вы добавляете все мелкие строки для нового документа в хеш-словарь, чтобы он был доступен для будущих поисков.
Скорее всего, вас интересуют только сходства, когда, по крайней мере, скажем, половина minhashes разделена (примерно 50% сходство с jaccard), но для их поиска все еще может потребоваться много вычислений, поскольку могут быть миллионы документы, которые разделяют по крайней мере один minhash с входящим документом, и вам нужно подсчитать количество общих хэшей для каждого. Хеширование с учетом локальных условий может существенно сократить количество обращений (и необходимое хранилище).