让我们假设以下 url 指向相同的内容。
如何检查这些链接是否指向相同的内容?我特别使用 Ruby,但也欢迎任何其他建议......
让我们假设以下 url 指向相同的内容。
如何检查这些链接是否指向相同的内容?我特别使用 Ruby,但也欢迎任何其他建议......
第一个天真的猜测是获取内容并创建哈希。但是,如果内容有任何动态行为,这不是一个好的指标。
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
如果我们用 say: www.google.com 和 google.com 重复同样的事情,哈希值将不匹配,因为内容可能会有细微的变化。
您可以对字符串使用Jaro Winkler度量,它为您提供介于 0 和 1 之间的值来表示两个字符串的相似程度。ruby 中也有该算法的纯实现。本机实现要快得多。我过去使用过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