MeCab はオープンソースの形態素解析エンジンです。
% sudo gem install mechanize
% sudo gem install hpricot
% sudo port install mecab % sudo port install mecab-ipadic-utf8 % sudo port install rb-mecab
class CreateStatuses < ActiveRecord::Migration
def self.up
create_table :statuses do |t|
t.column :text, :string
t.column :screen_name, :string
t.timestamps
end
end
def self.down
drop_table :statuses
end
end
require "rexml/document"
require "open-uri"
require 'MeCab'
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
class Status < ActiveRecord::Base
def self.get_xml_page(user, page)
xml = open("http://twitter.com/statuses/user_timeline/#{user}.xml?page=#{page}").read # XMLを取ってくる
doc = REXML::Document.new xml
doc.elements.each('/statuses/status') do |s|
text = s.elements["text"].text # 発言内容を取得
screen_name = s.elements['user/screen_name'].text
p "#{screen_name} #{text}"
status = Status.new(:text => text, :screen_name => screen_name)
if status.save # DBに挿入
p "SUCCESS"
else
p "FAILED"
end
end
end
def self.parse
m = MeCab::Tagger.new
h={}
Status.find(:all).each do |s|
nodes = m.parseToNode(s.text)
nodes.each do |node|
next unless node.category == '名詞' # 名詞のみ解析対象とする
if h[node.surface]
h[node.surface] += 1 # 出現回数をカウント
else
h[node.surface] = 1
end
end
end
# 結果出力
h.to_a.sort{ |a,b|
(b[1] <=> a[1]) * 2 + (a[0] <=> b[0])
}.each{ |e| puts "#{e[0]} #{e[1]}"}
end
def self.get_xml
Status.delete_all
1.upto(10) do |page|
get_xml_page('akio0911', page)
end
parse
end
end
ruby script/runner 'Status.get_xml'
Twitterにおいて最近よく使っているキーワードを見ることができます。
インストール 12 :// 11 http 11 com 10 ー 10 こと 9 1 7 emacs 7 メガネ 7 人 7 会 7 会社 7 勉強 7 忘年会 7 時 7 5 6 Twitter 6 tinyurl 6 さ 6 よう 6 電源 6 0911 5 2 5 akio 5 インターネット 5 ブログ 5
Rails と MeCab を組み合わせると、ネットから取得してきた各種情報を DB に格納したり、それに対して解析を行ったりすることが手軽にできます。
次回以降、Rails と MeCab を連携することによる応用例を書いていきたいと思います。
お楽しみに!
個人ブログ 拡張現実ライフ