Я знаю, что это старый пост, но для тех, кто приходит к нему в поисках похожих алгоритмов, особенно хорошо работает косинусное сходство. Найдите способ векторизовать свои записи, затем ищите векторы с минимальным углом между ними. Если векторизация записи нетривиальна, то вы можете векторизовать сходство между ними с помощью некоторого известного алгоритма, а затем посмотреть на косинусное сходство векторов сходства с вектором идеального соответствия (при условии, что идеальные совпадения не являются целью, поскольку их легко найти). все равно найдешь). Я получаю потрясающие результаты при таком сопоставлении, даже сравнивая такие вещи, как списки людей в разных странах, работающих над конкретным проектом, с различным вкладом в проект. Векторизация подразумевает просмотр количества совпадений стран, несоответствий стран, соотношения людей в соответствующей стране между двумя наборами данных и т. д. и т. д. и т. д. Я использую функции расстояния редактирования строки, такие как расстояние Левенштейна, для получения числового значения из различий строк, но можно использовать фонетическое сопоставление и т. д. Пока целевое число не равно 0 (вектор [0 0 ... 0] является подпространством ЛЮБОГО вектора, и, следовательно, его угол будет неопределенным. Иногда, чтобы уйти от проблемы, например, в случае редактирования расстояние, я придаю идеальному совпадению (e.d. 0) отрицательный вес, так что идеальное совпадение действительно подчеркивается. 1 опечатка.
Cos(theta) = (A dot B) / (Norm(A)*Norm(B)), где точка — скалярное произведение, а Norm — евклидова величина вектора.
Удачи!
person
Greg K
schedule
25.10.2011