Нечеткая логика с использованием MySQL - PullRequest
0 голосов
/ 20 марта 2012

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

Ramu
Rahim
Raju
Ravan
Mustafa

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

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

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

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

Ответы [ 3 ]

1 голос
/ 20 марта 2012

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

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

0 голосов
/ 20 марта 2012

Вы запрашиваете алгоритм для сравнения строк или как использовать такой алгоритм в SQL-запросе?

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

Так что-то вроде:

SELECT name, MyFuzzyStringComparer(name, @nameInQuestion) percentage 
FROM nameTable 
WHERE percentage > @threshold 
ORDER BY percentage

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

0 голосов
/ 20 марта 2012

есть UDF для mysql, который вы можете найти здесь: http://joshdrew.com/

ищите: [2004-02-06] - MySQL Levenshtein Distance UDF

вы можете использоватьLevenshtein Расстояние для вычисления процентной разницы.

это может выглядеть следующим образом:

(min (length ('hello'), length ('hollo')) - LevDist ('hello', 'Привет ')) / мин (длина (' Привет '), длина (' Привет '))

...