Определите дубликаты ключевых слов в свободном тексте с процентным соответствием

В моей базе данных есть несколько названий имен, которые очень часто создаются и воссоздаются с небольшими изменениями. С ручным зрачком можно легко идентифицировать их как дубликаты с незначительными изменениями правописания. Например,

 Resort Inn, Res Ort Inn, Rsort Inn и т. Д. 
и так далее. То, что я ищу, - это решение, которое дает процентное совпадение ключевых слов, которые ищут как дубликаты. Исходный набор может быть недостаточно большим, но набор ссылок может входить в миллионы данных. Таким образом, потенциальный mysql "матч против" не масштабируется. Также набор ссылок индексируется в mysql и sphinx. Текущая логика дублирования не совсем фиксирует все дубликаты. Например,

Мой Кнн Ризорт
Moy-Knn
Мой Кнн Ризорт
Moeyy-Knn American Food

Все это дубликаты по моему мнению. Но четвертый вовсе не попадает в плен. Я понимаю, что они выглядят одинаково, но некоторые процентные числа после сравнения, исключая гласные и другие вещи, помогут. Предпочтительное решение в основном будет с php-sphinx, так как большая его часть уже готова или awk (если возможно и в меру комфортно). Если нет, подойдет любая логика с открытым исходным кодом (python/perl и т. Д.).

1 ответ

Ну, может использовать что-то вроде http://php.net/manual/en/function.levenshtein.php чтобы дать вам фактический "процент".

Но, безусловно, вы хотите какое-то совпадение "первого прохода", чтобы дать вам вероятных кандидатов (так что вам не нужно запускать levenshtein на миллионах строк),

Честно говоря, я думаю, что будет трудно заставить что-то работать в Сфинксе, особенно учитывая ваш последний пример. Это совсем другое. Единственное, что может помочь, - это http://sphinxsearch.com/docs/current.html и системы Soundex / metaphone. Существует небольшая вероятность того, что ваши "похожие" слова будут действительно "звучать" одинаково.

Другие вопросы по тегам