从影评的角度看《后来的我们》

要说五一期间最火的电影应该是刘若英执导的《后来的我们》,但就目前豆瓣的评分来看,火的不是剧情,而是它的“炒作”翻船了。但作为技术控的我们总希望用技术去探索真相,下面就跟随小编一起来用技术来客观评价《后来的我们》吧。

         

评价一部电影除了评分、票房之外,小编觉得影评也是一项重要的指标,所以我们就用豆瓣电影上对《后来的我们》影评进行分析。

看了这篇文章,你能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亿票房,但它的口碑并不好,可能真的存在“炒作”的现象。小伙伴们有什么看法,可以在下方留言。

喜欢我的文章请关注微信公众号:追梦程序员。

                                                                  













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值