模糊姓名匹配算法

5
我有一个包含某些列入黑名单的公司和个人名称的数据库。所有创建的交易,其详细信息都需要与这些黑名单名称进行扫描匹配。由于创建的交易可能存在名称拼写不正确的情况,例如一个人可能将“Wilson”拼写为“Wilson”、“Vilson”或“Veelson”。模糊搜索逻辑或工具应该针对黑名单数据库中存在的“Wilson”名称进行匹配,并根据用户设置的所需正确性/准确性百分比,在百分比范围内显示匹配的名称。
交易将会按批次或实时发送以检查是否存在黑名单名称。
如果有类似需求并已经实现的用户,我将感激他们提供他们的想法和实现方式。

请展示一些代码。 - Tiago Sippert
它是否来自SDN名单?http://www.treasury.gov/resource-center/sanctions/SDN-List/Pages/default.aspx - Andy Hayden
1个回答

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

感谢dkoch的回复,您能推荐一款好的第三方工具吗?另外,如果有任何可以与阿拉伯语一起使用的工具,它将获取阿拉伯语名称/单词并与英文参考表进行比较。 - user2477549

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接