不太令人惊讶。指纹聚类只对每个单元格应用fingerprint()函数,然后一一比较它们的等价性。现在这是您提到的三种情况下fingerprint 的结果:
1
row value value.fingerprint()
1. école ecole
2. école école ecole ecole ecole
2
row value value.fingerprint()
1. école ecole
2. école école ecole ecole ecole
3
row value value.fingerprint()
1. ecole ecole
2. école école école ecole
为什么在第三种情况下会有这种差异?因为指纹算法实际上执行了以下操作,in a strict order。
1.删除前导和尾随空格
“école école école” -> “école école école”
2。将所有字符更改为小写形式
“école écoLe école” -> “école école école”
3.删除所有标点和控制字符
"école-école, école" -> "école école école"
4.将字符串拆分为空格分隔的标记
"école école école" -> ["école", "école", "école"]
5.对标记进行排序并删除重复项
["école", "école", "école"] -> ["école"]
6.将令牌重新组合在一起
["école"] -> "école"
7.将扩展的西方字符标准化为它们的 ASCII 表示
“école”->“ecole”
有人可能想知道操作 7 之前是否不应该执行。但是在您的示例中,如果存在错误,则可能是第三种情况。字符串“école”与字符串“ecole école école”非常不同,我认为它们不应该合并。给定名称“John-John”都不等同于“John”。
编辑:One of the developpers agrees with you.