2012-02-21 81 views

回答

2

第一個幼稚的猜測是獲取內容並創建一個哈希。但是,如果內容有任何動態行爲,這不是一個好的指標。

require 'open-uri' 
require 'digest/md5' 

f1 = open("http://rubyonrails.org/?id=1") 
c1 = f1.read 
d1 = Digest::MD5.hexdigest(c1) 

f2 = open("http://rubyonrails.org/"); 
c2 = f2.read 
d2 = Digest::MD5.hexdigest(c2) 

d1 == d2 # true 

如果我們重複使用同樣的事情說:www.google.com和google.com哈希將不匹配,因爲有可能是內容的細微變化。

對於字符串,您可以使用Jaro Winkler度量值,該度量值爲0和1之間的值,表示兩個字符串的相似程度。 紅寶石中還有一個純粹的implementation算法。本地實現速度更快。我過去使用過amatch庫。

require 'open-uri' 
require 'fuzzystringmatch' 

f1 = open("http://www.google.com/") 
c1 = f1.read 

f2 = open("http://google.com/") 
c2 = f2.read 

delta = 0.1 
jarow = FuzzyStringMatch::JaroWinkler.create(:pure) 
distance = jarow.getDistance(c1, c2) # 0.85 .. that is the text looks to be 85% similar