需求:比较两个地址相似程度
1, 排除数字, 排除字母(大小写), 特殊符号
如以下三个地址都可以认为是实际相同,只是表述不同:
湖北省-武汉市-东西湖区 湖北省武汉市东西湖区革新大道四明路物流园c5
湖北省-武汉市-东西湖区 革新大道四明路物流园c5门
湖北省-武汉市-东西湖区 革新大道四明路南特1号
实际上,这些地址,前两个是相同的, 第三个是不同的
思路:
1, 格式化地址, 重复的去掉
2, 去掉数字, 排除字母(大小写), 特殊符号
3, 选取算法
目前能处理的字符串相同的算法很多,常见的:
1)SimHash:算法的主要思想是降维,将高维的特征向量映射成一个f-bit的指纹(fingerprint),通过比较两篇文章的f-bit指纹的Hamming Distance来确定文章是否重复或者高度近似。由于每篇文章我们都可以事先计算好Hamming Distance来保存,到时候直接通过Hamming Distance来计算,所以速度非常快适合大数据计算,google用的就是这个。但是SimHash对于短文本误判率比较高,因此建议大于500字以上的使用此算法。
2)汉明距离: 以理查德·卫斯里·汉明的名字命名的。在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。例如:
1011101 与 1001001 之间的汉明距离是 2。
2143896 与 2233796 之间的汉明距离是 3。
"toned" 与 "roses" 之间的汉明距离是 3。
3)Levenshtein 距离: 又称编辑距离,
1, 排除数字, 排除字母(大小写), 特殊符号
如以下三个地址都可以认为是实际相同,只是表述不同:
湖北省-武汉市-东西湖区 湖北省武汉市东西湖区革新大道四明路物流园c5
湖北省-武汉市-东西湖区 革新大道四明路物流园c5门
湖北省-武汉市-东西湖区 革新大道四明路南特1号
实际上,这些地址,前两个是相同的, 第三个是不同的
思路:
1, 格式化地址, 重复的去掉
2, 去掉数字, 排除字母(大小写), 特殊符号
3, 选取算法
目前能处理的字符串相同的算法很多,常见的:
1)SimHash:算法的主要思想是降维,将高维的特征向量映射成一个f-bit的指纹(fingerprint),通过比较两篇文章的f-bit指纹的Hamming Distance来确定文章是否重复或者高度近似。由于每篇文章我们都可以事先计算好Hamming Distance来保存,到时候直接通过Hamming Distance来计算,所以速度非常快适合大数据计算,google用的就是这个。但是SimHash对于短文本误判率比较高,因此建议大于500字以上的使用此算法。
2)汉明距离: 以理查德·卫斯里·汉明的名字命名的。在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。例如:
1011101 与 1001001 之间的汉明距离是 2。
2143896 与 2233796 之间的汉明距离是 3。
"toned" 与 "roses" 之间的汉明距离是 3。
3)Levenshtein 距离: 又称编辑距离,