Skip to content

Instantly share code, notes, and snippets.

@tomo3141592653
Created May 17, 2012 03:17
Show Gist options
  • Save tomo3141592653/2715964 to your computer and use it in GitHub Desktop.
Save tomo3141592653/2715964 to your computer and use it in GitHub Desktop.
タイムラインから位置を表す単語を含むツイートを抽出し緯度経度で表示する。
# -*- encoding: utf-8 -*-
require "MeCab"
require "twitter"
require "open-uri"
require "uri"
require "kconv"
require "ir_b"
list =Twitter.list_timeline("tomo3141592653", "met",:per_page=>300)
#list = Twitter.user_timeline("pha", :count=>200)
c = MeCab::Tagger.new()
p list.length
list.each do |li|
txt = li.text #例:東京駅に着きました。
word = c.parseToNode(txt) #形態素解析する。
if li.geo
p li.created_at
p li.place.full_name if li.place
p li.geo.coordinates
puts li.user.name + "@"+ li.user.screen_name
p li.user.location
puts txt
puts ""
end
# 形態素ごとループ
while word do
type = word.feature.split(",") # 品詞
if type[1].toutf8 == "固有名詞" and type[2].toutf8 == "地域" # 地域を表す単語のみ取ってくる。
location = word.surface #例:東京
next_word = word.next.surface #例:駅
#NG words
if /ラーメン|そば|うどん|焼|原発|事件|豆腐|チョコ|ビール|人|県民|都民|サミット|弁|産|真司|第/ =~ next_word.toutf8
word = word.next
next
end
if /米|ゴマ|ヨーロッパ|アジア|日|太郎|ユーラシア|アフリカ|甲子園|カイロ|入/ =~ location.toutf8
word = word.next
next
end
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
p li.created_at
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
p li.user.location
puts txt #例:東京駅に着きました
puts ""
end
word = word.next # 次の形態素に移動
end
end #次のツイートに移動
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment