1. 程式人生 > >Python微博評論進行情感分析

Python微博評論進行情感分析



最近身邊的人都在談論一件事:10月8日中午的一條微博,引發了一場微博的軒然大波。導致微博癱瘓的原因是全球超人氣偶像明星鹿晗發了一條“大家好,給大家介紹一下,這是我女朋友@關曉彤 ‘’。這條微博並@關曉彤。資料分析,可以在這裡自取!

l 關曉彤的這條微博轉發67652,回覆873532,點贊:2260400

這麼龐大的資料量相當上億的“肉雞”(粉們和吃瓜群眾)對微博的一次“攻擊”。

難怪微博工程師要一邊結婚一邊工作,都是鹿晗這條微博惹的禍。最後加了1000臺伺服器暫時頂住了。

這條微博評論非常的多了,大家對這件事態度怎麼樣?我們利用資料來分析一下。

原料:

1. 鹿晗微博3萬條評論;

2. 關曉彤微博3萬條評論;

3.500萬微博語料,下載地址,密碼:tvdo

工具:

1. Python3.6

2. SnowNLP(可方便的處理中文文字內容,是受到了TextBlob的啟發而寫的,由於現在大部分的自然語言處理庫基本都是針對英文的,於是寫了一個方便處理中文的類庫,並且和TextBlob不同的是,這裡沒有用NLTK,所有的演算法都是自己(不是本人)實現的,並且自帶了一些訓練好的字典。)

3. WordCloud,詞雲。

實施過程:

1.下載微博500萬條記錄,一定要到資料庫所在機器上匯入。

mysql - u root -p xxx <weibo500w.sql

2.匯入的時間會持續很長時間,匯入完成後,為了提高效率可以進行去重和清理空的資料。

去重複內容:
    delete from 表名 where id not in (select minid from (select min(id) as minid from 表名 group by 欄位) b);
去值為NULL:
    delete from 表名 where 欄位名=NULL
去值為""空值
  delete from 表名 where 欄位名=''

3.對微博語料進行情感分類,可以基於原有SnowNLP進行積極和消極情感分類和訓練。

import re
from snownlp import sentiment
import numpy as np
import
pymysql from snownlp import SnowNLP import matplotlib.pyplot as plt from snownlp import sentiment from snownlp.sentiment import Sentiment conn = pymysql.connect(host='資料庫IP', user='使用者名稱', password='密碼', charset="utf8",use_unicode=False) # 連線伺服器 with conn: cur = conn.cursor() cur.execute("SELECT * FROM test.weibo WHERE weiboId < '%d'" % 6000000) rows = cur.fetchall() comment = [] for row in rows: row = list(row) comment.append(row[18]) def train_model(texts): for li in texts: comm = li.decode('utf-8') text = re.sub(r'(?:回覆)?(?://)[email protected][\w\u2E80-\u9FFF]+:?|\[\w+\]', ',',comm) socre = SnowNLP(text) if socre.sentiments > 0.8: with open('pos.txt', mode='a', encoding='utf-8') as g: g.writelines(comm +"\n") elif socre.sentiments < 0.3: with open('neg.txt', mode='a', encoding='utf-8') as f: f.writelines(comm + "\n") else: pass train_model(comment) sentiment.train('neg.txt', 'pos.txt') sentiment.save('sentiment.marshal')

訓練完成後會生成sentiment.marshal.3,將snownlp/sentiment/中sentiment.marshal.3直接替換,訓練可以進行多輪訓練,精度會更好。

4. 爬取兩人的微博資料,使用m.weibo.com,解決懶載入問題,具體方式不在贅述,google 一下吧。

a. 微博提供了介面地址,微博提供API 地址,通過介面返回標準的json資料,自己想要存什麼資料自己就存吧。

