Help us understand the problem. What is going on with this article?

社会性フィルターでSNS時代を生き抜く

はじめに

社会人は日々つらいことが多く、twitterをはじめとするSNSで嘆きたくなることも多いと思います。
ただ、ネガティブな発言は周りの人を不快にさせてしまうことがあるため、代わりに「にゃーん」と呟いて周りを和ませたりします。
これを社会性フィルターといいます。
今回はこの社会性フィルターを実装していきたいと思います。

実装方針

COTOHA API感情分析APIを使っていきます。
感情分析APIは、文章のPositive/Negative/Neutralを返し、感情語が含まれれば感情語と感情を返します。

文章がNegativeである場合には、文章を「にゃーん」にします。
また、Negativeであろう単語が含まれる場合には、文章全体がPositiveであろうと「にゃーん」にする厳しいモードも作成します。
nyan.png

ソースコード

すぐ動かせるcolaboratoryのコードはこちらから。

ソースコードはこちら

必要なものをインポート

social_filter.py
import sys
import requests

tokenを取得する関数

social_filter.py
def auth(client_id, client_secret):
    token_url = "https://api.ce-cotoha.com/v1/oauth/accesstokens"

    headers = {
        "Content-Type": "application/json",
        "charset": "UTF-8"
    }

    data = {
        "grantType": "client_credentials",
        "clientId": client_id,
        "clientSecret": client_secret
    }
    r = requests.post(token_url,
                      headers=headers,
                      data=json.dumps(data))

    return r.json()["access_token"]

感情分析する

social_filter.py
def sentiment(access_token, sentence):
    base_url = BASE_URL

    headers = {
        "Content-Type": "application/json",
        "charset": "UTF-8",
        "Authorization": "Bearer {}".format(access_token)
    }

    data = {
        "sentence": sentence,
        "type": "kuzure"
    }

    r = requests.post(base_url + "v1/sentiment",
                      headers=headers,
                      data=json.dumps(data))
    return r

社会性フィルター

social_filter.py
def social_filter(sentence, response, filter_level="low"):
    result = response.json()["result"]
    negative_list = ["悲しい", "不安", "恥ずかしい", "嫌", "切ない", "N"]

    if result["sentiment"] == "Negative":
        return "にゃーん"
    else:
        if filter_level == "high":
            if len([line for line in result["emotional_phrase"] if line["emotion"] in negative_list]) == 0:
                return sentence
            else:
                return "にゃーん"
        else:
            return sentence

社会性フィルターにかける

social_filter.py
args = sys.argv
sentence = args[1]
response = sentiment(access_token, sentence)
social_filter(sentence, response, args[2])

実行結果

python social_filter.py "毎日会社と家の往復でしんどい・・・" low
'にゃーん'

フィルターのレベルが低いと、ポジティブな表現が多いときに取りこぼしてしまう

python social_filter.py "学生の頃は毎日がバラ色で、何もなくても最高に楽しかった。でも今はつらい" low
'学生の頃は毎日がバラ色で、何もなくても最高に楽しかった。でも今はつらい'

フィルターのレベルをあげることで対処できる。

python social_filter.py "学生の頃は毎日がバラ色で、何もなくても最高に楽しかった。でも今はつらい" high
'にゃーん'

まとめ

今回はCOTOHA APIを使うことで、簡単に社会性フィルターの実装を行いました。
普段のツイートがネガティブなのか、「にゃーん」と呟いたほうがいいのか迷ったときにお使いください。

karasuyama
vtuberの世界
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした