大热片《寻梦环游记》到底在讲什么

本文介绍了一种通过爬虫技术抓取豆瓣上《寻梦环游记》短评的方法,并利用词云展示了观众对电影的主要观点及感受。

最近《寻梦环游记》刷爆朋友圈,一心只想学习的我,并没有去看,但是还是很想知道这个电影是讲的什么。怎么办呢,所谓把大象放进冰箱分三步。要知道这个电影讲什么也可以分三步:
1.登陆豆瓣
2.抓取所有短评
3.利用词云看看大家的评论集中在哪些点,就能大概了解电影类型,主题,大致内容。

一、模拟登陆豆瓣

因为豆瓣有反爬虫机制,不登录只能爬到第10页,无法获取更多的内容(练模拟登陆的本人,被豆瓣锁了两个号),本文用的post保单的方法进行登陆。

#by:大熊(xavier9410@163.com)

import requests
from lxml import etree
from PIL import Image
from io import BytesIO
import random
import pandas as pd
import time
import sys
reload(sys)
sys.setdefaultencoding('utf8')

# 获取验证码登陆
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) '
           'AppleWebKit/537.36 (KHTML, like Gecko)'
           'Chrome/62.0.3202.94 Safari/537.36'}
session = requests.session()
login_request = session.get('https://www.douban.com/login', headers=headers)
selector = etree.HTML(login_request.content)
post_data = {'source': 'movie',  # 填写表单
             'redir': 'https://movie.douban.com/subject/20495023/',
             'form_email': 'chengyx@hhu.edu.cn',
             'form_password': '3594633abc',
             'login': '登录'}
captcha_img_url = selector.xpath('//img[@id="captcha_image"]/@src')  # 获取验证码url
print captcha_img_url
try:
    if captcha_img_url != None:
        pic_request = requests.get(captcha_img_url[0])
        img = Image.open(BytesIO(pic_request.content))  # 打开验证码图片
        print '请输入你看到的字母:'
        img.show()
        string = raw_input('请输入验证码:')
        post_data['captcha-solution'] = string
        captcha_id = selector.xpath(
            '//input[@name="captcha-id"]/@value')  # 获取captcha_id
        post_data['captcha-id'] = captcha_id
        print(post_data)
except:
    pass

r = session.post('https://accounts.douban.com/login',
                  data=post_data)  # 将表单信息post进行登陆
with open('logfile.log', 'w') as logfile:
    logfile.write(r.text)
 except:
    pass

二、爬取短评内容

本来是抱着爬9万条评论的心做的,结果每次爬到25页就不能爬了,纠结了两天,改链接改来改去都不行,后来发现豆瓣现在短评只显示到25页,后面就没有了。豆瓣你狠!

r = session.post('https://accounts.douban.com/login',
                  data=post_data)  # 用session保持登陆状态
with open('logfile.log', 'w') as logfile:
    logfile.write(r.text)

# 获取内容
page = 0
while True:
    try:
        username = []  # 用户姓名
        star_ratings = []  # 评级
        votecount = []  # 认为评论有用的人数
        comments = []  # 短评内容
        seetimes = []  # 评论时间
        if page==0:
            url='https://movie.douban.com/subject/20495023/comments?start=p'
        else:
            pass
        r = session.get(url)
        html = r.text

        # 解析具体内容
        selector = etree.HTML(html)  # 解析所有页面的源码
        contents = selector.xpath('//div[@class="comment"]')
        nextp=selector.xpath('//div[@id="paginator"]/a/@href')
        if len(nextp)==1:
            nextpage=nextp[0]      #首页只有表示“后页”的一个href
        elif len(nextp)==2:
            nextpage="?default"    #末页有表示“首页”和“前页”的两个href
        else:
            nextpage=nextp[2]      #中间页有表示“首页”、“前页”、“末页”的三个href
        for content in contents:
            user = content.xpath('.//h3/span[2]/a/text()')[0]  # 用户名
            print user
            words = content.xpath('.//p/text()')[0].strip()
            star_rating = content.xpath('.//h3/span[2]/span[2]/@class')[0][7:8]
            vote = content.xpath('.//h3/span[1]/span/text()')[0]
            seetime = content.xpath('//h3/span[2]/span[3]/text()')[0]
            username.append(user)
            comments.append(words)
            star_ratings.append(star_rating)
            votecount.append(vote)
            seetimes.append(seetime)
        shortcom = {"username": username, "star_ratings": star_ratings,
                    "votecount": votecount, "comment": comments,
                    "seetimes": seetimes}
        houses_df = pd.DataFrame(shortcom)
        page += 1
        if page == 1:
            houses_df.to_csv('dbmvtest.csv', encoding="utf8")  # 写入第一页
        else:
            houses_df.to_csv('dbmvtest.csv', encoding="utf8", mode='a',
                             header=False)  # 追加下一页

        print '.................正在抓取第' + '%d' % (page) + '页'
        url='https://movie.douban.com/subject/20495023/comments'+nextpage
        time.sleep(random.uniform(1, 3))  # 间隔1-3秒抓一

