用python詞云包wordcloud做戰(zhàn)狼2豆瓣短評分析

在家咸魚好多天,決定蹭一波兒票房突破40億的《戰(zhàn)狼2》的熱度。以下分別從結果展示、數(shù)據(jù)獲取、數(shù)據(jù)清洗、結構化處理等四部分分別加以闡述:

一、結果展示

詞云圖是是一種很直觀也很有趣的文本描述形式,Python的wordcloud包就可以構建詞云,并且能夠自定義圖片(即color_mask)。而wordcloud包在windows環(huán)境下安裝時,可能會報如下錯誤:mocrosoft visual c++ 14.0 is required,導致安裝失敗。分享一個可行的解決方案:通過whl文件進行間接安裝。在網站http://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud上找到和自己系統(tǒng)以及python版本相吻合的wordcloud包的whl文件,然后通過pip命令即可安裝成功。
在我的實驗中,將獲取到的短評文本經過簡單的數(shù)據(jù)預處理(數(shù)據(jù)清洗、分詞、計算詞頻)之后,生成詞云圖。如下圖所示,字號越大的詞,在拆分出的詞的集合中出現(xiàn)頻率越高。顯而易見,“吳京”、“中國”、“電影”、“動作”等幾個高頻詞表明了這部電影的關鍵人物、電影類型及題材等關鍵信息。(為了呼應電影名,找了一幅狼的圖片做color_mask)

圖1.戰(zhàn)狼部分短評詞云圖

二、數(shù)據(jù)獲取

豆瓣的開源工作做得挺好,我們需要的電影短評數(shù)據(jù)都可以靜態(tài)爬下來。下圖是一條短評的網頁源碼,非常規(guī)整。完整的代碼就不貼了,只需要把LSTM天氣預測那篇的正則表達式對應更改即可。

圖2.一條短評的網頁源碼
temp_data = re.findall(r'<p.*?class="">(.*?)</p>', str(item), re.S)   #影評
self.datas.extend(temp_data)

舉個反例:貓眼電影專業(yè)版的票房數(shù)據(jù)就很坑,票房、平均票價和場均人次數(shù)據(jù)還是經過動態(tài)加密的。

圖3.票房數(shù)據(jù)的網頁源碼

對應上述源碼的7、8、9行的數(shù)值如下圖所示:


圖4.票房數(shù)據(jù)頁面版

雖然這種一層的加密方式很容易就能解出來,但是每爬一次數(shù)據(jù)都得重寫對應關系也讓人很煩,支持開源。

三、數(shù)據(jù)清洗

去除原始數(shù)據(jù)中的標點符號、字母和特殊字符,相當于濾波去噪的過程。

pattern = re.compile(r'[\u4e00-\u9fa5]+')
filterdata = re.findall(pattern,review_data)
clean_data = ''.join(filterdata)
圖5.清洗后文本數(shù)據(jù)

四、數(shù)據(jù)結構化處理

導入字典,提高分詞準確率。BosonNLP情感詞典是從微博、新聞、論壇等數(shù)據(jù)來源的上百萬篇情感標注數(shù)據(jù)當中自動構建的情感極性詞典。
[情感詞典來源:http://bosonnlp.com]
然后用jieba做分詞、定義word_cloud函數(shù)參數(shù)。在這部分需要注意一點,默認字體會顯示成各種顏色的方框,所以把字體改成能正常顯示中文字符的simsun.ttc。當然,用其他能正常顯示的也可以。

圖6.默認字體的顯示結果
jieba.load_userdict("D:\\文本情感分析\社交媒體詞典\\BosonNLP_sentiment_score\\BosonNLP_sentiment_score.txt")  #導入社交媒體字典
wordlist_after_jieba = jieba.cut(clean_data)  #分詞
word_split = " ".join(wordlist_after_jieba)
color_mask = imread("D:\\文本情感分析\\戰(zhàn)狼2.jpg") # 讀取背景圖片
word_cloud = WordCloud(font_path='simsun.ttc',
            background_color="white", max_words=1000,mask=color_mask,
            max_font_size=40, random_state=42)   #wordcloud參數(shù)定義
my_wordcloud = word_cloud.generate(word_split)  #生成詞云圖
#畫圖
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Scrapy爬蟲教程一 Windows下安裝Scrapy的方式和問題總結 Scrapy爬蟲教程二 淺析最煩人的反爬...
    熊熊熊孩子閱讀 823評論 0 3
  • 臨淵羨魚,不如退而結網。我們步步為營,從頭開始幫助你用Python做出第一張詞云圖來。歡迎嘗試哦! 在大數(shù)據(jù)時代,...
    王樹義閱讀 174,754評論 59 626
  • 還記得嗎?小時侯他騎著三輪車,你坐在后面,上橋的時候橋頭人多,你立馬躺了下來。你不是怕人,你是怕人知道他是你爸爸。...
    柚子和馬鞭草閱讀 223評論 0 0
  • 睡到4點,哭了幾分鐘。睡到5點10,斷斷續(xù)續(xù)哭了幾次,6點喊醒吃奶。
    miaoyin閱讀 232評論 0 0
  • 我在小區(qū)里幾乎見到過不同公司的快遞哥,他們有一個同點,來去匆匆,很少送貨上門,無論你收到的快遞是個信封還是個包裹。...
    賈學禮零售閱讀 313評論 0 0

友情鏈接更多精彩內容