在家咸魚好多天,決定蹭一波兒票房突破40億的《戰(zhàn)狼2》的熱度爬立。以下分別從結(jié)果展示万哪、數(shù)據(jù)獲取、數(shù)據(jù)清洗奕巍、結(jié)構化處理等四部分分別加以闡述:
一、結(jié)果展示
詞云圖是是一種很直觀也很有趣的文本描述形式檩坚,Python的wordcloud包就可以構建詞云冲杀,并且能夠自定義圖片(即color_mask)。而wordcloud包在windows環(huán)境下安裝時剩檀,可能會報如下錯誤:mocrosoft visual c++ 14.0 is required旺芽,導致安裝失敗辐啄。分享一個可行的解決方案:通過whl文件進行間接安裝运嗜。在網(wǎng)站http://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud上找到和自己系統(tǒng)以及python版本相吻合的wordcloud包的whl文件,然后通過pip命令即可安裝成功担租。
在我的實驗中,將獲取到的短評文本經(jīng)過簡單的數(shù)據(jù)預處理(數(shù)據(jù)清洗岭参、分詞尝艘、計算詞頻)之后,生成詞云圖背亥。如下圖所示,字號越大的詞娄徊,在拆分出的詞的集合中出現(xiàn)頻率越高轴猎。顯而易見,“吳京”捻脖、“中國”、“電影”沿癞、“動作”等幾個高頻詞表明了這部電影的關鍵人物矛渴、電影類型及題材等關鍵信息。(為了呼應電影名具温,找了一幅狼的圖片做color_mask)
二铣猩、數(shù)據(jù)獲取
豆瓣的開源工作做得挺好,我們需要的電影短評數(shù)據(jù)都可以靜態(tài)爬下來达皿。下圖是一條短評的網(wǎng)頁源碼贿肩,非常規(guī)整龄寞。完整的代碼就不貼了,只需要把LSTM天氣預測那篇的正則表達式對應更改即可溜哮。
temp_data = re.findall(r'<p.*?class="">(.*?)</p>', str(item), re.S) #影評
self.datas.extend(temp_data)
舉個反例:貓眼電影專業(yè)版的票房數(shù)據(jù)就很坑拂封,票房、平均票價和場均人次數(shù)據(jù)還是經(jīng)過動態(tài)加密的。
對應上述源碼的7萧恕、8肠阱、9行的數(shù)值如下圖所示:
雖然這種一層的加密方式很容易就能解出來,但是每爬一次數(shù)據(jù)都得重寫對應關系也讓人很煩走趋,支持開源噪伊。
三、數(shù)據(jù)清洗
去除原始數(shù)據(jù)中的標點符號鉴吹、字母和特殊字符,相當于濾波去噪的過程夺荒。
pattern = re.compile(r'[\u4e00-\u9fa5]+')
filterdata = re.findall(pattern,review_data)
clean_data = ''.join(filterdata)
四良蒸、數(shù)據(jù)結(jié)構化處理
導入字典,提高分詞準確率剿吻。BosonNLP情感詞典是從微博始赎、新聞仔燕、論壇等數(shù)據(jù)來源的上百萬篇情感標注數(shù)據(jù)當中自動構建的情感極性詞典魔招。
[情感詞典來源:http://bosonnlp.com]
然后用jieba做分詞、定義word_cloud函數(shù)參數(shù)办斑。在這部分需要注意一點,默認字體會顯示成各種顏色的方框鳞疲,所以把字體改成能正常顯示中文字符的simsun.ttc蠕蚜。當然,用其他能正常顯示的也可以靶累。
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()