于是,抓到如下评论:
这里写图片描述

三、生成词云

本来用datafram生成一些表格看上映期间每天评论数的表格,和做情感分析,但是数据有限就只做了词云。因为豆瓣短评是以评论热度(认为此评论有用的人数)来排序显示的,前25页评论基本能反映观众对电影的解读。

#coding=utf-8
from scipy.misc import imread
from os import path
import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS,ImageColorGenerator
import csv

#从CVS中读取短评所在列的内容
def readcontent(csv):
    with open('dbmvtest.csv','rb')as csvfile:
        reader=csv.DictReader(csvfile)
        column=[row['comment']for row in reader]   #加载表头为"comment"的列,即短评内容
        content="".join(column)
        return content

def creatcloud(mvcontent):
    wordafterjieba=jieba.cut(mvcontent,cut_all=False)    #分词
    wordsplit="".join(wordafterjieba)
    BGI=imread('./coco.jpg')
    print "加载图片成功"

    #设置词云样式
    wc=WordCloud(width=1024,
                 height=768,
                 background_color="white",   #设置背景颜色
                 mask=BGI,
                 font_path='SourceHanSansCN-Normal.otf',  #设置字体
                 max_words=300
                 max_font_size=400,      #设置字体最大值
                 random_state=50)
    wc.generate_from_text(wordsplit)
    img_colors=ImageColorGenerator(BGI)
    wc.recolor(color_func=img_colors)    #设置字体颜色为背景图片颜色
      plt.imshow(wc)
    plt.axis("off")
    plt.show()
    return wc

if __name__ == '__main__':
    comment=readcontent(csv)
    pic=creatcloud(comment)
    d = path.dirname(__file__)     #获取当前文件路径
    pic.to_file(path.join(d,"dreamcloud.jpg"))
    print "..........已生成词云.........."

最终生成了如下词云:

这里写图片描述

从词语中能看到好几部动画片的名称《头脑特工队》、《僵尸新娘》、《飞屋环游记》等等,里面我就看过僵尸新娘,哈哈,不过能和僵尸新娘相提并论,这部电影很ok。“梦想”、“家庭”、“墨西哥亡灵节”、“remember”、“死亡并不可怕”都是被提及很多的词,应该是电影的主题。

后来发现好像不对,哈哈,没把句子切开,切开后重新生成时下面这样的:

这里写图片描述

