Нечеткая логика с использованием MySQL

Мне нужно выполнить поиск по списку имен и найти соответствующие совпадающие имена с соответствующим процентом. Например, если у меня есть список имен, как,

Ramu
Rahim
Raju
Ravan
Mustafa

если я дам имя как Рахим, он узнает имя Рахим и отобразит соответствующий процент как

Given Input:Raheem
Output:
Name Rahim match with the name Raheem 70%

Могу ли я удовлетворить мои требования, используя MySql?

Примечание: я пробовал с полнотекстовым поиском в mysql, но этот поиск соответствовал только словам, а не символам

3 ответа

Хотя он не отвечает на ваш вопрос напрямую, вы можете использовать Soundex или Metaphone.

Soundex - это фонетический алгоритм для индексации имен по звуку, как произносится на английском языке.

Есть 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

Если вы ищете алгоритм сравнения, то приведенные выше ответы, кажется, покрывают его.

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