Здравствуйте, уважаемые математики и не совсем математики!
Так как сам я в этой теме не силен, то прошу прощения, если создал тему не в той ветке — думаю, администратор сможет перенести ее, если что-то не так.
Задача оказалась не совсем тривиальной (по крайней мере для меня).
Приступлю к описанию:
Существует алгоритм, который нормализует строки (так скажем, минимизирует возможные опечатки в них) (алгоритм MetaPhone, адаптированный под русский язык [
http://web.archive.org/web/20071107145942/http://kankowski.narod.ru/dev/metaphoneru.htm] и адаптированный мной под нужды задачи).
И существует другой алгоритм, в котором эти нормализированные строки перемалываются и вычисляются определенные переменные. На основе этих переменных нужно составить формулу, результат которой будет соответствовать идентичности строк (от 0 до 100 или от 0 до 1).
Приведу пример:
Сравниваемая строка: «ПУШКИН»
Эталонная строка «АЛИКСАНДРСИРГИИВИЧПУШКИН»
: количество похожих чанков: 5
: количество идущих подряд похожих чанков: 5
: количество несовпадающих чанков: 0
: разница в количестве чанков: 18
: количество чанков в эталонной строке: 23
: количество чанков в сравниваемой строке: 5
Пояснения: строка разбивается на чанки (части) со сдвигом на один символ. Доспустимые изменения в алгоритме - можно менять размер чанка (сейчас это 2 символа), можно менять нормализацию (например не удалять пробелы).
В случае строки «ПУШКИН», чанки получаются такими: ПУ, УШ, ШК, КИ, ИН
Мной использовались варианты:
- плохие результаты
- плохие результаты
- средние результаты
Ну и + с различными вариациями
и
в формуле. Либо было неуниверсально, либо слишком далеко от реальности
Буду рад дискуссии и помощи
i |
Deggial: формулы поправил, формулы оформляйте ом. Инструкции по оформлению формул здесь или здесь (или в этом видеоролике). |