FUZZYDUP 命令
概念信息
检测字符域内几乎完全相同的值(模糊重复)。
说明
要使用模糊匹配将来自两个 Analytics 表的域合并为单个新的 Analytics 表,请参见FUZZYJOIN 命令。
语法
FUZZYDUP ON 键域 <OTHER 域 <...n>|OTHER ALL <EXCLUDE 域名称 <...n>>> LEVDISTANCE 值 <DIFFPCT 百分比> <RESULTSIZE 百分比> <EXACT> <IF 测试> TO 表名称 <LOCAL> <OPEN>
参数
| 名称 | 描述 |
|---|---|
| ON 键域 | 要检测其模糊重复的字符域或表达式。 |
| OTHER 域 <...n> | OTHER ALL 可选 |
要包括在输出中的一个或多个其他域。
|
| EXCLUDE 域名称 可选 |
仅在使用 OTHER ALL 时有效。 要从该命令中排除的一个或多个域。EXCLUDE 使您可以通过排除指定的域优化 OTHER ALL。 EXCLUDE 必须紧跟在 OTHER ALL 后面。例如: OTHER ALL EXCLUDE 域 1 域 2 |
| LEVDISTANCE 值 |
要将两个字符串标识为模糊重复并包含于结果中,它们之间允许的最大编辑距离。 LEVDISTANCE 值不能小于 1 或大于 10。增加 LEVDISTANCE 值通过包括具有更高模糊度即彼此差异更大的值来增加结果的数量。 有关详细信息,请参见FUZZYDUP 行为。 |
|
DIFFPCT 百分比 可选 |
可限制可能不相同的字符串的“差异百分比”或比例的阈值。 对潜在模糊重复对进行内部 Analytics 计算而得到的百分比必须小于或等于 DIFFPCT 值,以便将此模糊重复对包含在结果中。DIFFPCT 值不能小于 1 或大于 99。 如果省略 DIFFPCT,则阈值被关闭,且在处理 FUZZYDUP 命令期间不会考虑差异百分比。 有关详细信息,请参见FUZZYDUP 行为。 |
| RESULTSIZE 百分比 可选 |
将输出结果集的最大大小指定为键域中记录数的百分比。 例如,对于有 50,000 个记录的键域,如果结果超过 1500 个模糊重复 (50,000 x 0.03),则当 RESULTSIZE 为 3 时将结束处理。如果处理被终止,则不会生成任何输出表。 RESULTSIZE 值不能小于 1 或大于 1000% (百分之一千)。限额 1000% 的目的是为了适应多对多匹配的性质,这种匹配可生成比原测试数据集多很多的结果。 如果省略 RESULTSIZE,则阈值关闭,且在处理 FUZZYDUP 命令期间不会考虑结果大小。 注意 省略 RESULTSIZE 可能生成过大且需要很长时间进行处理的结果集,或者可能导致超出可用内存从而终止处理。仅当您确信结果具有可管理的大小时,才可以省略 RESULTSIZE。 |
|
EXACT 可选 |
在结果中包括完全重复以及模糊重复。 |
|
IF 测试 可选 |
一个条件表达式,它必须为真以便处理每个记录。仅对满足条件的那些记录执行该命令。 说明 在应用任何范围参数(WHILE、FIRST、NEXT)之后,仅针对表中的剩余记录评估 IF 条件。 |
|
TO 表名 |
要将命令结果发送到的位置:
|
|
LOCAL 可选 |
请将输出文件保存在与 Analytics 项目相同的位置。 说明 仅当针对服务器表运行该命令并且输出文件为 Analytics 表时适用。 LOCAL 参数必须紧跟在 TO 参数后面。 |
|
OPEN 可选 |
在命令执行后打开该命令创建的表。仅当该命令创建输出表时有效。 |
Analytics 输出变量
| 名称 | 包含 |
|---|---|
| GAPDUPn |
该命令识别出的间隔、重复或模糊重复组的总数。 |
示例
测试姓氏域中是否存在模糊重复项
您测试一个姓氏域是否存在模糊重复值(ACL DATA\Sample Data Files\Metaphor_Employee_Data.ACL 中 Employee_List 表中的姓氏域)。结果输出到一个新的 Analytics 表中。
- 除测试域外,其他域也被包含于结果中。
- 允许的最大编辑距离为 1。
- 可存在差异的字符串比例限制为 50%。
- 结果大小被限制为测试域大小的 20%。
- 除模糊重复外,还包括完全匹配的重复。
OPEN 员工列表
FUZZYDUP ON 姓氏 OTHER 名字 EmpNo LEVDISTANCE 1 DIFFPCT 50 RESULTSIZE 20 EXACT TO "Fuzzy_Last_Name" OPEN
备注
工作原理
FUZZYDUP 命令查找几乎相同的值(模糊重复),或者在手动输入的数据中查找不一致的拼写。
与 ISFUZZYDUP( ) 函数不同(该函数可识别单个字符值的详尽模糊重复列表),FUZZYDUP 命令可识别一个域中的所有模糊重复,在非详尽的组中组织它们,并输出结果。
有关此命令工作方式的详细信息,请参见模糊重复分析。
非穷尽意味着什么
非详尽表示结果中的各个模糊重复组可能不包含组所有者指定差异程度范围内的测试域中的所有模糊重复。然而,如果组所有者是测试域中另一个值的模糊重复,则两个值在结果中将同时出现在组的某个位置。因此,组可能是非详尽的,但结果总的来说是详尽的。
如果为测试域中的特定值生成单个详尽的模糊重复列表对于您的分析很重要,您可以使用 ISFUZZYDUP( ) 函数来实现此目的。
FUZZYDUP 行为
FUZZYDUP 命令具有两个参数,这些参数使您可以控制模糊重复之间的差异程度及结果的大小:
- LEVDISTANCE
- DIFFPCT
您可能需要尝试这两个参数的设置的不同组合,以找出最适合特定数据集的组合。
LEVDISTANCE(编辑距离)
处理数据时,FUZZYDUP 命令计算测试域中每对已评估字符串之间的编辑距离,并且计算差异百分比。编辑距离是一个值,它表示使一个字符串与另一个字符串完全相同所需的最小单字符编辑数量。有关详细信息,请参见LEVDIST( ) 函数。
DIFFPCT(差异百分比)
差异百分比是两个已评估的不同字符串中较短者的百分比,并且是以下内部 Analytics 计算的结果,该计算使用两个字符串之间的编辑距离:
编辑距离 / 较短字符串中的字符数 × 100 = 差异比例
更多信息
有关模糊重复差异设置、控制结果大小及模糊重复组的详细信息,请参见模糊重复分析。
区分大小写
FUZZYDUP 命令不区分大小写,因此 "SMITH" 等同于 "smith"。
后继空白被自动除去
FUZZYDUP 命令自动除去键域中的后继空白,因此在为键域指定单个域时,无需使用 TRIM( ) 或 ALLTRIM( ) 函数。
如果您为键域连接域,则应该使用 ALLTRIM( ),如下所示。
提高 FUZZYDUP 的有效性
有三个技巧可以显著提高 FUZZYDUP 命令的有效性:
- 对测试域值中的各个元素进行排序
- 从测试域值中移除通用元素
- 连接测试域
这些技巧可生成更有针对性的、包含更少误报和更多正报的结果集。您可以单独或者结合使用这些技巧。
对测试域值中的各个元素进行排序
SORTWORDS( ) 函数可通过按顺序对测试域值中的各个元素进行排序,提高 FUZZYDUP 命令的有效性。
对元素(如地址的组成部分)进行排序,可使两个具有相同信息和不同格式的字符串彼此更加相似。更大的相似度可以提高一对字符串被选择为彼此模糊重复值的可能性。
有关详细信息,请参见SORTWORDS( ) 函数。
要观看提供 SORTWORDS( ) 概览的视频,请参见使用 SORTWORDS( ) 进行模糊匹配(仅限英语)。
从测试域值中移除通用元素
OMIT( ) 函数可以通过从测试域值中移除 "Corporation" 或 "Inc." 等通用元素或者逗号、句号和 & 符等字符,提高 FUZZYDUP 命令的有效性。
移除通用元素和标点符号可使 FUZZYDUP 字符串比较仅专注于字符串中可能发生有意义差异的部分。
有关详细信息,请参见OMIT( ) 函数。
连接测试域
连接两个或多个测试域可增强测试值的唯一程度,从而提高 FUZZYDUP 命令的有效性。
例如,通过连接 Address 域和 City 域,您避免了不同城市中的地址之间的模糊匹配:
FUZZYDUP ON ALLTRIM(Address)+ALLTRIM(City) OTHER Address City Vendor_Name LEVDISTANCE 4 DIFFPCT 50 RESULTSIZE 20 EXACT TO "Vendor_Name_Fuzzy_Dupes" OPEN
其他字符串比较方法
- DICECOEFFICIENT( ) 函数提供了一种比较字符串的方法,该方法不太强调或完全忽略字符或字符块的相对位置。
- SOUNDSLIKE( ) 和 SOUNDEX( ) 函数可为基于语音比较(声音)而非拼写比较(拼写)的字符串比较提供方案。