3章 その2
p33より
feedから記事本文を読んで単語の出現回数をチェックする。
htmlから本文を取り出すのに、hpricotを使ってみた。
gem install hpricot
まずは、1つのfeedから単語と出現回数を数える getwordcounts(url) を作る。
http://www.bitbucket.org/shokai/collective-intelligence-study/src/a3141b6eaa04/generatefeedvector.rb
generatefeedvector.rb として保存
require 'rubygems' require 'simple-rss' require 'open-uri' require 'cgi' require 'pp' require 'hpricot' class FeedVectorGenerator # RSSフィードのタイトルと、単語の頻度のディクショナリを返す def getwordcounts(url) # フィードをパースする rss = SimpleRSS.parse(open(url)) wc = Hash.new(0) # 初期値0設定 # 全てのエントリをループする rss.items.each{ |item| # 本文を読み出す summary = item.content if item.content != nil # atomの時 summary = item.description if item.description != nil # rssの時 # 単語のリストを取り出す words = getwords(item.title + ' ' + summary) words.each{ |word| wc[word] += 1 } } return rss.channel.title, wc end # HTMLからアルファベット小文字のみを抜き出し配列として返す def getwords(html) # HTMLタグを全て取り除く doc = Hpricot(html) txt = doc.inner_text # すべての非アルファベット文字で分割する words = txt.split(/[^A-Z^a-z]+/) # 小文字に変換する words_lower = Array.new words.each{ |word| words_lower.push(word.downcase) } return words_lower end end
generatefeedvector.rb を試す
test.rb
require 'pp' require 'generatefeedvector.rb' require 'open-uri' gen = FeedVectorGenerator.new pp gen.getwordcounts('http://gizmodo.com/index.xml')
結果(の一部)
"teevee"=>1, "windows"=>12, "depression"=>2, "always"=>5, "mindblowing"=>1, "body"=>1, "hook"=>1, "sad"=>3, "cameras"=>2, "efficiently"=>1, "networks"=>1, "yankodesign"=>1, "impressed"=>1, "produces"=>1, "spot"=>1, "funding"=>1, "harrowing"=>1, "commenters"=>1, "group"=>1, "find"=>1, "controlled"=>2, "fine"=>7, "shouldn"=>1, "deep"=>2, "param"=>46, "smart"=>2, "politically"=>1, "canons"=>1, "felt"=>2, "moan"=>1, "fancy"=>2, "digg"=>5, "border"=>322, "ultracompact"=>1, "sony"=>1, "bernab"=>1, "economic"=>1, "airborne"=>2, "front"=>1, "voicemail"=>1, "novelties"=>1, "rmhdm"=>2, "trailer"=>2, "where"=>5}]