Подтвердить что ты не робот

Хороший запрос mysql для поиска похожих значений в одном столбце

У меня есть повторяющиеся записи, которые очень похожи, но не точны. Вот несколько примеров:

- 2016: Obama America
- 2016: Obama America (VF)

- Hurt Locker
- The Hurt Locker

Каким будет запрос, который я мог бы использовать, чтобы получить потенциально похожий titles?

Обновление: Обратите внимание, что я не пытаюсь удалить EXACT дубликаты. Я просто пытаюсь выбрать одинаковые значения в одном столбце.

4b9b3361

Ответ 1

Не уверен, что это лучший способ или самый эффективный, и это определенно зависит от значения подобного. Если смысл в заголовке содержит весь текст в одной строке, но часть текста в другой строке, то что-то вроде этого должно работать:

SELECT DISTINCT T.Title
FROM YourTable T
   LEFT JOIN YourTable T2 ON T.Title != T2.Title
WHERE T.Title LIKE CONCAT('%', T2.Title, '%')
UNION 
SELECT DISTINCT T2.Title
FROM YourTable T
   LEFT JOIN YourTable T2 ON T.Title != T2.Title
WHERE T.Title LIKE CONCAT('%', T2.Title, '%')
ORDER BY Title

И вот SQL Fiddle.

Ответ 2

Я думаю, что это можно решить, измеряя расстояние между строками с помощью строковой метрики.

Levenshtein, по-видимому, является самой известной метрикой, и я использовал некоторую реализацию этого в Oracle. Это реализовано для MySQL. Вы можете найти другую метрику, которая будет работать лучше для вас.