工学部女子大生ライターのranranがPythonを使ってネガポジ判定のプログラムを作成し、デートスポットの口コミデータを分析してみました。

「Python:ネガポジ判定を使って次のデートの行き先を考えてみた」イメージ画像
「Python:ネガポジ判定を使って次のデートの行き先を考えてみた」イメージ画像
ITトレンド最終更新日: 20180127

【Python】ネガポジ判定を使って次のデートの行き先を考えてみた

  • このエントリーをはてなブックマークに追加

情報過多な現在、インターネット上にはデートスポットの情報も溢れかえり、デートの行き先を考えるのにも一苦労します。そんな悩みを解決すべく、工学部女子大生ライターのranranがPythonを使ってネガポジ判定のプログラムを作成し、デートスポットの口コミデータを分析してみました。

こんにちは、工学部女子大生ライターのranranです。

彼氏と楽しくデートをしたいのでPythonのネガポジ判定を使ってデートスポットの口コミを分析する

突然ですが、私には付き合ってもうすぐ2年になる彼氏がいます。付き合って2年も経つと安定感は増しますが、緊張感はなくなってしまいます。付き合いたての頃は休みのたびにいろんなデートプランを提案してきてくれた彼氏も、今では、「次のお休みどこか行く? どこでもいいから適当に楽しそうなところ選んでおいてよ!」という具合です、つらい。

という私の愚痴はさておき、自分でデートの行き先を考えるようになってから気付いたのですが…

インターネット上でSNS上の口コミなどからデートスポットを選ぶのは大変

デートの行き先考えるの難しすぎっ!!!

インターネット上にはデートスポットの情報が溢れに溢れています。そこから有用性の高い情報を選び抜くのは至難の技。また、キュレーションサイトなどではいろんな魅力的なデートスポットをオススメしてくれており便利なのではありますが…

全部「オススメ」って書いてあるから選べない!!!

となると、やはり参考にしたいのはSNS上のリアルな口コミ。しかし、SNS上に分散しているデートスポットの口コミを1つずつ見ていくのも少々大変。

そこで、あれこれ考えているうちに思いついたのが、ネガポジ判定。今回は、Twitter上にあるデートスポットの口コミに対してネガポジ判定を行いながら、次のデートの行き先を考えてみました。

ネガポジ判定とは?

前向き(ポジティブ)な意味合いか後向き(ネガティブ)な意味合いかを判定するネガポジ判定のイメージ

ネガポジ判定とは自然言語処理分野の感情分析技術の1つで、その名の通り、対象の文章が前向き(ポジティブ)な意味合いを持つか、後向き(ネガティブ)な意味合いを持つかを判定する技術です。

ネガポジ判定はポジティブ度、あるいはネガティブ度が付与された単語辞書を元に行います。今回は、東北大学の乾・岡崎研究室の「日本語評価極性辞書」の用言編と名詞編(1)を使います。用言編では約5,000個の表現にネガティブ・ポジティブ、名詞編では約8,500個の表現にネガティブ(e)・ニュートラル(n)・ポジティブ(p)の評価極性情報が付与されています。

「日本語評価極性辞書」単語の評価極性情報の一部イメージ「日本語評価極性辞書」より

デートの行き先を考える手順は以下の通りです。実装部分はPythonを使いました。

1 デートの行き先の候補を考える
2 Twitterから行き先候補のスポット名を含むツイートを集める
3 ツイートを分ち書きにする
4 ツイートのネガポジ度を計算する
5 エリアごとに結果をまとめる
6 ポジティブなツイートが多いエリアを次のデートの行き先として彼氏に提案する

ネガポジ判定を使ってデートの行き先を考える

まず、デートの行き先候補を考えます。付き合って2年になるので、関東の定番デートスポットは行き尽くしていますが、ツイート数が比較的多そうなエリアを私の独断と偏見でピックアップさせていただきます。

デートの行き先候補は以下の5エリア(各3スポット)です。

1 みなとみらいエリア(赤レンガ倉庫、コスモワールド、大さん橋)
2 上野エリア(上野動物園、国立美術館、アメ横)
3 浅草エリア(花やしき、浅草寺、隅田公園)
4 お台場エリア(ダイバーシティ、ジョイポリス、葛西臨海公園)
5 六本木エリア(六本木ヒルズ、東京ミッドタウン、国立新美術館)

ちなみに彼氏と付き合う前、初めて2人で遊びに行ったのは六本木ヒルズです。懐かしい。

TwitterAPIを使って行き先候補のスポット名を含むツイートを集める

5エリア×3スポット、計15スポットの名称を含むツイートを集めます。ツイートをまとめて集めるにはTwitterAPIを使います。

TwitterAPIを使うにはアプリケーションの登録を行い、APIキーを取得する必要があります。この方法については下記サイトで詳しく解説されていたので、参考にしました。
https://syncer.jp/Web/API/Twitter/REST_API/

