この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
こんにちは。
KBMJの佐藤です。
今回は Rails と MeCab を使って Twitter の発言内容を解析してみます。
MeCab について
MeCab はオープンソースの形態素解析エンジンです。
Mechanize のインストール
% sudo gem install mechanize
Hpricot のインストール
% sudo gem install hpricot
Mecab のインストール
% 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 を連携することによる応用例を書いていきたいと思います。
お楽しみに!
個人ブログ 拡張現実ライフ