15

我正在为内部 CRM 做一些事情。该公司当前的前端允许大量重复。我试图阻止最终用户输入同一个人,因为他们搜索的是“Bill Johnson”而不是“William Johnson”。因此,用户将输入一些关于他们的新客户的信息,我们会找到相似的名称(包括模糊名称)并将它们与我们数据库中已有的内容进行匹配,并询问他们是否意味着这些东西......这样的数据库或技术存在吗?

4

6 回答 6

6

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

然后我根据他们的列文斯坦距离对返回的结果进行排序。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($word);

2) 在查找时,对数据库进行模糊搜索:$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 或其他东西。

于 2010-07-20T13:38:12.623 回答
4

我曾经问过类似的问题。Name Hypocorism List 我从来没有用它做任何事情,但问题在工作中再次出现,所以我可能会在 .net 中编写并开源一个库来进行一些匹配。

更新: 我将我在那里提到的 perl 模块移植到 C# 并将它放在 github 上。 http://github.com/stimms/昵称

于 2010-07-20T13:27:10.337 回答
2

实现 Levenshtein 距离:

http://en.wikipedia.org/wiki/Levenshtein_distance

这可以写成 SQL 函数并以多种不同的方式进行查询。

于 2010-07-20T13:25:44.850 回答
1

好吧,SSIS 有一些模糊逻辑任务,我们用来在事后查找重复项。

我认为虽然你需要让你的逻辑不仅仅是名称以获得最佳结果。如果他们输入地址、电子邮件或电话信息,也许您可​​以寻找具有相同姓氏的人与一个或多个其他匹配项,并询问他们中的一个是否会这样做。您还可以为各种名称制作一个昵称表并与之匹配。你不会得到所有这些,但你至少可以得到一些在你的国家最常见的。

于 2010-07-20T13:32:40.917 回答
0

您可以使用 SOUNDEX 获得类似的发音名称。但是,它不会与例如威廉和比尔相匹配。

以 SQL 为例试试这个。

SELECT SOUNDEX('John'), SOUNDEX('Jon')
于 2010-07-20T13:26:47.237 回答
0

SQL Server 中有一些内置的 SOUNDS LIKE 功能,请参阅 SOUNDEX http://msdn.microsoft.com/en-us/library/aa259235%28SQL.80%29.aspx

至于完整/昵称搜索,我知道没有任何构建它。昵称因地区而异,需要跟踪的信息很多。可能有一个将全名链接到昵称的数​​据库,您可以在自己的应用程序中使用这些昵称。

于 2010-07-20T13:27:33.363 回答