TKO木下の動画が絶賛炎上中だと聞きつけまして
早速コメントを感情分析してみました
解説動画はこちら
の形式でhttpsに指定することでこの問題が回避できました。
ご参考までに。
分析対象の動画の概要
炎上している動画はこんな感じです。
動画タイトル:TKO木下よりご報告がございます。
公開日:2020/04/01
2020/04/11 16:00現在
視聴回数:2,845,395 回視聴
高評価:4771件
低評価:28万件
コメント数:50,898 件
素晴らしい低評価の数ですねー。
私は動画は見ておりませんが
低定評に1評投じさせていただきました。
感情分析のやり方
さて感情分析のやり方ですが
Youtubeのコメントと形態素解析
それと単語感情極性対応表というものを使います。
単語感情極性対応表はこちらを参照してください。
単語感情極性対応表
中身はこんな感じで
ない:ない:助動詞:-0.999997
酷い:ひどい:形容詞:-0.999997
病気:びょうき:名詞:-0.999998
死ぬ:しぬ:動詞:-0.999999
悪い:わるい:形容詞:-1
ポジティブワード、ネガティブワードがあり
ポジティブ方向になると0から1点
ネガティブ方向は-1から0点の間の数値を取ります。
単語のポジネガ具合が分かる訳です。
感情分析の手順
1.事前にYoutubeのコメントを集める。
Youtubeの動画のページをスクロールして
コメント表示させてから保存する。
2.BeautifulSoupでHTMLの中から
コメントの部分だけ拾い上げる。
3.コメントを形態素解析して単語感情極性対応表と
比較してポジネガ点数をつける
ポジティブだとプラス,ネガティブだとマイナスの点になる
Youtubeのコメントを集める
まずはじめに動画のコメントを集めなければならないので
動画のページをブラウザーで開いて
コメントを表示させたら、右クリックして保存
などで
HTMLファイルに保存します。
## HTMLを読み込んでコメントを抽出する
次にPythonのコードを使って
HTMLの構文解析を行い、コメントを抽出します。
まず必要なライブラリは
from bs4 import BeautifulSoup
from janome.tokenizer import Tokenizer
t = Tokenizer()
janome
は後に使いますが、インストールしていない方は
pip
などでインストールしておきましょう。
次にhtmlファイルを読み込んで変数に格納しておきます。
with open('htmlのファイル') as _f:
html = _f.read()
お次はコメント部分の抽出です。
htmlファイルの中からコメントを抽出して
リストに格納しています。
soup = BeautifulSoup(html ,'lxml')
contents = soup.find('div',id='contents')
ytds = contents.find_all('ytd-comment-thread-renderer')
result_list = []
for ytd in ytds:
span1 = ytd.find('span',class_="style-scope ytd-comment-renderer")
name = span1.text.replace('\n','').replace(' ','') if span1 is not None else ''
span2 = ytd.find('span',id="vote-count-middle")
high = span2.text.replace('\n','').replace(' ','') if span2 is not None else ''
come1 = ytd.find('yt-formatted-string', id="text")
rep = come1.text.replace(' 件の返信を表示','').replace(' ','') if come1 is not None else ''
come2 = ytd.find('div',id="content", class_="style-scope ytd-expander")
com = come2.text.replace('\n','').replace(' ','') if come2 is not None else ''
tmp = [name,high,rep,com]
result_list.append(tmp)
形態素解析をして単語に分けポジネガ点数を付ける
次は形態素解析です。
単語感情極性対応表は事前にダウンロードしておいて
CSVファイルなどにしておいてください。
posinega.csv
単語を辞書型に取り込みます。
posinega = {}
with open('posinega.csv') as _f:
for row in _f:
rows = row.replace('\n','').split(':')
posinega[rows[0]] = float(rows[3])
最後にコメントを形態素解析してポジネガで点数をつけていきます。
nega_result = {}
for rows in result_list:
count = 0
for token in t.tokenize(rows[3]):
h = token.part_of_speech.split(',')[0]
if any(['名詞'==h,'形容詞'==h,'動詞'==h]):
num=len(token.surface)
key = token.surface
if key in posinega:
count+=posinega[key]
nega_result[rows[3]]=count
これでコメントにポジネガの点数が付きました。
結果はどうなったか
最もネガティブなコメントは・・・
-53.76871590000002
私は叙々苑でバイトをしていた者です。
1年前、TKO木下が私のバイト先東京の叙々苑を
訪れた際の記憶は忘れられません。 悪い意味で。
TKO木下は入店早々に既に様子がおかしく、
ホール担当だった私の胸ぐらを急に掴み一言。
「さっさと案内しろやボケ」と。
しかし木下が入店する所を見て3秒程で
駆けつけたのにも関わらすこの暴言暴力
・・・
辛いです。
と全文はかなり長いので端折りますが
冒頭を見るだけでもかなりネガティブさが伝わる文面です。
ネガティブの一番悪いものでも-1点なので
60個近くネガティブな単語が使われているコメントでした。
これだけの長文を想像で書くのは無理でしょうから
実体験だったんだろうと思いますね。
というようなネガティブコメントが多数並んでいました。
逆に
ポジティブなコメント有るんかな?
みてみましょう。
11.14069 ウケる笑笑低評価笑笑笑笑笑笑笑笑笑笑
2.890590 おはよう。くっさいなぁ~笑笑笑
2.530665 祝!低評価日本一更新!
1.666281 2倍速だと面白い
1.412733 朗報低評価日本一達成
1.374283 むしろコメ欄見にきてる笑日本一の低評価王にしてあげるためにみんな低評価押そうな
1.299542 宮迫博之の真似すれば売れるとおもったんやろ笑笑
1.261103 (*'∇')/゚・:*【祝】*:・゚\('∇'*)低評価日本一!よっ!!あっぱれ!流石です!!
0.989242 ヒカルを越した天才
0.989199 適当にやってもいいよ君が面白いと思っても多分面白くないから
0.989199 ff7本当に面白いよ😃
0.963530 なんかこんだけ荒れてることすらおいしいな〜とか思ってそう。笑
0.935754 大喜利コメ見てるから黙れ
0.932040 バチスタすごい好きでしたw
0.932040 本当にお笑いが好きならやらんやろアホか
0.921042 うちの姪が初めて掴まり立ちしましてね。みんなで喜びました。
0.769555 来世で頑張って下さい❗️来世で応援します‼️
0.650668 ファンのみなさま、、、っておるんか?(笑)
0.568479 低評価日本一おめでとう㊗️あと、誰に謝ってんねん
0.568479 おめでとう低評価日本一‼️
0.568479 低評価日本一おめでとうございます!
0.568479 低評価日本一おめでとナス!
低評価おめでとう、など悪い意味で褒めてる感じですねwwwwww。
まとめ
というわけでまとめですが、日頃の行いは大事です。
見てない所でも敬意を払うことは当たり前だと思います。
特にタレントさんの私生活には
その人となりが出るようですね。
また素行の悪い方がテレビに出るのは
あまり良いことだとは思いません。
ネガティブなイメージの有るタレントをCMなどに使うと
商品、サービスにもネガティブイメージがつくので
我々企業側の人間はこういうタレントは
使わないようにしないといけないです。
ということで動画コメントの感情分析でした。
皆様も日頃の行いには気をつけたほうが良いですよ
誰がみてるか分かりませんし。
それでは
作者の情報
乙pyのHP:
http://www.otupy.net/
Youtube:
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw
Twitter:
https://twitter.com/otupython