数据清理 - 如何确定哪些名称是拼写错误或相同但略有不同?

时间:2013-09-16 10:02:45

标签: sql sql-server data-analysis data-cleansing

我们有公司名称和数字主键标识的表格。我们正在清理数据,我们发现名称列中充满了代表同一公司的类似名称。

E.g。 BA和Ba或GTC Ltd和GTC Limited。

无论如何使用SQL服务器我们可以获得具有相似名称和ID列表的所有项目的计数和摘要。我想知道是否存在某种相似性比较,我们可以设置等值的阈值

我们需要向客户端提供一个看起来需要合并的名称列表。

4 个答案:

答案 0 :(得分:1)

您的答案取决于SoundEx()Difference()函数。

DECLARE @a varchar(50) = 'BA'
      , @b varchar(50) = 'Ba'
;

SELECT @a
     , @b
     , SoundEx(@a)
     , SoundEx(@b)
     , Difference(@a, @b)
;

SET @a = 'GTC Ltd';
SET @b = 'GTC Limited';

SELECT @a
     , @b
     , SoundEx(@a)
     , SoundEx(@b)
     , Difference(@a, @b)
;

SET @a = 'BLAH';

SELECT @a
     , @b
     , SoundEx(@a)
     , SoundEx(@b)
     , Difference(@a, @b)
;

SoundEx as “听起来像” - 它是一个返回输入表示的函数,您可以将其与其他输出进行比较。

Difference()函数返回0到4之间的值,其中较高的数字代表更好的匹配。

答案 1 :(得分:1)

有很多功能可以检查相似之处。 MS SQL提供了SOUNDEXDIFFERENCE函数,这些函数我从未实际使用过。

虽然我曾经在PHP中使用Levenshtein(将string1转换为string2的最小编辑),但它非常有效。以下是Devio's implementation in TSQL作为一个函数,您可以将其放入代码中:

SELECT 
    LEVENSHTEIN(COL1, COL2) 
FROM 
    ExampleTable

WHERE条件:

SELECT 
    COL1, COL2
FROM
    ExampleTable
WHERE
    LEVENSHTEIN(COL1, COL2) < 5

在这里,我建议您实施一些CASE - WHEN - THEN逻辑,以便根据需要找到正确的levenshtein距离。

答案 2 :(得分:1)

基本答案是“不”。名称整改是一个难题。 “GTC Ltd”和“GTC Limited”这两个名称与“GTC”和“GTE”(通过更明显的措施)有所不同。为此目的,有外部服务机构和专用软件。

如果您处理的是少量数据,我建议您按字母顺序排列值,将它们加载到Excel中,然后在Excel中添加一个带有“官方”名称的列。然后,您可以将其重新导入为数据库中的表,以执行您想要的操作。如果您删除已知的后缀和前缀,例如“ltd”,“bros”,“partners”等,它可能会有所帮助。

如果您尝试沿soundex()之类的路径前进,请确保understand it well。例如,以下两个字符串的soundex()值是相同的:“gte,blah blah blah”和“gdteey,junk goes here”。

答案 3 :(得分:0)

您可以使用COLLATE UTF8_GENERAL_CILIKE运算符来检查BA and Ba。 但是对于GTC Ltd and GTC Limited你仍然可以使用相同的但是你应该手动检查它们并仔细合并。