3章 その3 feedlist.txtから単語出現表を作る

http://kiwitobes.com/clusters/feedlist.txt
のfeedリストを巡回して、blogから全単語を取り出し、 http://kiwitobes.com/clusters/blogdata.txt と同じフォーマットで単語-出現数リストを作る。
pythonでは大丈夫みたいだけどfeedlist行末の改行がrubyのopen-uriで邪魔なので削除した。


generatefeedvector.rb にgenerate('出力ファイル名')関数を追加する。本では関数にしていないが、RubyなのでFeedVectorGeneratorクラスのメソッドとして追加した。
http://www.bitbucket.org/shokai/collective-intelligence-study/src/eeaf2cb8b892/generatefeedvector.rb

  # Feedから単語頻出表を生成する
  def generate(filename='blogdata.txt')
    apcount = Hash.new(0) # それぞれの単語が出現するblogの数
    wordcounts = Hash.new
    feedlist = Array.new
    open('feedlist.txt'){ |file|
      file.each{ |line|
        line = line.gsub(/\r|\n/,'') # 改行を削除
        feedlist.push(line)
      }
    }

    feedlist.each{ |feedurl|
      begin
        title, wc = getwordcounts(feedurl)
        wordcounts[title] = wc
        wc.each{ |word, count|
          if count > 1
            apcount[word] += 1
          end
        }
      rescue
        puts 'Failed to parse feed ' + feedurl # 失敗した時
      else
        puts 'Success to parse feed ' + feedurl
      end
    }
    
    wordlist = Array.new
    
    apcount.each{ |w,bc|
      frac = Float(bc)/feedlist.length
      if frac > 0.1 && frac < 0.5
        wordlist.push(w)
      end
    }
    
    File.open(filename, 'w'){ |out|
      out.write('Blog')
      
      # 単語リスト出力
      wordlist.each{ |word|
        out.write("\t" + word)
      }
      out.write("\n")
      
      # 単語毎の出現数出力
      wordcounts.each{ |blog, wc|
        out.write(blog)
        wordlist.each{ |word|
          if wc.key?(word)
            out.write("\t" + wc[word].to_s)
          else
            out.write("\t0")
          end
        }
        out.write("\n")
      }
    }
    
  end


generatefeedvector.rb を動かすコードを書く。myblogdata.txtとして出力

require 'generatefeedvector.rb'

gen = FeedVectorGenerator.new
gen.generate('myblogdata.txt')


数分かかってできた。
http://www.bitbucket.org/shokai/collective-intelligence-study/src/eeaf2cb8b892/myblogdata.txt

http://kiwitobes.com/clusters/blogdata.txt と同じフォーマットになった。