簡易感情分析のテキストマイニングで地域振興を考えてみる -Twitterの手動スクレイピング編-
文章を感情分析にかける基本形は前回作った。あとはTwitterから目的の言葉に関するつぶやきデータを持ってくればいい。
つぶやきの取得方法
Gem系
RubyのGemだとつぶやきをリアルタイムで取得する「TweetStream」とか、過去のつぶやきを検索する「Twitte Gem」とかを使えばよさそう。
でもやってみると過去に遡るのは制限があった。2週間前とかそれくらいまでしかいけない。
もっと長い期間のつぶやきが欲しいのでこれは却下。
一応参考にしたサイト。
「Ruby: TweetStream でリアルタイムな Twitter のツイートデータを取得する」
「Twitter Ruby Gem で遊んでみる」
「Twitter Gem を使って、気になるあの人の生活リズムを覗き見たい…! #loupestudy」
「RubyのTwitter gemを使ってTwitterのタイムラインを取得する。たくさん。」
スクレイピング
Web上から自動でデータを取得してくるのをスクレイピングと呼ぶらしい。これをやるしかなさそう。
しかしTwitterではスクレイピングは禁止になっている。しかもhtmlが動的だから試してみても上手くソースコードを取得できなかった。
ルール的にも自分の技術的にも無理。
仕方ないから殆ど手動でhtmlをコピペするしかない。手順はこんな感じ。
1.Twitterで目的の単語を期間指定して検索
2.ページをひたすらスクロールしてつぶやきを全て読み込む(画面上で読み込まないとhtmlコードに反映されない)
3.ページのhtmlコードを保存
4.Ruby上でhtmlコードを整形してつぶやきのみを取り出す。
Twitterの検索画面のソースコードはこんな感じ。検索したままだと20件しかつぶやきが反映されていない。スクロールして最後までいくと次の20件が読み込まれる。
Twitterの本文は[TweetTextSize]クラスの
タグで囲まれている。本文内にもhtmlのタグがあるからこれも取り除かないといけない。
Nokogiriでソースコードをトリミング
htmlコードをトリミングする時によく使われているのがRubyのライブラリ「Nokogiri」。使い方は下記のサイト等を参照。
[Nokogiriを使ったRubyスクレイピング [初心者向けチュートリアル]]
[Nokogiriを使ったRubyでのスクレイピング 〜初心者編〜]
[RubyでWebスクレイピング]
Twitterのソースコードから本文を抜き出すにはこんな感じ。
require 'nokogiri' #保存したソースコードファイル「sourcecode」を開いてトリミング File.open('sourcecode') do |file| doc = Nokogiri::HTML(file) #[TweetTextSize]クラスのついたpタグの中身を取り出す。 nakami = doc.css("p.TweetTextSize") nakami.each do |tweet| #残ったhtmlタグを除外 text = "#{tweet.inner_text}" puts text end end
ただしこのやり方だとつぶやき中のurlとかは残る。
あとはTwitterの検索能力がそのまま反映される。つまり名前に検索単語が入ってるユーザーとかbotがそのまま検索結果に出てくる。
ここまででつぶやきの取得、文章のネガポジ判定のプログラムは出来た。あとは合体させてファイル出力させよう。
LEAVE A REPLY