ISFUZZYDUP( ) 函数
返回逻辑值,该逻辑值表明某字符串是否是与之相比较的字符串的模糊重复。
语法
ISFUZZYDUP(字符串1,字符串2,levdist <,diffpct>)
参数
名称 | 类型 | 描述 |
---|---|---|
字符串1 | 字符 | 比较中的第一个字符串。 |
字符串2 | 字符 | 比较中的第二个字符串。 |
levdist | 数值 |
要将两个字符串标识为模糊重复而允许这两个字符串之间所具有的最大编辑距离。 levdist 值不能小于 1 或大于 10。 增加 levdist 值通过包括具有更高模糊度即彼此差异更大的值来增加结果的数量。 |
diffpct
可选 |
数值 |
“差异百分比”的上阈值。 工作原理中解释了差异百分比。 diffpct 值不能小于 1 或大于 99。 增加 diffpct 值可增加结果数,方法是包括相于其长度而言,差异比例更高的值。 如果省略该参数,则在处理 ISFUZZYDUP( ) 函数期间不会考虑差异百分比。
|
输出
逻辑。如果字符串值是模糊重复,则返回 T(真);否则返回 F(假)。
示例
基本示例
返回 F,因为要将 "Smith" 转换为 "Smythe",需要进行两次编辑,但 levdist 值仅为 1:
ISFUZZYDUP("Smith","Smythe", 1, 99)
返回 T,因为要将 "Smith" 转换为 "Smythe",需要进行两次编辑,且 levdist 值为 2:
ISFUZZYDUP("Smith","Smythe", 2, 99)
返回 T,因为要将 "SMITH" 转换为 "smith",需要进行零次编辑,且 levdist 值为 1(ISFUZZYDUP( ) 函数不区分大小写):
ISFUZZYDUP("SMITH","smith", 1, 99)
返回一个逻辑值(T 或 F),指示姓氏域中的各个值是否是字符串 "Smith" 的模糊重复值:
ISFUZZYDUP(姓氏,"Smith", 3, 99)
高级示例
使用差异百分比
差异百分比为您提供了一种工具,用来减少 ISFUZZYDUP( ) 返回的误报数。
未指定 diffpct
返回 T,因为要将 "abc" 转换为 "Smith",需要进行五次编辑,且 levdist 值为 5:
ISFUZZYDUP("abc", "Smith", 5)
指定了 diffpct
返回 F,即使 "abc" 位于 "Smith" 的指定编辑距离内,因为 5 次编辑/字符串长度 3 会产生差异百分比 167%,超过指定的 99% 的 diffpct:
ISFUZZYDUP("abc", "Smith", 5, 99)
工作原理中完整解释了差异百分比。
隔离 "Smith" 的模糊重复值
创建一个过滤器,以隔离姓氏域中所有是 "Smith" 的模糊重复项的值:
SET FILTER TO ISFUZZYDUP(姓氏, "Smith", 3, 99)
通过更改 levdist 或 diffpct 值,您可以调整过滤值中的差异量。
备注
何时使用 ISFUZZYDUP( )
使用 ISFUZZYDUP( ) 函数可查找几乎相同的值(模糊重复),或者在手动输入的数据中找到不一致的拼写。
工作原理
ISFUZZYDUP( ) 函数计算两个字符串之间的编辑距离,并且计算差异百分比。
ISFUZZYDUP( ) 在下列情况下评估为 T(真):
- 编辑距离小于或等于 levdist 值。
- 差异百分比小于或者等于 diffpct 值(如果指定)。
编辑距离
编辑距离是一个值,它表示使一个字符串与另一个字符串完全相同所需的最小单字符编辑数量。
要了解更多信息,请参考LEVDIST( ) 函数。
差异百分比
差异百分比是两个不同评估字符串中较短字符串的百分比。
差异百分比是以下内部 Analytics 计算的结果,该计算使用两个字符串之间的编辑距离:
编辑距离 / 较短字符串中的字符数 × 100 = 差异比例
使用可选的差异百分比有助于减少 ISFUZZYDUP( ) 返回的误报数:
- diffpct 的上阈值是 99%,这可防止整个替换字符串以使其完全相同。
- 相对于其长度而言需要大量编辑的字符串被排除。
用法提示
- 大小写敏感性该函数不区分大小写,因此“SMITH”等效于“smith”。
- 后继空白此函数还可以自动修剪域中的结尾空白,因此在指定某域为参数时无需使用 TRIM( ) 函数。
- 删除通用元素通过从域值中删除 "Corporation" 或 "Inc." 等通用元素,OMIT( ) 函数可提高 ISFUZZYDUP( ) 函数的有效性。
删除通用元素重点关注 ISFUZZYDUP( ) 字符串对可能出现有意义差异部分的比较。
FUZZYDUP 命令和 ISFUZZYDUP( ) 函数有何区别
FUZZYDUP 命令识别域中的所有模糊重复项,按组组织它们,并且输出非穷尽的结果。
ISFUZZYDUP( ) 函数识别单个字符值的模糊重复项的穷尽列表。
该命令和函数都识别完全重复项。与该命令不同,在使用该函数时您无法排除完全重复项。
穷尽意味着什么
详尽是指将返回指定测试值差异程度内的所有值,无论它们在测试域中相对于测试值的位置如何。
如果 FUZZYDUP 命令生成的非穷尽结果不足以满足您的分析需求,则 ISFUZZYDUP( ) 函数很有用,并且您需要直接审查特定字符值的每个模糊重复项。
相关函数
- LEVDIST( ) 为基于编辑距离的字符串比较提供了替代方法。
与 ISFUZZYDUP( ) 不同,LEVDIST( ) 默认情况下区分大小写。
- DICECOEFFICIENT( ) 函数在比较字符串时不太强调或完全忽略字符或字符块的相对位置。
- SOUNDSLIKE( ) 和 SOUNDEX( ) 基于语音比较(声音)而非正字法比较(拼写)来比较字符串。