從影評的角度看《後來的我們》

要說五一期間最火的電影應該是劉若英執導的《後來的我們》,但就目前豆瓣的評分來看,火的不是劇情,而是它的“炒作”翻船了。但作爲技術控的我們總希望用技術去探索真相,下面就跟隨小編一起來用技術來客觀評價《後來的我們》吧。

         

評價一部電影除了評分、票房之外,小編覺得影評也是一項重要的指標,所以我們就用豆瓣電影上對《後來的我們》影評進行分析。

看了這篇文章,你能get到的技能如下:

    1.使用Python爬取數據。

    2.使用Java進行中文分詞,並統計詞語頻數。

巧婦難爲無米之炊,下面我們就使用Python爬取豆瓣電影上對《後來的我們》的影評。此次使用到的Python庫有request、BeautifulSoup、UserAgent。

requests庫的主要作用:根據鏈接地址得到HTML頁面的源代碼。

BeautifulSoup庫的主要作用:解析HTML文檔,使用戶方便提取所需內容。

UserAgent庫的主要作用:用於生成隨機的User-agent。

通過對豆瓣電影的分析,我們知道影評的鏈接格式爲https://movie.douban.com/subject/26683723/comments?start={影評起始條數}&limit=20&sort=new_score&status=P&percent_type=,並且影評起始條數的值也是有規律的,以0開始,每次加20即可。

再分析HTML頁面的源代碼,我們知道每一條影評信息存放在一個名爲comment的div標籤下,在此div標籤下有名爲comment-time的span標籤,存放此影評的發表時間,有一個p標籤存放具體的影評文字。我們都可以通過BeautifulSoup庫獲相應標籤下的內容。

我們把每一個頁面的所有影評信息存放在本地創建的txt文件中。爬取影評的Python代碼如下。

"""
採集豆瓣上《後來的我們》影評
"""
import requests
from fake_useragent import UserAgent
from bs4 import BeautifulSoup
import time

#從指定url下載HTML網頁
def get_page(url, options={}):
    ua = UserAgent()
    base_headers = {
        'User-Agent':  ua.random
    }
    headers = dict(base_headers, **options)
    try:
        r = requests.get(url, headers=headers)
        if r.status_code == 200:
            r.encoding=r.apparent_encoding
            return r.text
    except ConnectionError:
        return None
start = 0
while start <= 200:
    time.sleep(5)
    fileName = "E:\\閒時程序代碼\\python\\後來的我們\\影評\\douban" + str(start) + ".txt"
    f = open(fileName, "w",encoding='utf-8')
    comments = []    #要寫入的影評字符串列表
    url = "https://movie.douban.com/subject/26683723/comments?start=" + str(start) + "&limit=20&sort=new_score&status=P&percent_type="
    text = get_page(url)
    if text is not None:
        soup = BeautifulSoup(text, 'html.parser')
        commentDivs = soup.find_all('div', 'comment')
        for each in commentDivs:
            commentinfo = each.find('span','comment-info')
            commenttime = str(commentinfo.find('span','comment-time ')['title'])
            content = ""
            for i, string in enumerate(each.find('p')):
                if i == 0:
                    content = string
            content = content.replace("\n",",")
            content.encode(encoding='utf-8',errors="ignore")
            comments.append(commenttime + " \t" + content + "\n")
        f.writelines(comments)
        print(str(start) + " :成功")
    else:
        print(str(start) + " :失敗")
    start += 20

爬取成功後,在本地文件中有如下txt文件。

           

其中douban0.txt文件下內容如下。


有了影評數據,我們就可以進一步的進行分析了。我們對所有的影評文字進行一箇中文分詞處理。其中要用到的第三方jar包有 ansj_seg.jar nlp-lang.jar。

ansj_seg.jar的主要作用:對中文字符串進行詞意分詞。

nlp-lang.jar的主要作用:對分詞提供支持。

進行分詞的Java代碼如下。

package ChineseSplit;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import org.ansj.domain.Result;
import org.ansj.splitWord.analysis.ToAnalysis;

/**
 * 對《後來的我們》影評進行中文分詞處理
 * @author liuchen
 *
 */
public class Main {
	public static void main(String[] args) throws IOException {
		String str = "";            //存放所有影評字符
		String filepath = "E:\\閒時程序代碼\\python\\後來的我們\\影評";
		File file = new File(filepath);
		String[] filelist = file.list();
        for (int i = 0; i < filelist.length; i++) {
        	InputStreamReader isr = new InputStreamReader(new FileInputStream(filepath + "\\" + filelist[i]), "utf-8"); 
        	BufferedReader br = new BufferedReader(isr); 
        	String s = null;
            while((s = br.readLine())!=null){
                str += s.trim().split("\t")[1];
            }
            br.close();
        }       
        Result r = ToAnalysis.parse(str);  //返回分詞結果
	String[] words = r.toStringWithOutNature("\t").split("\t");  //輸出沒有詞性的分詞結果 以製表符分開
	Map<String, Integer> map = new HashMap<String, Integer>();  //使用HashMap統計詞語次數
	for(int i=0; i<words.length;i++){
		if(map.containsKey(words[i])){
			map.put(words[i], map.get(words[i])+1);
		}else{
			map.put(words[i], 1);
		}
	}
	for (Entry<String, Integer> entry : map.entrySet()) {     //輸出分詞結果
		System.out.println(entry);
			
	}		
    }  
}

對分詞結果進行人工去除標點符號、人稱代詞等,小編將能反映電影情節的詞語的出現次數進行降序排序,結果如下。

                                                     

將影評文字做成的詞雲圖如下所示。

                                       

通過上面的分析,小編個人覺得《後來的我們》雖然已經取得了10億票房,但它的口碑並不好,可能真的存在“炒作”的現象。小夥伴們有什麼看法,可以在下方留言。

喜歡我的文章請關注微信公衆號:追夢程序員。

                                                                  













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章