{
    "comments": [
        {
            "created_at": "Wed Jun 01 00:50:25 +0800 2011",
            "id": 12438492184,
            "text": "love your work.......",
            "source": "<a href="http://weibo.com" rel="nofollow">新浪微博</a>",
            "mid": "202110601896455629",
            "user": {
                "id": 1404376560,
                "screen_name": "zaku",
                "name": "zaku",
                "province": "11",
                "city": "5",
                "location": "北京 朝陽區",
                "description": "人生五十年,乃如夢如幻;有生斯有死,壯士復何憾。",
                "url": "http://blog.sina.com.cn/zaku",
                "profile_image_url": "http://tp1.sinaimg.cn/1404376560/50/0/1",
                "domain": "zaku",
                "gender": "m",
                "followers_count": 1204,
                "friends_count": 447,
                "statuses_count": 2908,
                "favourites_count": 0,
                "created_at": "Fri Aug 28 00:00:00 +0800 2009",
                "following": false,
                "allow_all_act_msg": false,
                "remark": "",
                "geo_enabled": true,
                "verified": false,
                "allow_all_comment": true,
                "avatar_large": "http://tp1.sinaimg.cn/1404376560/180/0/1",
                "verified_reason": "",
                "follow_me": false,
                "online_status": 0,
                "bi_followers_count": 215
            },
            }
        },
        ...
    ],
    "previous_cursor": 0,
    "next_cursor": 0,
    "total_number": 7
}

目前微博沒有要求登入(可能是bug哦),建議sleep一下,否則很容易被微博大廠識別為爬蟲行為二被封堵;b.資料儲存,python很方便,直接儲存在在文字中就好了,但是仍然需要對一些特殊表情,空,重複進行處理

import codecs
import re
import numpy as np
import pymysql
from snownlp import SnowNLP
import matplotlib.pyplot as plt
from snownlp import sentiment
from snownlp.sentiment import Sentiment

comment = []
with open('檔案路徑', mode='r', encoding='utf-8') as f:
    rows = f.readlines()
    for row in rows:
        if row not in comment:
            comment.append(row.strip('\n'))
def snowanalysis(self):
    sentimentslist = []
    for li in self:
        #text = re.sub(r'(?:回覆)?(?://)[email protected][\w\u2E80-\u9FFF]+:?|\[\w+\]', ',',li)
        print(li)
        s = SnowNLP(li)
        print(s.sentiments)
        sentimentslist.append(s.sentiments)
    plt.hist(sentimentslist, bins=np.arange(0, 1, 0.01))
    plt.show()
snowanalysis(comment)

來看一執行過程:

讀取每段評論並依次進行情感值分析,最後生成一個0-1之間的值,當值大於0.5時代表句子的情感極性偏向積極,當分值小於0.5時,情感極性偏向消極,當然越偏向兩邊,情緒越偏激。

鹿晗微博評論情感分析,支援、祝福和反對、消極的的聲音基本保持平衡。

