Нечеткая логика с использованием MySQL
Мне нужно выполнить поиск по списку имен и найти соответствующие совпадающие имена с соответствующим процентом. Например, если у меня есть список имен, как,
Ramu
Rahim
Raju
Ravan
Mustafa
если я дам имя как Рахим, он узнает имя Рахим и отобразит соответствующий процент как
Given Input:Raheem
Output:
Name Rahim match with the name Raheem 70%
Могу ли я удовлетворить мои требования, используя MySql?
Примечание: я пробовал с полнотекстовым поиском в mysql, но этот поиск соответствовал только словам, а не символам
3 ответа
Есть UDF для MySQL, который вы можете найти здесь: http://joshdrew.com/
ищите: [2004-02-06] - MySQL Левенштейна Расстояние UDF
Вы можете использовать Расстояние Левенштейна, чтобы вычислить разницу в процентах.
это может выглядеть так:
(min (длина ('привет'), длина ('привет')) - LevDist('привет', 'привет')) / мин (длина ('привет'), длина ('привет'))
Вы запрашиваете алгоритм для сравнения строк, или как использовать такой алгоритм в запросе SQL?
Если вы спрашиваете последнее, создайте пользовательскую функцию, которая выводит процент на основе 2 входных строк, затем выберите для каждой строки в таблице и отфильтруйте, где процент выше любого порога, который вы ищете.
Так что-то вроде:
SELECT name, MyFuzzyStringComparer(name, @nameInQuestion) percentage
FROM nameTable
WHERE percentage > @threshold
ORDER BY percentage
Если вы ищете алгоритм сравнения, то приведенные выше ответы, кажется, покрывают его.