示例#1
0
def dif_html(a, b, lower_criteria = 0.5, upper_criteria = 0.6,
             link_criteria = 0.4, img_criteria = 0.2, script_criteria = 0.2):
    from urllib2 import urlopen 
    from difflib import SequenceMatcher
    from my_stats import jaccard as jac

    #詳細にページをみる
    try:
        html_a, html_b = urlopen(a).read(), urlopen(b).read()
        matcher = SequenceMatcher()
        matcher.set_seq1(html_a)
        matcher.set_seq2(html_b)
        if matcher.ratio() >= lower_criteria:
            #lower_criteria以上だけどupper_criteria以下の場合にはリンク構造など詳しく調査する
            if matcher.ratio() >= upper_criteria:
                print "white", matcher.ratio(), upper_criteria, lower_criteria, a, b
                return True
            else:
                #ここにnon-negative-matrix-factorizationを入れてより精緻に分析する予定だったけど、まだあまりうまく行かないのでペンディング(T.B.D.)
                print "grey", matcher.ratio(), upper_criteria, lower_criteria, a, b
                links_a, titles_a, imgs_a, scripts_a = analyze_html(html_a)
                links_b, titles_b, imgs_b, scripts_b = analyze_html(html_b)
                j_links, j_imgs, j_scripts = jac(links_a, links_b), jac(imgs_a, imgs_b), jac(imgs_a, imgs_b)
                if j_links >= link_criteria and j_imgs >= img_criteria and j_scripts >= script_criteria:
                    return True
                else:
                    return False
        #lower_criteria以上に似てない部分がある場合には似てないと判断する
        else:
            print "black", matcher.ratio(), upper_criteria, lower_criteria, a, b
            return False
    except:
        #クローリングできない場合には異なるページと見なす
        return False
示例#2
0
def analyze_urls(urls, url_criteria, url_weight):
    from urlparse import urlparse
    from my_stats import jaccard_weight as jac

    sites = []
    for url in urls.keys():
        sites.append(url)
    if len(sites) > 1:
        for i in range(len(sites) - 1):
            for j in range(i + 1, len(sites)):
                parsed0, parsed1 = urlparse(sites[i]), urlparse(sites[j])
                vec0, vec1 = get_url_vector(parsed0, url_weight), get_url_vector(parsed1, url_weight)
                similarity = jac(vec0, vec1)
                if similarity < url_criteria:
                    return True
    else:
        return False