让我们假设以下网址指向相同的内容。
如何检查这些链接是否指向相同的内容? 我特别使用Ruby,但欢迎任何其他建议......
答案 0 :(得分: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之间的值。 在ruby中也有一个纯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