2012-02-21 23 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