如何对数据集中名称相似的字符串(如McDonald和Mc DOnald’s)进行聚类,如果字符串相同(如sam和其他也为sam),则如何基于值或价格再次进行聚类。例如,考虑一个包含10个元素的数据表
name priceram 200shyam 150ram12 59gita 45ram 2 45 g11ita 23john2 32john 7jonh21 8jonh 38ram22 3
那么分组应为
ram 200ram12 59ram 2 45ram22 3john2 32jonh 37john 7john21 8gita 45g11ita 23
我使用了fuzzywuzzy和Levenheneitein距离进行字符串聚类,但它只能聚类字符串而无法聚类价格。如何先聚类字符串,如果相同再聚类价格?
回答:
你需要仔细平衡文本相似性和数值相似性的阈值。这没有简单的解决方案,除非你有非常庞大的数据,手动方法可能是最好的选择。
短字符串的文本相似性非常不可靠。
例如:“dog”和“fog”只差一个字母,但不太可能是打字错误。它们的Levenshtein距离为1,是最小的非零值!因此,如果你依赖Levenshtein,你会得到很多误报——如果你手动验证它们还可以,但不适合自动处理。
因此,你至少需要使用一些了解(a)现有单词,这些单词不太可能是拼写错误,(b)常见的拼写错误,(c)音似性来估计一个单词是否可能拼写错误,(d)键盘相似性,一个单词是否可能被误打…