我正在为一家内部客户关系管理系统工作。公司当前的前端允许存在大量重复。我想要阻止终端用户因为搜索'Billy Johnson'而不是'William Johnson'而输入相同的人员信息。所以当用户输入有关他们的新客户的一些信息时,我们将寻找相似的名称(包括模糊名称),并将它们与我们数据库中已有的内容进行匹配,并询问他们是否指的是这些内容... 是否存在这样的数据库或技术?
我正在为一家内部客户关系管理系统工作。公司当前的前端允许存在大量重复。我想要阻止终端用户因为搜索'Billy Johnson'而不是'William Johnson'而输入相同的人员信息。所以当用户输入有关他们的新客户的一些信息时,我们将寻找相似的名称(包括模糊名称),并将它们与我们数据库中已有的内容进行匹配,并询问他们是否指的是这些内容... 是否存在这样的数据库或技术?
这将导致许多有关double_metaphone()源代码的其他有用链接,其中包括Github上的Javascript示例:http://github.com/maritz/js-double-metaphone
编辑:浏览了我的旧代码,以下是我大致的步骤,伪代码以保持清晰:
1)为数据库中的每个单词预先计算double_metaphone(),即$word='blahblah'; $soundslike=double_metaphone($word);
2)在查找时,使用模糊搜索将$word与数据库进行匹配:$soundslike = double_metaphone($word)
4)SELECT * FROM table
WHERE soundlike
LIKE $soundlike(如果您已将levenstein存储为过程,则更好:SELECT * FROM table WHERE levenstein(soundlike
,$soundlike) < mythreshold ORDER BY levenstein(word
,$word) ASC LIMIT ...等等。
对我来说它运行良好,尽管我无法使用存储过程,因为我无法控制服务器并且它正在使用MySQL 4.20或类似版本。
嗯,SSIS有一些模糊逻辑任务,我们用来在事后查找重复项。
我认为,为了获得最佳结果,您需要让您的逻辑考虑更多的因素,而不仅仅是名称。如果他们输入地址、电子邮件或电话信息,也许您可以寻找具有相同姓氏和其中一个或多个其他匹配项的人,并询问其中之一是否可行。您还可以制作各种名称的昵称表,并进行匹配。您可能无法获取所有内容,但至少可以获得您国家中最常见的一些内容。
您可以使用SOUNDEX来获取类似发音的名称。但是,例如William和Bill不会匹配。
作为示例,请在SQL中尝试此操作。
SELECT SOUNDEX('John'), SOUNDEX('Jon')
SQL Server 中有一些内置的 SOUNDS LIKE 功能,可以查看 SOUNDEX http://msdn.microsoft.com/en-us/library/aa259235%28SQL.80%29.aspx
至于全名/昵称搜索,我不知道是否有任何内置的功能。昵称因地区而异,需要跟踪大量信息。您可能会发现一个将全名链接到昵称的数据库,可以在自己的应用程序中利用它。