Java 基于mysql的模糊逻辑
我需要通过姓名列表进行搜索,找到匹配百分比的相关匹配姓名。例如,如果我有类似的姓名列表Java 基于mysql的模糊逻辑,java,mysql,fuzzy-logic,Java,Mysql,Fuzzy Logic,我需要通过姓名列表进行搜索,找到匹配百分比的相关匹配姓名。例如,如果我有类似的姓名列表 Ramu Rahim Raju Ravan Mustafa 如果我叫Raheem这个名字, 它将找到名称Rahim并显示匹配百分比,如 Given Input:Raheem Output: Name Rahim match with the name Raheem 70% 我可以使用MySql满足我的需求吗 注意:我在mysql中尝试过全文搜索,但是这种搜索 仅与单词匹配,不按字符匹配 虽然它不能直接回答
Ramu
Rahim
Raju
Ravan
Mustafa
如果我叫Raheem这个名字,
它将找到名称Rahim并显示匹配百分比,如
Given Input:Raheem
Output:
Name Rahim match with the name Raheem 70%
我可以使用MySql满足我的需求吗
注意:我在mysql中尝试过全文搜索,但是这种搜索
仅与单词匹配,不按字符匹配
虽然它不能直接回答您的问题,但您可能希望使用或 Soundex是一种语音算法,用于按声音索引名称,如 用英语发音
mysql有一个UDF,您可以在这里找到: 查找[2004-02-06]-MySQL Levenshtein距离UDF 您可以使用Levenshtein距离计算百分比差异 这可能看起来像:
(min(length('hello')、length('hollo'))-LevDist('hello','hollo'))/min(length('hello')、length('hollo'))您是否要求使用算法来比较字符串,或者如何在sql查询中使用这种算法 如果您要求后者,请创建一个用户定义的函数,该函数根据2个输入字符串输出百分比,然后为表中的每个字符串选择,并筛选百分比高于您要查找的阈值的位置 比如:
SELECT name, MyFuzzyStringComparer(name, @nameInQuestion) percentage
FROM nameTable
WHERE percentage > @threshold
ORDER BY percentage
如果你正在寻找一种比较算法,那么上面的回答似乎涵盖了这一点。也许他可以创建一个全文字段,其中包含每个名称,并逐字转换为soundex,可以快速搜索,例如:而不是索引
亚瑟·柯南·道尔爵士
,索引S600 A636 C550 D400
。SOUNDEX也适用于mysql:也许触发器将是最好的解决方案,它将对SOUNDEX进行索引转换。您好,选择SOUNDEX('Raheem'),选择SOUNDEX('Rahim'),选择SOUNDEX('Ram')).所有三个都重新发布了索引R500。我认为我的概念有点模糊。还有其他想法吗?@MuneeswaranBalasubramanian Metaphone将分别返回RHM、RHM、RM。你可以试试看Levenstein距离会告诉你Raheem和Rahim 3个符号的距离。至于Raheem和Hakeem。当我尝试时,我得到了以下错误:mysqllevenshtein.cc:20:23:致命错误:my_global.h:没有终止此类文件或目录编译。我如何解决这个问题并将其放入mysql?您还可以使用如下存储过程: