1. 程式人生 > >相似URL判定及字串相似度距離

相似URL判定及字串相似度距離

相似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

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 全域性

LCS最長公共子序列