相似URL判定
edit distance缺点 基于结构来判断URL相似度,去掉数字。字符串是否也需要去掉自身只保留结构,或者保留存在长度的结构,可以根据情况来灵活取舍。
抽象一下特征
1、站点特征:如果两个url站点一样,则特征取值1,否则取值0;
2、目录深度特征:特征取值分别是两个url的目录深度是否一致;
3、一级目录特征:在这维特征的取值上,可以采用多种方法,比如如果一级目录名字相同则特征取1,否则取0;或者根据目录名字的编辑距离算出一个特征值;或者根据目录名字的pattern,如是否数字、是否字母、是否字母数字穿插等。这取决于具体需求,这里示例仅仅根据目录名是否相同取1和0;
4、尾页面特征:这维特征的取值同一级目录,可以判断后缀是否相同、是否数字页、是否机器生成的随机字符串或者根据编辑长度来取值,具体也依赖于需求。这里示例仅仅判断最后一级目录的特征是否一致(比如是否都由数字组成、是否都有字母组成等)。
edit distance needleman-wunch或者smith-waterman算法
SimHash+汉明距离
pip install python-Levenshtein
http://www.cnblogs.com/kaituorensheng/archive/2013/05/18/3085653.html
import Levenshtein
str1="abc"
str2="bac"
edit distance Levenshtein距离
一个字串转化成另一个字串最少的操作次数(包括插入、删除、替换)
print Levenshtein.distance(“abc”,”ac”)
计算汉明距离
要求str1和str2必须长度一致 两个等长字串之间对应位置上不同字符的个数
print Levenshtein.hamming(str1, str2)
莱文斯坦比
计算公式 r = (sum - ldist) / sum, 其中sum是指str1 和 str2 字串的长度总和,ldist是类编辑距离 删除、插入依然+1,但是替换+2
print Levenshtein.ratio(str1, str2)
计算jaro距离
print Levenshtein.jaro(str1, str2)
计算Jaro–Winkler距离
print Levenshtein.jaro_winkler(str1, str2)
Smith-Waterman 局部
Needleman-Wunsch 全局
https://github.com/alevchuk/pairwise-alignment-in-python