ぷよぐらいんぬ

witk programming

(GoogleMapAPIに投げる用のだいたいあってる程度の)駅名をツイートから抜き出す

ツイートから駅名を取得して座標にしたい

スマブラのオフ会を検索する的なサービスを作りつつあります。とはいえ大層なものではなく、オフ会募集は主に[#スマブラDX_オフ会]等のハッシュタグを付けて行われているので、そのツイートひとつひとつに対して座標が得られたらまとめて地図に表示するだけです。

※任意のタグ付きツイートの本文を取得するのはTwitterAPI使って戻ってきたオブジェクトを処理するだけ、省略

ここからは平文のツイートが取得できたとして書きます

最寄り駅という言葉を削除

ハッシュタグをつけている以外には、オフ募集ツイートに文章の流れなどの規則はありません。今回は駅名だけを得たいので、まずは「最寄り駅」という言葉を破壊してから、残った「○○駅」を狙います。

tmp = re.sub('最寄り駅|最寄駅','',text)

最寄り駅or最寄駅という言葉を空白に変換します。この処理をかけたあとは、大抵の場合「駅」が含まれるフレーズは「(最寄りは)○○駅です」のところだけでしょう。

あとは【「駅」の前に漢字が2回以上連続した場合、その連続する漢字+「駅」】で抽出します。

ざっくり正規表現

output = re.findall("[一-龥]{2,}駅",tmp)

ひらがなカタカナとか第n種漢字とかは知りませんので。駅名にとんでもない漢字は使われていないだろうし今回は無視させてもらいます。あと漢字ではないのでJRとかも無視されます。日本地図中のだいたいの場所なのでいいかなと思います。暇なら今後そのへん詰めます。さすがにひらがな無視するのはどうかと思う。今ググったらできそう。まあまあ。

Pythonのre.findall(すべて検索)なのでoutputには"○○駅","■■駅"のようなリストが入ります。大抵は1つですが、最寄り駅が2つあった場合は2要素になるかも。今回は大体の場所でいい(どのみち最寄りだろ)のでtext3[0]と決め打ちで strを得ます。

で、GoogleMapのAPIがリバースジオコーディング(座標を地名でググる)ことをやってくれるので投げました。

はいできました。みんなスマブラDXやりましょう。

f:id:wanoh:20180314233155p:plain

f:id:wanoh:20180309004353p:plain