Facebook: 高木浩光さん、産業総合研究所の人間。この...のようなFacebookでのコメントを自分に見やすくカスタマイズしたいと思ったので、その前段階としてテキストとしてコピペしたものをYAML形式で保存するRubyスクリプトを書いた。環境は、Ruby 1.9.3 p194, ya2yaml(rubygemライブラリ)利用。
使い方
- Facebookのコメント欄を1人目の名前部分からドラッグしてコピー
- 適当なテキストエディタにペースト&文字コードUTF8で保存(仮にhogehoge.txtとする)
- スクリプト名をComments2YAML.rbとするとき、以下のコマンドで実行
% ruby ./Comments2YAML.rb hogehoge.txt > hogehoge.yml
スクリプトは以下の通り。
# -*- coding: utf-8 -*- require "rubygems" require "ya2yaml" if ARGV.size != 1 puts "Please give a filename which has facebook comments.\n" exit end filename =ARGV[0] unless File.exist?(filename) puts "No such file: #{filename}\n" exit end authorsArray = Array.new commentsArray = Array.new iineArray = Array.new comment = String.new blockFlg = true File.readlines(filename).each do | line | line.chomp! line.strip! if blockFlg == true comment = '' if mArray = /^(.+?\s.+?)\s(.+)$/.match(line) authorsArray.push(mArray[1]) comment = comment + "#{mArray[2]}" end blockFlg = false elsif /^.*\s+?いいね!\s+?.*\s+?([0-9]+)$/ =~ line iineArray.push($1) blockFlg = true commentsArray.push(comment) else comment = comment + "#{line}\n" end end
生成したYAMLを使って、コメント数、合計いいね数でユーザー別ソーティングするスクリプト
# -*- coding: utf-8 -*- require "rubygems" require "yaml" require "ya2yaml" if ARGV.size != 1 puts "Please give a yaml filename.\n" exit end filename =ARGV[0] unless File.exist?(filename) puts "No such file: #{filename}\n" exit end commentsArray = YAML.load(File.read(filename)) # 一番コメントしたユーザーを求める userHash = Hash.new iineByUserHash = Hash.new commentsArray.each do | array | if userHash[array[0]].nil? userHash.store(array[0],1) iineByUserHash.store(array[0], array[2].to_i) else userHash[array[0]] = userHash[array[0]] +1 iineByUserHash[array[0]] = iineByUserHash[array[0]] + array[2].to_i end end userHash.sort_by{ |key, value | value}.reverse.each do | array | p "#{array[1]}回: #{array[0]}" end iineByUserHash.sort_by{ |key, value | value}.reverse.each do | array | p "合計 #{array[1]} いいね: #{array[0]}" end averageHash = Hash.new userHash.each do |key, value | averageHash.store(key, iineByUserHash[key].to_f/userHash[key].to_f) end averageHash.sort_by{ |key, value | value}.reverse.each do | array | p "#{sprintf("%.2f", array[1])} いいね/回: #{array[0]}, コメント回数#{userHash[array[0]]}, 合計いいね数#{iineByUserHash[array[0]]}" end
18:00ごろのFacebook: 高木浩光さん、産業総合研究所の人間。この...におけるコメント数、合計いいね数でユーザー別ソーティング結果(匿名化しています)。
"50回: ユーザー66" "24回: ユーザー67" "21回: ユーザー36" "21回: ユーザー26" "16回: ユーザー103" "14回: ユーザー37" "14回: ユーザー18" "11回: ユーザー101" "9回: ユーザー118" "8回: ユーザー12" "7回: ユーザー111" "6回: ユーザー53" "5回: ユーザー76" "5回: ユーザー40" "5回: ユーザー10" "5回: ユーザー72" "5回: ユーザー49" "5回: ユーザー32" "4回: ユーザー31" "4回: ユーザー73" "4回: ユーザー81" "4回: ユーザー41" "4回: ユーザー20" "4回: ユーザー93" "3回: ユーザー69" "3回: ユーザー119" "3回: ユーザー113" "3回: ユーザー92" "3回: ユーザー117" "3回: ユーザー54" "3回: ユーザー89" "2回: ユーザー21" "2回: ユーザー50" "2回: ユーザー63" "2回: ユーザー65" "2回: ユーザー2" "2回: ユーザー48" "2回: ユーザー99" "2回: ユーザー82" "2回: ユーザー115" "2回: ユーザー70" "2回: ユーザー16" "2回: ユーザー25" "2回: ユーザー74" "2回: ユーザー61" "1回: ユーザー120" "1回: ユーザー77" "1回: ユーザー78" "1回: ユーザー79" "1回: ユーザー71" "1回: ユーザー80" "1回: ユーザー83" "1回: ユーザー68" "1回: ユーザー84" "1回: ユーザー85" "1回: ユーザー86" "1回: ユーザー64" "1回: ユーザー87" "1回: ユーザー62" "1回: ユーザー75" "1回: ユーザー60" "1回: ユーザー59" "1回: ユーザー58" "1回: ユーザー57" "1回: ユーザー56" "1回: ユーザー55" "1回: ユーザー88" "1回: ユーザー90" "1回: ユーザー52" "1回: ユーザー51" "1回: ユーザー91" "1回: ユーザー94" "1回: ユーザー95" "1回: ユーザー47" "1回: ユーザー46" "1回: ユーザー45" "1回: ユーザー44" "1回: ユーザー43" "1回: ユーザー42" "1回: ユーザー96" "1回: ユーザー97" "1回: ユーザー39" "1回: ユーザー38" "1回: ユーザー98" "1回: ユーザー100" "1回: ユーザー35" "1回: ユーザー34" "1回: ユーザー33" "1回: ユーザー102" "1回: ユーザー104" "1回: ユーザー30" "1回: ユーザー29" "1回: ユーザー28" "1回: ユーザー27" "1回: ユーザー105" "1回: ユーザー106" "1回: ユーザー24" "1回: ユーザー23" "1回: ユーザー22" "1回: ユーザー107" "1回: ユーザー108" "1回: ユーザー19" "1回: ユーザー109" "1回: ユーザー17" "1回: ユーザー110" "1回: ユーザー15" "1回: ユーザー14" "1回: ユーザー13" "1回: ユーザー112" "1回: ユーザー11" "1回: ユーザー114" "1回: ユーザー9" "1回: ユーザー8" "1回: ユーザー7" "1回: ユーザー6" "1回: ユーザー5" "1回: ユーザー4" "1回: ユーザー3" "1回: ユーザー116" "1回: ユーザー1"
"合計 477 いいね: ユーザー66" "合計 397 いいね: ユーザー16" "合計 324 いいね: ユーザー67" "合計 318 いいね: ユーザー37" "合計 277 いいね: ユーザー10" "合計 242 いいね: ユーザー53" "合計 211 いいね: ユーザー18" "合計 182 いいね: ユーザー36" "合計 166 いいね: ユーザー101" "合計 157 いいね: ユーザー48" "合計 141 いいね: ユーザー15" "合計 120 いいね: ユーザー19" "合計 114 いいね: ユーザー26" "合計 111 いいね: ユーザー74" "合計 108 いいね: ユーザー12" "合計 104 いいね: ユーザー33" "合計 102 いいね: ユーザー20" "合計 100 いいね: ユーザー76" "合計 98 いいね: ユーザー69" "合計 84 いいね: ユーザー103" "合計 76 いいね: ユーザー118" "合計 76 いいね: ユーザー57" "合計 73 いいね: ユーザー29" "合計 69 いいね: ユーザー56" "合計 69 いいね: ユーザー73" "合計 61 いいね: ユーザー40" "合計 56 いいね: ユーザー41" "合計 54 いいね: ユーザー34" "合計 52 いいね: ユーザー35" "合計 49 いいね: ユーザー54" "合計 47 いいね: ユーザー65" "合計 47 いいね: ユーザー72" "合計 43 いいね: ユーザー55" "合計 42 いいね: ユーザー50" "合計 42 いいね: ユーザー31" "合計 42 いいね: ユーザー92" "合計 42 いいね: ユーザー111" "合計 39 いいね: ユーザー102" "合計 39 いいね: ユーザー43" "合計 39 いいね: ユーザー81" "合計 38 いいね: ユーザー45" "合計 36 いいね: ユーザー42" "合計 34 いいね: ユーザー28" "合計 34 いいね: ユーザー97" "合計 33 いいね: ユーザー71" "合計 33 いいね: ユーザー93" "合計 33 いいね: ユーザー49" "合計 31 いいね: ユーザー88" "合計 30 いいね: ユーザー61" "合計 30 いいね: ユーザー32" "合計 30 いいね: ユーザー70" "合計 29 いいね: ユーザー77" "合計 29 いいね: ユーザー63" "合計 28 いいね: ユーザー38" "合計 28 いいね: ユーザー85" "合計 27 いいね: ユーザー47" "合計 27 いいね: ユーザー75" "合計 27 いいね: ユーザー39" "合計 27 いいね: ユーザー13" "合計 27 いいね: ユーザー89" "合計 26 いいね: ユーザー58" "合計 23 いいね: ユーザー62" "合計 23 いいね: ユーザー83" "合計 23 いいね: ユーザー23" "合計 23 いいね: ユーザー22" "合計 21 いいね: ユーザー109" "合計 20 いいね: ユーザー117" "合計 19 いいね: ユーザー96" "合計 18 いいね: ユーザー113" "合計 17 いいね: ユーザー78" "合計 15 いいね: ユーザー64" "合計 14 いいね: ユーザー4" "合計 13 いいね: ユーザー2" "合計 12 いいね: ユーザー90" "合計 12 いいね: ユーザー82" "合計 12 いいね: ユーザー30" "合計 12 いいね: ユーザー99" "合計 11 いいね: ユーザー21" "合計 10 いいね: ユーザー14" "合計 10 いいね: ユーザー8" "合計 9 いいね: ユーザー6" "合計 8 いいね: ユーザー110" "合計 8 いいね: ユーザー80" "合計 8 いいね: ユーザー119" "合計 8 いいね: ユーザー44" "合計 7 いいね: ユーザー120" "合計 7 いいね: ユーザー7" "合計 7 いいね: ユーザー84" "合計 7 いいね: ユーザー59" "合計 7 いいね: ユーザー105" "合計 7 いいね: ユーザー87" "合計 6 いいね: ユーザー17" "合計 6 いいね: ユーザー115" "合計 6 いいね: ユーザー68" "合計 6 いいね: ユーザー9" "合計 6 いいね: ユーザー25" "合計 5 いいね: ユーザー116" "合計 5 いいね: ユーザー104" "合計 5 いいね: ユーザー100" "合計 5 いいね: ユーザー94" "合計 4 いいね: ユーザー91" "合計 4 いいね: ユーザー95" "合計 4 いいね: ユーザー27" "合計 4 いいね: ユーザー46" "合計 4 いいね: ユーザー11" "合計 3 いいね: ユーザー112" "合計 3 いいね: ユーザー3" "合計 3 いいね: ユーザー114" "合計 3 いいね: ユーザー107" "合計 3 いいね: ユーザー52" "合計 3 いいね: ユーザー86" "合計 2 いいね: ユーザー24" "合計 2 いいね: ユーザー5" "合計 2 いいね: ユーザー106" "合計 1 いいね: ユーザー98" "合計 1 いいね: ユーザー108" "合計 1 いいね: ユーザー79" "合計 1 いいね: ユーザー60" "合計 1 いいね: ユーザー51" "合計 1 いいね: ユーザー1"
コメントあたりの平均「いいね!」数。
"198.50 いいね/回: ユーザー16" "141.00 いいね/回: ユーザー15" "120.00 いいね/回: ユーザー19" "104.00 いいね/回: ユーザー33" "78.50 いいね/回: ユーザー48" "76.00 いいね/回: ユーザー57" "73.00 いいね/回: ユーザー29" "69.00 いいね/回: ユーザー56" "55.50 いいね/回: ユーザー74" "55.40 いいね/回: ユーザー10" "54.00 いいね/回: ユーザー34" "52.00 いいね/回: ユーザー35" "43.00 いいね/回: ユーザー55" "40.33 いいね/回: ユーザー53" "39.00 いいね/回: ユーザー43" "39.00 いいね/回: ユーザー102" "38.00 いいね/回: ユーザー45" "36.00 いいね/回: ユーザー42" "34.00 いいね/回: ユーザー28" "34.00 いいね/回: ユーザー97" "33.00 いいね/回: ユーザー71" "32.67 いいね/回: ユーザー69" "31.00 いいね/回: ユーザー88" "29.00 いいね/回: ユーザー77" "28.00 いいね/回: ユーザー38" "28.00 いいね/回: ユーザー85" "27.00 いいね/回: ユーザー47" "27.00 いいね/回: ユーザー13" "27.00 いいね/回: ユーザー39" "27.00 いいね/回: ユーザー75" "26.00 いいね/回: ユーザー58" "25.50 いいね/回: ユーザー20" "23.50 いいね/回: ユーザー65" "23.00 いいね/回: ユーザー62" "23.00 いいね/回: ユーザー23" "23.00 いいね/回: ユーザー22" "23.00 いいね/回: ユーザー83" "22.71 いいね/回: ユーザー37" "21.00 いいね/回: ユーザー50" "21.00 いいね/回: ユーザー109" "20.00 いいね/回: ユーザー76" "19.00 いいね/回: ユーザー96" "17.25 いいね/回: ユーザー73" "17.00 いいね/回: ユーザー78" "16.33 いいね/回: ユーザー54" "15.09 いいね/回: ユーザー101" "15.07 いいね/回: ユーザー18" "15.00 いいね/回: ユーザー70" "15.00 いいね/回: ユーザー64" "15.00 いいね/回: ユーザー61" "14.50 いいね/回: ユーザー63" "14.00 いいね/回: ユーザー92" "14.00 いいね/回: ユーザー4" "14.00 いいね/回: ユーザー41" "13.50 いいね/回: ユーザー67" "13.50 いいね/回: ユーザー12" "12.20 いいね/回: ユーザー40" "12.00 いいね/回: ユーザー90" "12.00 いいね/回: ユーザー30" "10.50 いいね/回: ユーザー31" "10.00 いいね/回: ユーザー14" "10.00 いいね/回: ユーザー8" "9.75 いいね/回: ユーザー81" "9.54 いいね/回: ユーザー66" "9.40 いいね/回: ユーザー72" "9.00 いいね/回: ユーザー6" "9.00 いいね/回: ユーザー89" "8.67 いいね/回: ユーザー36" "8.44 いいね/回: ユーザー118" "8.25 いいね/回: ユーザー93" "8.00 いいね/回: ユーザー110" "8.00 いいね/回: ユーザー44" "8.00 いいね/回: ユーザー80" "7.00 いいね/回: ユーザー120" "7.00 いいね/回: ユーザー7" "7.00 いいね/回: ユーザー87" "7.00 いいね/回: ユーザー105" "7.00 いいね/回: ユーザー84" "7.00 いいね/回: ユーザー59" "6.67 いいね/回: ユーザー117" "6.60 いいね/回: ユーザー49" "6.50 いいね/回: ユーザー2" "6.00 いいね/回: ユーザー17" "6.00 いいね/回: ユーザー82" "6.00 いいね/回: ユーザー9" "6.00 いいね/回: ユーザー99" "6.00 いいね/回: ユーザー113" "6.00 いいね/回: ユーザー111" "6.00 いいね/回: ユーザー32" "6.00 いいね/回: ユーザー68" "5.50 いいね/回: ユーザー21" "5.43 いいね/回: ユーザー26" "5.25 いいね/回: ユーザー103" "5.00 いいね/回: ユーザー116" "5.00 いいね/回: ユーザー94" "5.00 いいね/回: ユーザー104" "5.00 いいね/回: ユーザー100" "4.00 いいね/回: ユーザー46" "4.00 いいね/回: ユーザー27" "4.00 いいね/回: ユーザー11" "4.00 いいね/回: ユーザー95" "4.00 いいね/回: ユーザー91" "3.00 いいね/回: ユーザー86" "3.00 いいね/回: ユーザー107" "3.00 いいね/回: ユーザー25" "3.00 いいね/回: ユーザー3" "3.00 いいね/回: ユーザー112" "3.00 いいね/回: ユーザー52" "3.00 いいね/回: ユーザー114" "3.00 いいね/回: ユーザー115" "2.67 いいね/回: ユーザー119" "2.00 いいね/回: ユーザー24" "2.00 いいね/回: ユーザー106" "2.00 いいね/回: ユーザー5" "1.00 いいね/回: ユーザー98" "1.00 いいね/回: ユーザー108" "1.00 いいね/回: ユーザー79" "1.00 いいね/回: ユーザー60" "1.00 いいね/回: ユーザー51" "1.00 いいね/回: ユーザー1"