褒められて伸びる自分のためにポジティブなツイートしか表示されないエゴサーチツールを作った話

## はじめに
世の中にアウトプットを出したら他人の反応は気になるもの。長文ブログを書いたときだったり、頑張って開発したサービスをリリース出したときだったり。みな、ツイッターでエゴサーチをしていますよね。

他人からの反応はポジティブなものからネガティブなものまで様々あるかと思いますが、人間誰しも褒められたらやっぱり嬉しいものです。逆に、ネガティブなツイートも貴重な意見と分かっているものの、見るのは勇気がいりますよね。

その気持ち、とっても分かります。

ということで、**ポジティブなツイートしか表示されないエゴサツール**を作ってみました💪

なお、ドMの方はポジティブをネガティブに置き換えれば「ネガティブなツイートしか表示されない」ことも可能なので、安心してこのままお読みください。

## まずは動かしてみよう
Webアプリケーションとして作ったのですが本記事では簡単のためrubyプログラムのみご紹介します。試しに私の大好きな「サウナ」で検索した結果がこちらです。

```ruby:サウナを検索した例
$ ruby twi_posi_search.rb "サウナ"
ポジティブ度数:43.2%
バイトした後、銭湯行ってサウナして牛乳飲んでパンク聴いて帰る！最高！

ポジティブ度数:57.3%
気持ちかったぁ〜ガラガラだったし、やっぱ北欧サウナ最高‥眠い
```

サウナ万歳 🙌

刻々とツイートがなされているため通常の検索結果との違いがお伝えするのが難しいのですが、ポジティブなツイートのみが表示されかつそのツイートのポジティブ度数も可視化しております。



## 動作環境、利用したアセット
- 言語：ruby
- Twitter API
- COTOHA API（感情分析API）

## COTOHA APIについて
テキストの感情を分析するために[COTOHA API](https://api.ce-cotoha.com/contents/index.html)の感情分析を利用しています。そもそもCOTOHA APIとは、
> NTTコミュニケーションズが開発した日本最大級の日本語辞書を活用した自然言語処理、音声認識APIプラットフォーム

です。感情分析を含む、14の自然言語処理、音声処理をAPIで提供してくれています。ありがたや。APIを使うために必要な準備は[スタートガイド（COTOHA公式）](https://api.ce-cotoha.com/contents/gettingStarted.html)をご覧ください。

また、COTOHA APIをrubyで簡単に利用するためのgemを@tanaken0515さんが作ってくれていたので、今回はそちらを利用しています。詳細は[コチラ](https://qiita.com/tanaken0515/items/174e3076750891c218b9)の記事をご覧あれ💪

## 感情分析APIについて
感情分析APIは、入力として日本語で記述されたテキストを受け取り、そのテキストの書き手の感情(ネガティブ・ポジティブ)を判定します。返却結果には以下が含まれます。

1. 感情ラベル：ポジティブ／ネガティブ／ニュートラル
2. 感情スコア：1の信頼度（0.0〜1.0）
3. 感情フレーズ：1の判定結果の元になったフレーズとその情報

サンプルとして、「人生の春を謳歌しています」という文章の返却結果はこちらです。

```
{
  "result":
    {
    "sentiment":"Positive",
    "score":0.20766788536018937,
    "emotional_phrase":[
      {
        "form":"謳歌",
        "emotion":"喜ぶ,安心"
      }
    ]
  },
  "status":0,
  "message":"OK"
}
```

詳細は[公式リファレンス](https://api.ce-cotoha.com/contents/reference/apireference.html#sentiment)をご覧ください。

## 実装の流れ
- Twitter APIを使ってキーワード検索の結果を取得
    - 簡単のため、今回は最新10件を取得
- 取得したツイートを1件づつ感情分析 by COTOHA API
- ポジティブなツイートのみを表示
    - ポジティブ度数も併せて

## サンプルコード
技術的に新しいことはしていないため紹介のみ

```ruby:twi_posi_search.rb
require 'twitter'
require 'cotoha'

keyword= ARGV[0]

twitter_client = Twitter::REST::Client.new do |config|
  config.consumer_key         = "ホゲホゲ"
  config.consumer_secret      = "ホゲホゲ"
end

client_id = 'ホゲホゲ'
client_secret = 'ホゲホゲ'
cotoha_client = Cotoha::Client.new(client_id: client_id, client_secret: client_secret)
cotoha_client.create_access_token

since_id = nil
tweets = twitter_client.search(keyword, count: 10, result_type: "recent", exclude: "retweets", since_id: since_id)

tweets.take(10).each do |tw|
  result = cotoha_client.sentiment(sentence: tw.full_text)
  if result['result']['sentiment'] == "Positive"
    score = result['result']['score'].round(3)*100
    puts "ポジティブ度数:#{score}%"
    puts tw.full_text
    puts ""
  end
end
```
</div></details>

## 最後に
エゴサは手軽にお客様の反応を調べることができる便利な手段です。今回はポジティブなツイートのみを表示しましたが、ネガティブなツイートのみを表示するエゴササービスも面白いそうです。「あなたに対する辛辣な意見こそ、実は貴重なアドバイス」と言いますしね。はたまた、エゴサした結果を感情分析するサービスという方向性もありかなぁと思っています。

**エゴサーチと感情分析**

この組み合わせで良いアイデアあればぜひコメントください！ちょっとでも面白いなと思ったらイイねをしてくれるともっと喜びます。

## 参考文献
- [[自然言語処理 初心者向け] COTOHA API を Ruby で使いたくて gem を作りました](https://qiita.com/tanaken0515/items/174e3076750891c218b9)
- [Railsでツイッターのツイート検索アプリを作成する](https://qiita.com/nishina555/items/1cebe7c953c5821158ad)
- [twitter APIで遊んでみる #3(検索結果の取得)](https://qiita.com/tomozo6/items/747036c49a8b6bca49e4)
- [人間は、そんなに悲しい生き物じゃないけれど](https://qiita.com/yossymura/items/177610fbd58b783534f2)