超模糊名称检查?

Jon*_*now 15 javascript c# sql-server asp.net fuzzy-search

我正在研究一些内部CRM的东西.该公司目前的前端允许大量重复.我试图阻止最终用户加入同一个人,因为他们搜索的是"比尔约翰逊",而不是"威廉约翰逊".因此,用户将提供有关其新客户的一些信息,我们将找到相似的名称(包括模糊名称),并将它们与我们数据库中已有的内容进行匹配,并询问它们是否意味着那些东西......是这样的数据库还是技术存在吗?

R. *_*ill 6

我在一个网站上实现了这样的功能.我在PHP中使用double_metaphone()+ levenstein().我为dabatase中的每个条目预先计算了double_metaphone(),我使用"metaphoned"搜索词的前x个字符的SELECT进行查找.

然后我根据他们的levenstein距离对返回的结果进行排序.double_metaphone()不是任何PHP库的一部分(我上次检查过),所以我借用了很久以前在网上找到的PHP实现(网站不再在线).我应该把它贴在我想的地方.

编辑:该网站仍处于archive.org: http://web.archive.org/web/20080728063208/http://swoodbridge.com/DoubleMetaPhone/

或谷歌缓存:http://webcache.googleusercontent.com/search?q= cache:Tr9taWl9hMIJ: swoodbridge.com/DoubleMetaPhone/+Stephen+Woodbridge+double_metaphon

这导致许多其他有用的链接与double_metaphone()的源代码,包括在github上的Javascript:http://github.com/maritz/js-double-metaphone

编辑:通过我的旧代码,这里大致是我做的步骤,伪编码,以保持清晰:

1)为数据库中的每个单词预先计算double_metaphone(),即$ word ='blahblah'; $ soundslike = double_metaphone($字);

2)在查找时,$ word对数据库进行模糊搜索:$ soundslike = double_metaphone($ word)

4)SELECT*FROM tableWHERE soundlikeLIKE $ soundlike(如果你将levenstein存储为一个过程,那就更好了:SELECT*FROM table WHERE levenstein(soundlike,$ soundlike)<mythreshold ORDER BY levenstein(word,$ word)ASC LIMIT ......等等

它对我来说效果很好,虽然我不能使用存储过程,因为我无法控制服务器并且它使用的是MySQL 4.20或其他东西.