Я знаю, что это старый пост, но для любого, кто его ищет, ищет похожие алгоритмы, особенно хорошо работает Cosine Similarity. Найдите способ векторизации ваших записей, затем найдите векторы с минимальным углом между ними. Если векторизация записи не тривиальна, то вы можете векторизовать сходство между ними с помощью некоторого известного алгоритма, а затем посмотреть на косинусное сходство векторов сходства с вектором идеального совпадения (предполагая, что идеальные совпадения не являются целью, поскольку их легко все равно найду). Благодаря этому сопоставлению я получаю потрясающие результаты, даже сравнивая такие вещи, как списки людей в разных странах, работающих над конкретным проектом, с различным вкладом в проект. Векторизация подразумевает просмотр количества совпадений стран, несоответствий стран, соотношения людей в сопоставляемой стране между двумя наборами данных и т. Д. И т. Д. И т. Д. Я использую функции расстояния редактирования строк, такие как расстояние Левенштейна, для получения числового значения из различий строк, но можно использовать фонетическое соответствие и т. д. До тех пор, пока целевое число не равно 0 (вектор [0 0 ... 0] является подпространством ЛЮБОГО вектора и, следовательно, его угол будет неопределенным. Иногда, чтобы избежать проблемы, например, в случае редактирования расстояние, я даю идеальное совпадение (ed 0) отрицательный вес, так что идеальные совпадения действительно подчеркиваются. -1 и 1 дальше, чем 1 и 2, что имеет большой смысл - идеальное совпадение лучше, чем что-либо еще с 1 опечатка.
Cos (тета) = (Точка B) / (Норма (A) * Норма (B)), где точка - это скалярное произведение, а Norm - евклидова величина вектора.
Удачи!