2012-03-20 5 views
0

мне нужно искать через список имен и выяснить соответствующие согласованные имена с согласованием percentage.For Например, если у меня есть список имен, как,нечеткой логики с использованием MySQL

Ramu 
Rahim 
Raju 
Ravan 
Mustafa 

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

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

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

Note:I have tried with the FullText search in mysql,But that search match with only the words not by the characters

+0

См. Http://en.wikipedia.org/wiki/Approximate_string_matching – biziclop

ответ

1

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

Soundex is a phonetic algorithm for indexing names by sound, as pronounced in English.

+1

Возможно, он мог бы создать поле полного текста, которое содержит каждое имя, преобразованное в словосочетание soundex-word, которое можно быстро найти, например: вместо индексации 'Сэр Артур Конан Дойл', индекс' S600 A636 C550 D400'. – biziclop

+0

SOUNDEX также используется для mysql: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex – user1027167

+0

Возможно, триггер будет лучшим решением, которое сделает преобразование soundex для индексирования , – biziclop

0

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

ищет: [2004-02-06] - MySQL Расстояние Левенштейна UDF

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

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

(мин (длина ('привет'), длина ('оклик')) - LevDist ('Hello', 'Holló'))/мин (длина ('привет'), length ('hollo'))

+0

Расстояние Левенштайна скажет вам, что Рахим и Рахим 3 символа. Насколько Рахим и Хакем. –

+0

Когда я попытаюсь получить следующую ошибку, mysqllevenshtein.cc: 20: 23: фатальная ошибка: my_global.h: Нет такого файла или каталога компиляция завершена. Как я могу решить эту проблему и поместить в mysql? –

+0

вы также можете использовать хранимую процедуру следующим образом: http://www.supermind.org/blog/927/working-mysql-5-1-levenshtein-stored-procedure – user1027167

0

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

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

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

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

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