FUZZYDUP 命令
检测字符域内几乎完全相同的值(模糊重复)。
说明
要使用模糊匹配将来自两个 Analytics 表的域合并为单个新的 Analytics 表,请参见FUZZYJOIN 命令。
语法
FUZZYDUP ON 键域 <OTHER 域> LEVDISTANCE 值 <DIFFPCT 百分比> <RESULTSIZE 百分比> <EXACT> <IF 测试> TO 表名 <LOCAL> <OPEN>
参数
| 名称 | 描述 |
|---|---|
| ON 键域 | 要检测其模糊重复的字符域或表达式。 |
| OTHER 域 可选 |
要包含在输出中的域或表达式的列表。 |
| 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%。
- 除模糊重复外,还包括完全匹配的重复。
FUZZYDUP ON 姓氏 OTHER 名字 EmpNo LEVDISTANCE 1 DIFFPCT 50 RESULTSIZE 20 EXACT TO "Fuzzy_Last_Name" OPEN
备注
说明
有关此命令工作原理的详细信息,请参见 Analytics 帮助。
工作原理
FUZZYDUP 命令查找几乎相同的值(模糊重复),或者在手动输入的数据中查找不一致的拼写。
与 ISFUZZYDUP( ) 函数不同,该函数可识别单个字符值的详尽的模糊重复列表,FUZZYDUP 命令可识别域中的所有模糊重复,将它们分组,并输出非详尽的结果。
非穷尽意味着什么
非详尽表示结果中的各个模糊重复组可能不包含组所有者指定差异程度范围内的测试域中的所有模糊重复。 然而,如果组所有者是测试域中另一个值的模糊重复,则两个值在结果中将同时出现在组的某个位置。
如果为测试域中的特定值生成详尽的模糊重复列表对于您的分析至关重要,您可以使用 ISFUZZYDUP( ) 函数来实现此目的。
FUZZYDUP 行为
FUZZYDUP 命令具有两个参数,这些参数使您可以控制模糊重复之间的差异程度及结果的大小:
- LEVDISTANCE
- DIFFPCT
您可能需要尝试这两个参数的设置的不同组合,以找出最适合特定数据集的组合。
LEVDISTANCE(编辑距离)
处理数据时,FUZZYDUP 命令计算测试域中每对已评估字符串之间的编辑距离,并且计算差异百分比。 编辑距离是一个值,它表示使一个字符串与另一个字符串完全相同所需的最小单字符编辑数量。 有关详细信息,请参见LEVDIST( ) 函数。
DIFFPCT(差异百分比)
差异百分比是两个已评估的不同字符串中较短者的百分比,并且是以下内部 Analytics 计算的结果,该计算使用两个字符串之间的编辑距离:
编辑距离 / 较短字符串中的字符数 × 100 = 差异比例
更多信息
有关模糊重复差异设置、控制结果大小及模糊重复组的详细信息,请参见模糊重复概览。
区分大小写
FUZZYDUP 命令不区分大小写,因此 "SMITH" 等同于 "smith"。
后继空白被自动除去
FUZZYDUP 命令自动除去键域中的后继空白,因此在为键域指定单个域时,无需使用 TRIM( ) 或 ALLTRIM( ) 函数。
如果您为键域连接域,则应该使用 ALLTRIM( ),如下所示。
提高 FUZZYDUP 的有效性
连接域
连接两个或多个测试域可增强测试值的唯一程度,从而提高 FUZZYDUP 命令的有效性。
例如:
FUZZYDUP ON ALLTRIM(First_Name)+ALLTRIM(Last_Name) OTHER First_Name Last_Name EmpNo LEVDISTANCE 4 DIFFPCT 50 RESULTSIZE 20 EXACT TO "Fuzzy_First_Name_Last_Name" OPEN
OMIT( ) 函数
通过从域值中删除 "Corporation" 或 "Inc." 等通用元素,OMIT( ) 函数还可提高该命令的 有效性。
删除通用元素重点关注 FUZZYDUP 字符串对可能出现有意义差异部分的比较。
有关详细信息,请参见OMIT( ) 函数。
其他字符串比较方法
- DICECOEFFICIENT( ) 函数提供了一种比较字符串的方法,该方法不太强调或完全忽略字符或字符块的相对位置。
- SOUNDSLIKE( ) 和 SOUNDEX( ) 函数可为基于语音比较(声音)而非拼写比较(拼写)的字符串比较提供方案。