Как проверить, возвращают ли два URL одну и ту же страницу - PullRequest
0 голосов
/ 21 февраля 2012

Предположим, что следующие URL-адреса указывают на одно и то же содержимое.

Как я могу проверить, указывают ли эти ссылки на один и тот же контент? Я особенно использую Ruby, но любые другие предложения приветствуются ...

1 Ответ

2 голосов
/ 24 февраля 2012

Первое наивное предположение - получить контент и создать хеш. Однако, если содержимое имеет какое-либо динамическое поведение, это не очень хороший показатель.

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. Нативные реализации намного быстрее. В прошлом я использовал библиотеку 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
...