例えば @tomo3141592653の僕(平田朋義)が
「東京駅に着きました」と発言したら、それを拾ってきて次のように出力します。
「東京 駅:
{"lat"=>35.689506, "lng"=>139.691701}
平田朋義@tomo3141592653
東京駅に着きました。」
解説はソースコード内のコメントで。
# -*- encoding: utf-8 -*-
require "MeCab"
require "twitter"
require "open-uri"
require "uri"
list =Twitter.list_timeline("tomo3141592653", "Suidobashi",:per_page=>300)
#@tomo3141592653が作ったSuidobashiリスト(うちのシェアハウスの住民リスト)のタイムラインを300件取ってくる。
c = MeCab::Tagger.new()
list.each do |li|
txt = li.text #例:東京駅に着きました。
word = c.parseToNode(txt) #形態素解析する。
# 形態素ごとループ
while word do
type = word.feature.split(",") # 品詞
if type[1].toutf8 == "固有名詞" and type[2].toutf8 == "地域" # 地域を表す単語のみ取ってくる。
location = word.surface #例:東京
next_word = word.next.surface #例:駅
json = open("http://maps.googleapis.com/maps/api/geocode/json?address=#{URI.escape(location)}&sensor=false")
#google geocodingにアクセスし geocoding結果を取ってくる。
#例:"http://maps.googleapis.com/maps/api/geocode/json?address=東京&sensor=false"
json = YAML.load(json.read) #jsonのパース
sleep(0.1)
#国名なら無視。
if json ==nil || json["status"] != "OK" || json["results"][0]["types"].index("country")
word = word.next
next
end
puts location + " "+next_word + ":" #例:東京 駅:
p json["results"][0]["geometry"]["location"] #例:{"lat"=>35.689506, "lng"=>139.691701}
puts li.user.name + "@"+ li.user.screen_name #例:平田朋義@tomo3141592653
puts txt #例:東京駅に着きました
puts ""
end
word = word.next # 次の形態素に移動
end
end #次のツイートに移動
実行結果、抜粋。
本町 駅:
{"lat"=>34.681936, "lng"=>135.498982}
やしまこ!@yashimako_
I'm at 岩本町駅 (S08) (千代田区, 東京都) http://t.co/aAPJCt3L
厚 焼き:
{"lat"=>35.3044432, "lng"=>135.1069231}
pooɟɐǝs@hnnhn
パーティによさそう / “【ハウツー】炊飯器でつくる「厚焼きホットケーキ」 | ライフ | マイナビニュース” http://t.co/FoVHoMHi
秋葉原 事件:
{"lat"=>35.698683, "lng"=>139.774219}
吉田俊文@tsfmysd
今週の長岡ルーマン2006の固有値をもっとも読んだ人は俺に違いない。コミュニケーション一元論が、とりわけ昨今のグローバル化による格差現象や、資本要素価格均等
化(≒利潤率均等化)現象、GM、サププライm、秋葉原事件を鑑みたときその説明力に疑念がありうるのはここにあるのじゃないか?
博多 つい:
{"lat"=>33.59135759999999, "lng"=>130.4148783}
吉田俊文@tsfmysd
土曜の夕方に深夜バス乗れば、朝目覚めて最終授業出席できるな…… 14の夜に博多ついて、15にお見舞いと赤ちゃんに会いにいって、16にばあちゃんちと犬の散歩して、17に家族と博多で飯くって、18時に博多駅にもどると。完璧かもしれない。
飯田橋 合同庁舎:
{"lat"=>35.702065, "lng"=>139.745015}
やしまこ!@yashimako_
窓口の人が前回と同じだとやりやすい (@ ハローワーク飯田橋 合同庁舎) http://t.co/a1P8hFo4
感想:
foursquare経由などの発言はほぼ確実に抽出できる。
精度を上げるにはNG単語リストを作ったほうが良さそう。
例:焼き、事件、都民、人
など