0

让我们假设以下 url 指向相同的内容。

如何检查这些链接是否指向相同的内容?我特别使用 Ruby,但也欢迎任何其他建议......

4

1 回答 1

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

如果我们用 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
于 2012-02-24T08:12:38.927 回答