<think>好的,我现在需要回答用户关于FPGA变得门的原因,包括技术优势、应用场景和发展趋势。首先,我得先理解用户的问题,然后结合提供的引用内容来组织答案。 首先,用户想知道为什么FPGA变得门。根据引用[1]和[2],5G的发展推动了FPGA的应用,而且FPGA本身有灵活性高、可编程的优势。引用[4]提到FPGA在并行处理和IO单元上的优势,以及SoC FPGA结合了ARM和FPGA的优点,这可能也是门的原因之一。此外,引用[3]提到FPGA与ASIC的竞争,可能说明FPGA在某些方面比ASIC更有优势,比如开发周期短或者灵活性更高。 接下来,技术优势方面,引用[2]指出FPGA是高度灵活的硬件方案,引用[4]强调了并行处理能力和丰富IO,这些都是技术上的优势。可能还需要补充低延迟和可重构性,因为FPGA可以在硬件级别进行优化,适用于实时处理。 应用场景部分,引用[1]提到的5G通信,引用[4]提到的SoC FPGA的应用,可能包括通信、数据中心加速、工业控制等。另外,像人工智能、边缘计算这些新兴领域也可能用到FPGA,需要结合引用中的信息展开。 发展趋势方面,引用[3]提到行业合作,针对特定应用开发解决方案,引用[1]和[2]都提到在5G和更多领域的扩展。还有引用[4]中的SoC FPGA的发展趋势,结合处理器的灵活性和FPGA的硬件加速,这也是未来方向之一。此外,可能FPGA在AI加速、自动驾驶等方面也有潜力。 需要注意的是,用户提供的引用中有提到FPGA的竞争对手是ASIC,所以在分析门原因时可能需要对比两者的优缺点,比如FPGA更灵活但ASIC在量产时成本更低,但在需要快速迭代的场景下FPGA更有优势。 现在需要把这些点组织成一个结构清晰的回答,分点说明原因、技术优势、应用场景和发展趋势。同时要确保使用正确的中文表达,行内公式用$...$,独立公式用$$...$$,不过当前问题可能不需要太多公式,但如果有数学相关的部分需要正确应用。 检查引用标记是否正确添加,例如在提到5G时引用[^1],提到灵活性时引用[^2],行业合作引用[^3],SoC FPGA引用[^4]。 可能需要避免重复引用,确保每个引用只在相关的地方出现一次。同时,生成的相关问题要围绕FPGA的原因、优势、应用和趋势展开,帮助用户进一步探索。 最后,确保回答符合用户要求的结构,先回答用户的问题,然后生成相关问题,使用中文,语法正确,没有markdown格式,段落间用空行分隔,代码块用三个反引号包裹。</think>FPGA(现场可编程门阵列)近年来的门程度显著提升,主要源于其独特的技术优势、广泛的应用场景以及顺应技术发展趋势的特点。以下从三个维度详细分析: --- ### 一、FPGA的技术优势 1. **硬件可编程性** FPGA允许用户通过硬件描述语言(如Verilog或VHDL)自定义逻辑电路,实现“硬件重构”。相比ASIC(专用集成电路),FPGA无需流即可快速迭代,开发周期更短[^3]。例如,在算法优化场景中,FPGA可通过动态调整电路结构提升性能,而无需更换物理芯。 2. **并行处理能力** FPGA的硬件逻辑单元支持并行计算,适合处理实时性要求高、数据吞吐量的任务。例如,在通信系统中,FPGA可同时处理多个数据通道的信号调制与解调[^4]。 3. **低延迟与高能效** 通过硬件级优化,FPGA的延迟通常低于通用处理器(如CPU)。在金融高频交易等场景中,FPGA的微秒级延迟优势显著。 4. **丰富的I/O资源** FPGA提供量可配置的输入输出接口,支持多种协议(如PCIe、以太网),便于与外部设备直接交互[^4]。 --- ### 二、FPGA的应用场景 1. **通信领域** 5G基站需要高速信号处理和灵活协议适配,FPGA因其并行性和可重构性成为核心组件。例如,规模MIMO(多输入多输出)技术的波束成形算法依赖FPGA实现低延迟处理[^1]。 2. **数据中心与人工智能** FPGA在数据中心中用于加速特定任务(如加密解密、视频转码)。微软Azure曾部署FPGA加速Bing搜索的神经网络推理。 3. **工业控制与边缘计算** 在工业自动化中,FPGA可用于实时控制多轴运动系统;在边缘端,其低功耗特性适合部署轻量级AI模型[^4]。 4. **自动驾驶** FPGA通过硬件加速传感器数据处理(如激光雷达点云分析),满足实时性要求。 --- ### 三、FPGA的发展趋势 1. **异构集成(如SoC FPGA)** 将FPGA与处理器(如ARM核)集成,形成SoC FPGA。例如,Xilinx的Zynq系列同时具备FPGA逻辑单元和CPU,兼顾灵活控制与硬件加速。 2. **面向垂直领域的定制化方案** FPGA供应商正与行业伙伴合作开发专用解决方案。例如,针对AI推理的FPGA优化架构(如深鉴科技的DNNDK框架)。 3. **新兴技术驱动** 随着5G、自动驾驶、量子计算等技术的发展,FPGA在协议适配、实时信号处理等场景的需求将持续增长[^1]。 4. **工具链优化与生态扩展** 高层次综合(HLS)工具(如Vitis HLS)降低了FPGA开发门槛,吸引更多软件工程师参与硬件设计。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值