我希望从name
列的MySQL表中显示所有可能的重复条目。
例如,Adobe Photoshop和Photoshop应显示为“可能的重复项”。
这可能吗?
答案 0 :(得分:1)
您可以从使用SOUNDEX()
开始,这可能会满足您的需求
SOUNDEX()
的缺点是:
示例:
SELECT SOUNDEX('Microsoft')
SELECT SOUNDEX('Microsift')
SELECT SOUNDEX('Microsift Corporation')
SELECT SOUNDEX('Microsift Subsidary')
/* all of these return 'M262' */
对于更高级的需求,我认为您需要查看两个字符串的Levenshtein distance(也称为“编辑距离”)并使用阈值。这是更复杂(=更慢)的解决方案,但它允许更大的灵活性。
主要缺点是,您需要两个字符串来计算它们之间的距离。使用SOUNDEX,您可以在表格中存储预先计算的SOUNDEX,并对其进行比较/排序/分组/过滤。使用Levenshtein距离,您可能会发现“Microsoft”和“Nzcrosoft”之间的区别仅为2,但需要花费更多时间才能得出结果。
无论如何,可以在Levenshtein Distance as a MySQL Stored Function 找到MySQL的Levenshtein距离函数示例。