Hatena@Cielquis.Net
Home >> Bookmark >> Distribution

Declaration

class Distribution
    attr_reader :users      # Hash {String => Integer}
    attr_reader :tags       # Hash {String => Integer}
    attr_reader :sample     # Integer
    
    def initialize()        # Distribution.new() -> dist
    def reset()             # dist.reset() -> dist
    def add(uri)            # dist.add(str) -> true/false
    def sort_users()        # dist.sort_users() -> arr
    def sort_tags()         # dist.sort_tags() -> arr
end

Overview

Bookmark::Distribution は,指定した URI 群をブックマークしているユーザ, およびタグの分布を調べるためのクラスです.メンバ変数 users,tags はそれぞれ, ユーザ名,タグ名の出現回数をハッシュで保持しています.また,メンバ変数 sample はブックマークエントリ情報を取得した URI の数を表します.

add() メソッドは,指定された URI のブックマークエントリ情報を取得し, そのエントリに出現したユーザ/タグ情報を users/tags に反映させます. sort_users(),sort_tags() メソッドはそれぞれ users, tags を出現回数で降順にソートし, その結果を配列で返します.

Example

example_distribution.rb

#!/usr/bin/ruby -Ku
require 'hatena'

# parameter
SAMPLE = 10
LOWER_USER = 10
UPPER_USER = 100

dist = Hatena::Bookmark::Distribution.new

n = 0
Hatena::Bookmark::URITrace.new(ARGV[0]).each(200) { |uri|
    count = Hatena::Bookmark::count(uri)
    next if (count < LOWER_USER || count > UPPER_USER)
    
    if (dist.add(uri))
        printf("%3d %s\n", n, uri)
        n += 1
        break if (n >= SAMPLE)
    end
    
    sleep(2)
}
puts("----------")
puts("Get #{dist.sample} entries.")
puts

# ユーザ数で降順にソートした後,出力
puts("Users")
puts("----------")
i = 0
dist.sort_users.each { |item|
    break if (i >= 10)
    printf("%3d %3d %s\n", i, item[1], item[0])
    i += 1
}
puts

# タグ数で降順にソートした後,出力
puts("Tags")
puts("----------")
i = 0
dist.sort_tags.each { |item|
    break if (i >= 10)
    printf("%3d %3d %s\n", i, item[1], item[0])
    i += 1
}
Resul

  0 http://www16.atwiki.jp/tokoroten/pages/1018.html
  1 http://sankei.jp.msn.com/world/america/081205/amr0812051048004-n1.htm
  2 http://fragments.g.hatena.ne.jp/mutronix/20081201/1228140772
  3 http://thinkit.jp/article/721/1/
  4 http://d.hatena.ne.jp/takerunba/20081204/p3
  5 http://ameblo.jp/takepon-jp/entry-10172557462.html
  6 http://japan.cnet.com/news/media/story/0,2000056023,20374232,00.htm
  7 http://business.nikkeibp.co.jp/article/skillup/20081202/178948/
  8 http://bizmakoto.jp/makoto/articles/0811/27/news008.html
  9 http://wiredvision.jp/news/200812/2008120322.html
----------
Get 10 entries.

Users
----------
  0  10 tt_clown
  1   9 Ubuntu
  2   6 andsoatlast
  3   3 kitakyudai
  4   3 Britty
  5   3 llil
  6   3 t298ra
  7   2 jummai
  8   2 terafuri
  9   2 another

Tags
----------
  0  17 science
  1  14 ネタ
  2  11 web
  3  11 はてなブックマーク
  4  11 はてブ
  5  10 はてな
  6   9 tcpdump
  7   9 社会
  8   8 科学
  9   7 business