關曉彤微博微博評論情感分析,祝福、贊成的積極的情緒,分值大多高於0.5,而期盼分手或者表達消極情緒的分值,大多低於0.5。從圖上來看已經是一邊到的態勢。(由於語料樣本的數量,分析存在一定誤差,感興趣的同學一起完善情感樣本庫。

b.我們一起看一次兩人微博評論的詞雲,程式碼如下:

import pickle
from os import path
import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
def make_worldcloud(file_path):
    text_from_file_with_apath = open(file_path,'r',encoding='UTF-8').read()
    wordlist_after_jieba = jieba.cut(text_from_file_with_apath, cut_all=False)
    wl_space_split = " ".join(wordlist_after_jieba)
    print(wl_space_split)
    backgroud_Image = plt.imread('圖片路徑')
    print('載入圖片成功!')
    '''設定詞雲樣式'''
    stopwords = STOPWORDS.copy()
    stopwords.add("哈哈") #可以加多個遮蔽詞
    wc = WordCloud(
        width=1024,
        height=768,
        background_color='white',# 設定背景顏色
        mask=backgroud_Image,# 設定背景圖片
        font_path='E:\simsun.ttf',  # 設定中文字型,若是有中文的話,這句程式碼必須新增,不然會出現方框,不出現漢字
        max_words=600, # 設定最大現實的字數
        stopwords=stopwords,# 設定停用詞
        max_font_size=400,# 設定字型最大值
        random_state=50,# 設定有多少種隨機生成狀態,即有多少種配色方案
    )
    wc.generate_from_text(wl_space_split)#開始載入文字
    img_colors = ImageColorGenerator(backgroud_Image)
    wc.recolor(color_func=img_colors)#字型顏色為背景圖片的顏色
    plt.imshow(wc)# 顯示詞雲圖
    plt.axis('off')# 是否顯示x軸、y軸下標
    plt.show()#顯示
    # 獲得模組所在的路徑的
    d = path.dirname(__file__)
    # os.path.join():  將多個路徑組合後返回
    wc.to_file(path.join(d, "h11.jpg"))
    print('生成詞雲成功!')

make_worldcloud('文字路徑')

鹿晗評論詞雲,出現祝福、喜歡、支援等關鍵詞,也出現分手等一些詞。

關曉彤微博微博評論詞雲,出現很鹿晗,李易峰,不配,討厭,不要臉的聲音。

相關推薦

Python評論進行情感分析

最近身邊的人都在談論一件事:10月8日中午的一條微博,引發了一場微博的軒然大波。導致微博癱瘓的原因是全球超人氣偶像明星鹿晗發了一條“大家好,給大家介紹一下,這是我女朋友@關曉彤 ‘’。這條微博並@關曉彤。資料分析,可以在這裡自取! l 關曉彤的這條微博轉發67652,回覆873532,點贊:22604

利用500萬條語料對評論進行情感分析

最近身邊的人都在談論一件事:10月8日中午的一條微博,引發了一場微博的軒然大波。導致微博癱瘓的原因是全球超人氣偶像明星鹿晗發了一條“大家好,給大家介紹一下,這是我女朋友@關曉彤”。這條微博並@關曉彤。資料分析,可以在這裡自取!截止目前,鹿晗的這條微博已經被轉發1

基於LDA對電商商品評論進行情感分析

1、專案背景: 現在大眾在進行網購之前都會先看下相關商品的評論,包括好評與差評,再綜合衡量,最後才決定是否會購買相關的物品。甚至有的消費者已經不看商品的詳情秒數頁而是直接看評論,然後決定是否下單。商品評論已經是使用者決策最為核心的考量因素了。 在本專案中要根據

科學蹭熱點:用python獲取熱門評論進行情感分析

在我埋頭學習mysql、scrapy、django準備下一波吹水的時候,有人說,你去爬下老薛的微博呀,還能蹭個熱點,這讓勤(mo)奮(mo)學(kou)習(jiao)的我停下了寄幾敲程式碼的手。 然後我趕緊去關注了一下最近老薛的新聞…在感受了劇情的複雜和案情的撲朔迷離之後…我默默地學習瞭如

如何科學地蹭熱點:用python爬蟲獲取熱門評論進行情感分析

前言:本文主要涉及知識點包括新浪微博爬蟲、python對資料庫的簡單讀寫、簡單的列表資料去重、簡單的自然語言處理(snowNLP模組、機器學習)。適合有一定程式設計基礎,並對python有所瞭解的盆友閱讀。 甩鍋の宣告 1.本資料節選自新浪熱門

python對鹿晗、關曉彤進行情感分析 哭著學習學習~

前言:本文主要涉及知識點包括新浪微博爬蟲、python對資料庫的簡單讀寫、簡單的列表資料去重、簡單的自然語言處理(snowNLP模組、機器學習)。適合有一定程式設計基礎,並對python有所瞭解的盆友閱讀。 相信最近科技圈都在調侃一件事:10月8日中午的一條微博,引發了一場新浪微博使用者們(尤其是女性使用者

python對鹿晗、關曉彤進行情感分析

前言:本文主要涉及知識點包括新浪微博爬蟲、python對資料庫的簡單讀寫、簡單的列表資料去重、簡單的自然語言處理(snowNLP模組、機器學習)。適合有一定程式設計基礎,並對python有所瞭解的盆友閱讀。 相信最近科技圈都在調侃一件事:10月8日中午的一條微

python的中文文字挖掘庫snownlp進行購物評論文字情感分析例項

         昨晚上發現了snownlp這個庫,很開心。先說說我開心的原因。我本科畢業設計做的是文字挖掘,用R語言做的,發現R語言對文字處理特別不友好,沒有很多強大的庫,特別是針對中文文字的,加上那時候還沒有學機器學習演算法。所以很頭疼,後來不得已用了一個視覺化的軟體R

python 自然語言處理】對胡歌【獵場】電視劇評論進行情感分析

主要內容 1、什麼是SnowNLP? 2、SnowNLP可以幹哪些事兒? 3、如何進行情緒判斷? 4、獵場豆瓣熱門短評抓取。 5、獵場熱門短評情感分析。 6、附錄(python 畫詞雲圖) 什麼是SnowNLP? snowNLP,可以分詞,標註,還可以

python抓取新浪評論分析

1,實現效果 2,資料庫 3,主要步驟 1,輸入賬號密碼,模擬新浪微博登陸 2,抓取評論頁的內容 3,用正則表示式過濾出使用者名稱,評論時間和評論內容 4,將得到的內容存入資料庫 5,用SQL語句實現其他功能:例如統計評論次數等 4,詳細步驟 # -*- codi

Py:數據挖掘之對個人信朋友圈好友的性別、區域、昵稱、簽名信息進行情感分析——Jason niu

簽名信息 col ram gif -s post 區域 ons AR #Py:數據挖掘之對微信朋友圈好友的性別、區域、昵稱、簽名信息進行情感分析——Jason niu import os import re import csv import time import jso

【機器學習】使用Python的自然語言工具包(NLTK)對Reddit新聞標題進行情感分析

讓我們使用Reddit API獲取新聞標題並執行情感分析 在我上一篇文章中,使用Python進行K-Means聚類,我們只是抓取了一些預編譯資料,但是對於這篇文章,我想更深入地瞭解一些實時資料。 使用Reddit API,我們可以從各種新聞subreddit獲得成千上萬的

python簡單粗暴爬取評論區熱評配圖

本人爬蟲萌新,程式碼是網上搜了很多示例(很多看不懂,有些也跑不了了),摸摸索索了兩天才扒拉下來的,文中程式碼也非常簡單甚至沒有設定headers ,如有問題請指正,非常感謝! 瀏覽完整程式碼請直接拖動到底部。 工具:Jupyter notebook,

python機器學習----利用sklearn進行情感分析

import jieba from collections import defaultdict import os from sklearn.feature_extraction.text import TfidfTransformer from sklear

python寫網路爬蟲-爬取新浪評論

新浪微博需要登入才能爬取,這裡使用m.weibo.cn這個移動端網站即可實現簡化操作,用這個訪問可以直接得到的微博id。 分析新浪微博的評論獲取方式得知,其採用動態載入。所以使用json模組解析json程式碼 單獨編寫了字元優化函式,解決微博評論中的嘈雜干擾

Python專案】基於文字情感分析的電商評論重排序(以京東為例)(附程式碼)

一、背景 隨著網際網路的普及,網路購物已經成了人們購物的首選。使用者只需在電商平臺搜尋商品名,便可得到成百上千條商品資訊。商品資訊的排序演算法很複雜,但總的說來基本上都是根據與搜尋關鍵詞的關聯度和商品的人氣或商家排名來排序最終對使用者進行展示的。而好評率即是排

Python爬了菊姐2W條評論,竟發現“菊粉”都是這樣的人!(附程式碼)

關於菊姐為什麼會火,網上有很多文章,我就不再贅述了。今天我們就來做一份菊粉陶淵明的使用者畫像,看看那些 Pick 菊姐的人都有什麼特質? 先來看看百度指數,通過百度指數我們看出,菊姐的搜尋熱度在 5 月 30 開始出現頂峰,5 月 31 開始回落。 王菊百度指

Python貝葉斯演算法進行情感分析

from __future__ import division import re from numpy import ones, array from numpy.lib.scimath import log from nltk import * def loadDat

向娛樂圈看齊,Python爬取評論並製作酷炫的詞雲!

2019年伊始,祝願各位多吃不胖,身體倍兒棒!   回顧剛剛過去的2018,還有哪些新聞在你心底留有印象?   怎奈年紀增長,記憶減退,逝去的爆炸新聞也逐漸褪色變得索然無味,畢竟一直以來我的心裡只有學習。   &nbs

Python 文字挖掘:使用機器學習方法進行情感分析(一、特徵提取和選擇)

def create_word_bigram_scores(): posdata = pickle.load(open('D:/code/sentiment_test/pos_review.pkl','r')) negdata = pickle.load(open('D:/code/senti