模糊名称匹配算法

时间:2013-06-13 11:57:17

标签: sql-server fuzzy-logic

我有一个包含某些黑名单公司和个人名字的数据库。 创建所有交易,需要根据这些列入黑名单的名称扫描其详细信息。创建的交易可能具有未正确拼写的名称,例如,可以将“Wilson”写为“Wilson”,“Vilson”或“Veelson”。模糊搜索逻辑或实用程序应与列入黑名单的数据库中的名称“Wilson”匹配,并且基于用户设置的所需正确性/准确性百分比,必须在百分比集中显示匹配的名称。

交易将分批或实时发送,以检查黑名单。

我将不胜感激,如果具有类似要求且已实施这些要求的用户也可以提供他们的观点和实施

1 个答案:

答案 0 :(得分:4)

T-SQL在模糊搜索领域有很多不足之处。您最好的选择是第三方库,但如果您不想搞砸,最好的方法是使用SQL Server内置的DIFFERENCE函数。例如:

SELECT * FROM tblUsers U WHERE DIFFERENCE(U.Name, @nameEntered) >= 3

DIFFERENCE的返回值越高表示准确度越高。这样做的一个缺点是该算法有利于听起来相似的单词,这可能不是您想要的特性。

下一个示例显示了如何从表中获得最佳匹配:

DECLARE @users TABLE (Name VARCHAR(255))

INSERT INTO @users VALUES ('Dylan'), ('Bob'), ('Tester'), ('Dude')

SELECT *, MAX(DIFFERENCE(Name, 'Dillon')) AS SCORE FROM @users GROUP BY Name ORDER BY SCORE DESC

它返回:

 Name | Score
 Dylan  4
 Dude   3
 Bob    2
 Tester 0