2008-12-21 :-)
_ 朝ッ
1000起床
_ [MeCab][NetBSD]MeCab の ruby バインディングを入れる
% cd /usr/pkgsrc/textproc/ruby-mecab % sudo make install clean-depends
特に指定しない限り, euc が使用されます. もし, shift-jis や utf8 を 使いたい場合は, 辞書の configure オプションにて charset を変更し, 辞書を再構築してください. これで, shift-jis や, utf8 の辞書が作成されます.
手元では UTF-8 を使っているので UTF-8 を使うように変更する。
% cd /usr/pkgsrc/textproc/mecab-ipadic % env MECAB_CHARSET=utf8 sudo make install clean-depends
--enable-utf8-only を指定する方法が分からない。
_ [MeCab][tdiary][tagcloud][タグクラウド]MeCab で tdiary 日記の頻出単語を調べてタグクラウドを作る
参考
- Mechanize, Hpricot, MeCab でブログの頻出単語を調べる
 - yatsu.info : RubyでTagCloud (tagcloud-ruby)
 - MeCab: Yet Another Part-of-Speech and Morphological Analyzer
 - 2006 年を代表する単語のタグクラウドを作ってみる[ 20061225#p09 ]
 
準備
ruby-mecab を入れておく
コード
@akio0911 のコードをそのまま使ったら以下のように怒られた
% ./tagcloud.rb ~/diary/2008/200812.td2 2008
./tagcloud.rb:32:in `main': stack level too deep (SystemStackError)
        from ./mecabtagcloud.rb:14:in `[]'
        from ./mecabtagcloud.rb:14:in `each'
        from ./mecabtagcloud.rb:15:in `each'
        from ./mecabtagcloud.rb:31:in `main'
        from ./mecabtagcloud.rb:29:in `each'
        from ./mecabtagcloud.rb:29:in `main'
        from ./mecabtagcloud.rb:28:in `open'
        from ./mecabtagcloud.rb:28:in `main'
        from ./mecabtagcloud.rb:55
module MeCab
  class Node
    def category
      return self.feature.split(/,/)[0]
    end
    def each(&b)    ← この辺
      b[self]
      self.next.each(&b) if self.next
    end
  end
end
ちょっと変更しておく。
出来たコードはこんな。
#!/usr/pkg/bin/ruby -KU
require 'MeCab'
require 'kconv'
require 'tagcloud'
require 'cgi'
module MeCab
  class Node
    def category
      return self.feature.split(/,/)[0]
    end
    def each
      yield self.next if self.next
    end
#    def each(&b)
#      b[self]
#      self.next.each(&b) if self.next
#    end
  end
end
def main( argv )
  diary = argv[0]
  year = argv[1]
  m = MeCab::Tagger.new
  h={}
  File.open(diary){ |f|
    f.each{ |text|
      node = m.parseToNode(text)
      node.each do |node|
        next unless node.category == '名詞' # 名詞以外はカウント対象としない
        next if  node.surface =~ /^\d+$/ # 数字も対象としない
        next if  node.surface =~ /^[[:punct:]]/ # tdiary wiki形式の記号も対象としない
        if h[node.surface]
          h[node.surface] += 1
        else
          h[node.surface] = 1
        end
      end
    }
  }
  cloud = TagCloud.new
  h.each{ |tag, count|
    cloud.add(tag, "http://www.area51.gr.jp/~rin/diary/?category=#{CGI.escape(tag)};year=#{year}", count)
  }
  print cloud.html_and_css(200)
end
main ARGV
実行
tdiary のテキストをかき集めて
% find ~/diary/2008/ -name "*.td2" | while read file; do cat $file >> td2008;done
実行
% tagcloud.rb ./td2008 2008 > td2008tagcloud.txt
出来上がり
Apr C CD Copyright DLL DQ Date Dir Disk Does Doing ERROR F FF File Format G Installing Last MACHINE Microsoft NetBSD Oct PNP Package Partition Plagger Ruby Should Starting Stop TDIARY THE The Title Visible WARNING WWW Warning Windows a abcd aho amazon base begin body bsd build c cat cd config cp cpan cpu cvs cylinders def drwxr echo else end exec exit export f for fwohci gcc gpio http if img include inet int ja load main make miwarin mixi mkdir module my name ok options p parser pci piixide plugin print printf private public puts r raise read ref require rescue return rin ruby sd server set span start sub sudo t tdiary test time total uhci uhub umass usb using wd while xorg │ あと いま きのこ ここ こちら これ それ ふう ぶり オブジェクト オレ カルボナーラ カレー クラシック ゲーム コード コーヒー ゴーヤー スイートポテト ステージ ナポリ ファイナル ファイル プロキオンスタジオ プログラム ベイクドチーズケーキ ホテル リッジレーサー ヲ 今回 今年 今日 仕事場 他 以下 以前 何 作曲 作業 先日 冒頭 冷や 北海道 参加 古代 名前 場所 実行 客 店員 手元 日記 昨日 曲 最初 最後 最近 月餅 本 東京 植松 検索 次 環境 私 細江 結局 肉じゃが 蔵 講師 起動
_ それ category_to_tagcloud.rb で出来るよ
いやタグを書いてない日記も対象にしてみたかったのでね。
_ LINEAR vol.30 のチケットが 12/20 発売らしいので買った
特設ページとか出来てるんですが。
音楽CD「アルカナハート2 リミックス」情報とかなんとか。
「アルカナハート2」「すっごい!アルカナハート2~転校生あかねとなずな~」の楽曲を様々なアーティストが大胆リミックスしたCDが発売決定しました!
参加アーティストはリッジレーサーシリーズなどを手がけるゲームミュージックの父、“細江慎治”を始め、佐宗綾子、斎藤博人、矢野雅士、相原隆行、来兎、quad、Atsushi Oharaとゲームミュージックファンなら「ピン!」と来る豪華メンバー勢ぞろい。さらに原曲制作者の吉平元治と、ゲームミュージック界のカリスマ「佐野電磁」も緊急参戦決定!
これはひどい。買う