TwitterAPIが使えるようになったら、ツイートを集めていきます。今回は(検索結果が3000件に満たないスポットもありましたが…)最大3000件のツイートを取得できるようなプログラムを作成しました。

Twitter APIから「赤レンガ倉庫」でツイートを検索した結果画面「赤レンガ倉庫」の検索結果(TwitterAPIより)

みんな楽しそうでいいなあ…こんなの全部ポジティブっぽいじゃん…などと思いつつ、15スポット分のツイートを集めていきました。

ツイートの取得方法については、下記のサイトを参考にしました。
http://ailaby.com/twitter_api/

ツイートを分ち書きにして、ネガポジ度を計算する

次は、集めたツイートを形態素解析エンジン「MeCab」を使って分ち書きにします。ツイートに対して、MeCabを使うとこんな感じに分割してくれます。

「MeCab」の実行結果画面MeCabの実行結果

日本語評価極性辞書におけるネガティブを「-1」、ニュートラルを「0」、ポジティブを「1」とし、このように分ち書きにしたツイート内の各単語のネガティブ・ニュートラル・ポジティブの値の平均をそのツイートのネガポジ度として算出します。

例として「彼氏と赤レンガ倉庫に行ったよ〜!超楽しかった!良い思い出になった!」という文章でネガポジ度を算出しようとしたとき、実行結果は以下のようになります。

ネガポジ度の算出イメージ

文章内の「楽しい」「良い」「思い出」がポジティブな単語として評価されています。

また、「赤レンガ倉庫に行って楽しかった〜!でも、途中で彼氏と喧嘩しちゃって悲しかった…」という文章の場合だと、実行結果は次のようになります。

ネガティブな単語を含む場合のネガポジ度算出イメージ

この場合は「楽しい」はポジティブな単語、「喧嘩」「悲しい」はネガティブな単語として評価されています。

したがって、それぞれのネガポジ度は次のように算出できます。

例文全体でのネガポジ度の算出

ここまでの計算や実装の方法については、下記のサイトを参考にしました。
http://www.statsbeginner.net/entry/2017/05/07/091435

エリアごとに結果をまとめる

ネガポジ度を5段階に区切り、「ネガティブ(-1〜-0.5)」「ちょっとネガティブ(-0.5〜0)」「どちらでもない(0)」「ちょっとポジティブ(0〜0.5)」「ポジティブ(0.5〜1)」で評価しました。また、取得できたツイート数が同一ではなかったため、パーセンテージで円グラフにまとめました。

みなとみらいエリアのデートスポットネガポジ度算出グラフ上野エリアのデートスポットネガポジ度算出グラフ浅草エリアのデートスポットネガポジ度算出グラフお台場エリアのデートスポットネガポジ度算出グラフ六本木エリアのデートスポットネガポジ度算出グラフ

先の例文でネガポジ度算出する過程の実行結果に戻ってもらうと分かりやすいかもしれないのですが、辞書内の単語数には限りがあり、なおかつTwitter上で使われているような言葉よりも堅い表現の単語が多く収録されていることから、いずれのエリアの結果も「どちらでもない」に判定されたツイートが多くなってしまいました。次回、ネガポジ判定に挑戦するときは辞書に該当する単語がない文章は除くなどの工夫が必要だなと思いました。

…という、反省点などはそこそこに。

エリアごとの結果を比較してみると、どうやら六本木エリアについてのツイートが最もポジティブなものが多く、ネガティブなものが少ないようです。初デートで行ったエリアでもある六本木を選出することになるとは、なんとも感慨深いです。



彼氏に次のデート先を提案してみる

Pythonのネガポジ判定を使ってデートスポットの口コミを分析した結果を踏まえてデート先を提案する様子

これだけ頑張って考えたデート先です。きっと、私の彼氏は「すごいねー! 俺とのデートのために一生懸命考えてくれたんだね! 好きだよ! 大好きだよ! 愛してるよ!!!」というハッピーな結末になるはず…

デート先を提案するranranのイラスト1見て!ネガポジ判定しながら次のデートの行き先を考えたの!!!
そしたらね、六本木が良さそうだったよ〜!
六本木でデートしよう〜〜〜!!!

デート先を提案された彼氏のイラストそ、そ、そっか…なんか努力の方向を間違えているような気もするけど。
せっかく調べてくれたし、今度行こっか。

デート先を提案するranranのイラスト2わーい!



まとめ

以上、ネガポジ判定を使って、デートの行き先を検討してみました。今回は比較的単純な手法のネガポジ判定だったので、その正確さは実用的なレベルに達しているとは言えません。しかし、こんな使い方もできるということは示せたと思うので、今回のようなネガポジ判定を始めとするデータ分析に興味を持ってもらえると幸いです。

ranranプロフィール画像
ライタープロフィール ranran

工学部女子大生とライターをしています。卒業研究で彼氏の浮気を防ぐためにSNS上で彼氏と彼氏のフォロワーの親密度推定に挑戦中。大学院では計量言語学を専攻予定。

記事を
シェア