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とゲームミュージックファンなら「ピン!」と来る豪華メンバー勢ぞろい。さらに原曲制作者の吉平元治と、ゲームミュージック界のカリスマ「佐野電磁」も緊急参戦決定!
これはひどい。買う