基于python豆瓣电影爬虫数据可视化分析推荐系统(完整系统源码+数据库+详细文档+论文+详细部署教程)

文章目录

  • 基于python豆瓣电影爬虫数据可视化分析推荐系统(完整系统源码+数据库+详细文档+论文+详细部署教程)
    • 一、 选题背景
    • 二、研究目的
    • 三、开发技术介绍
      • 1、Django框架
      • 2、LDA
      • 3、机器学习推荐算法
      • 4、大数据爬虫
      • 5、大数据Echarts可视化
    • 四、系统设计思想
    • 五、部分代码讲解
    • 六、系统实现
    • 七、源码文档等资料获取

基于python豆瓣电影爬虫数据可视化分析推荐系统(完整系统源码+数据库+详细文档+论文+详细部署教程)

摘要:本文介绍了一个基于大数据可视化的电影评论分析推荐系统,采用Python和Django构建。通过爬取豆瓣电影评论数据,利用数据清洗和处理技术,建立了一个全面的电影信息数据库。使用Python中强大的数据处理库进行统计分析,常见的一些库pandas/numpy/pyecharts/matplotlib/echarts等数据分析可视化工具,将结果以直观的可视化图表展示,深入挖掘用户对电影的评价与趋势。基于分析结果,我们设计了推荐算法,通过Django搭建的Web界面向用户推荐个性化的电影选择。该项目结合了大数据、数据可视化和机器学习推荐算法的技术,为电影爱好者提供了更智能、直观的电影推荐体验,展示了Python在构建复杂系统中的强大应用能力。

一、 选题背景

随着大数据技术的不断发展和普及,人们在日常生活中产生的数据量呈爆炸性增长。电影评论数据作为一种丰富的信息源,包含了观众对电影的各种评价和喜好。在这个信息爆炸的时代,如何从海量的电影评论中提炼有价值的信息,为用户提供更智能、个性化的电影推荐服务成为一个备受关注的问题。

本项目选取豆瓣作为数据源,结合Python和Django等先进技术,构建了一个综合性的豆瓣电影评论可视化分析推荐系统。通过对大规模评论数据的采集和处理,我们能够深入挖掘用户的观影趋势、口碑评价等信息。在这个基础上,利用数据可视化技术,以直观的图表和图形展示用户的观影偏好,为用户提供了更深入的电影分析服务。

该项目旨在结合大数据、可视化和推荐系统的技术优势,为电影爱好者提供一种全新的电影探索和选择方式,提升用户体验。通过对豆瓣电影评论数据的深度挖掘,我们能够更好地理解用户的需求,为他们提供更精准、个性化的电影推荐,推动了电影推荐系统的发展和创新。同时,项目的实施也展示了Python/Django等技术在构建复杂大数据系统中的卓越应用,为相关领域的研究和应用提供了有益的经验。

二、研究目的

1.深入挖掘电影评论数据: 通过构建基于Python/Django的豆瓣电影评论可视化分析推荐系统,旨在深入挖掘电影评论数据中蕴含的用户偏好、口碑评价等信息。通过对评论数据的系统性分析,揭示用户对电影的喜好和趋势。

2.构建全面的电影信息数据库: 通过爬取豆瓣电影评论数据,进行数据清洗和处理,构建一个全面而准确的电影信息数据库。该数据库将包含丰富的电影元数据,为系统提供充足的信息基础,支持后续的分析和推荐。

3.实现数据可视化展示: 利用Python中强大的数据处理和可视化库,将分析结果以直观的图表、图形展示给用户。通过直观的可视化展示,使用户更容易理解电影数据背后的信息,为用户提供更深入的电影分析服务。
4.设计智能化的电影推荐算法: 基于对电影评论数据的深度分析,设计智能化的推荐算法。通过考虑用户的历史喜好、观影习惯等因素,为用户提供个性化、精准的电影推荐服务,提升用户体验。

5.展示Python/Django在大数据应用中的优越性: 通过该项目的实施,展示Python和Django等先进技术在大数据应用中的卓越性能。强调这些技术在构建复杂系统、处理大规模数据时的高效性和可扩展性,为相关领域的研究和应用提供实用经验。

总体而言,研究旨在通过构建综合性的电影评论可视化分析推荐系统,挖掘电影评论数据的潜在价值,提升用户对电影的选择和理解体验,同时突显Python/Django等技术在大数据领域的应用前景。

三、开发技术介绍

1、Django框架

Django(发音为"jan-go")是一个高级的Python web框架,它鼓励快速开发和干净、可重用的设计。以下是Django框架的一些详细介绍:

  1. MVC 架构:
    • Django 遵循经典的 Model-View-Controller(MVC)软件设计模式,但采用了稍微不同的结构。在Django中,这个模式被称为Model-View-Template(MVT)。
    • Model(模型): 负责数据存储和检索。定义数据模型,通过对象关系映射(ORM)将数据模型映射到数据库表。
    • View(视图): 处理用户请求,从模型中检索数据,并将数据传递给模板进行渲染。
    • Template(模板): 定义如何呈现数据。Django模板系统使得在HTML中嵌套Python代码变得简单,支持动态生成内容。
  2. ORM(对象关系映射):
    • Django的ORM系统允许使用Python代码而不是SQL语句来定义和查询数据库模型。
    • 模型类(Model)是Django ORM的核心。通过定义模型类,可以在数据库中创建表,并通过模型类实例来执行数据库操作,而无需直接编写SQL语句。
  3. 自动化 Admin 界面:
    • Django自带一个强大的自动生成管理后台的功能。通过简单地定义模型,可以得到一个功能齐全的管理界面,用于添加、编辑和删除数据库中的记录。
    • 这减少了开发人员为管理任务编写额外代码的需要,提高了开发效率。
  4. 表单处理:
    • Django提供了用于处理表单的内置模块。这些表单可以用于在网站上收集用户输入,并在服务器端进行验证和处理。
    • 表单处理是构建用户交互的重要组成部分,而Django的表单系统使其变得简单而强大。
  5. URL 映射:
    • Django使用URL模式将URL映射到相应的视图函数。这使得URL的定义变得清晰,易于维护。
    • URL映射是通过在项目的urls.py文件中定义URL模式来完成的,这样使得项目具有清晰的URL结构。
  6. 中间件:
    • 中间件是Django处理请求和响应的钩子。它可以在请求到达视图之前或离开视图之后执行一些操作。
    • 例如,中间件可以用于身份验证、缓存、安全性等方面的处理,以便更好地组织和维护项目。
  7. 安全性:
    • Django具有内置的安全功能,包括防止跨站脚本攻击(XSS)、跨站请求伪造(CSRF)和点击劫持等安全漏洞。
    • 框架通过提供安全性相关的库和设置,帮助开发者编写更安全的Web应用。
  8. 模块化:
    • Django是一个模块化的框架,允许开发者使用或不使用框架的特定组件。这使得Django可以根据项目的需要灵活扩展和定制。

总体而言,Django是一个全功能的、高度可定制的Web框架,适用于各种规模的项目。它提供了一系列工具和功能,帮助开发者快速构建稳健、可扩展的Web应用程序。

2、LDA

Latent Dirichlet Allocation(LDA)是一种用于主题建模的概率图模型。它是由David Blei、Andrew Ng和Michael Jordan在2003年提出的。LDA假设文档是由多个主题的混合生成的,而每个主题又是由多个单词的混合生成的。在LDA中,文档和主题都被看作潜在(latent)的变量,通过观察到的单词来推断它们的分布。

LDA模型的主要概念:

  1. 文档(Documents): LDA假设每个文档都是由多个主题的混合生成的。文档中的每个单词都是从某个主题中抽取得到的。
  2. 主题(Topics): 主题是单词的分布。每个主题都可以被看作是一个概念或主题类别,它包含了文档中的一些单词。
  3. 单词(Words): 文档中的每个单词都由某个主题生成的概率分布和在该主题下选择某个词的概率共同决定。
  4. Dirichlet分布: LDA使用了Dirichlet分布来建模文档-主题和主题-单词的分布。Dirichlet分布是一个多变量概率分布,常被用来建模多项分布的参数。

LDA模型生成文档的过程可以用以下步骤表示:

  • 对于每个文档,从主题分布中抽取一个主题的概率分布。
  • 对于文档中的每个单词:
    • 从上面抽取的主题分布中抽取一个主题。
    • 从该主题的单词分布中抽取一个单词。

LDA的学习过程通常使用EM算法或变分推断等方法,通过最大化似然函数来估计模型参数。

在实际应用中,LDA经常被用于文本数据的主题建模,例如在文档集中发现主题结构,或者对文档进行主题分类。 LDA的一个关键优势是它的概率性质,可以提供主题分布的不确定性信息。

LDA是一个强大的工具,适用于从文本数据中发现潜在主题结构的问题。

在情感分析中,一种常见的方法是使用情感词典或机器学习模型来判别文本中的情感倾向,通常分为正向、负向和中性。与LDA结合的方式可能包括以下几个方面:

  1. 主题-情感模型: 在LDA生成主题的基础上,可以为每个主题关联一个情感。这就意味着每个主题不仅包含一组单词,还包含一个情感倾向。这种方式可能需要一个情感词典或者标注好的训练数据来学习主题与情感之间的关系。
  2. 文档级情感分析: 对于LDA生成的文档-主题分布,可以进一步在文档级别进行情感分析。例如,通过综合每个主题的情感信息,得出整个文档的情感倾向。
  3. 词级情感分析: 对于LDA生成的主题-单词分布,可以考虑对每个单词关联一个情感分数。这样,当对文本进行分析时,可以考虑每个单词的情感信息,而不仅仅是主题信息。

3、机器学习推荐算法

推荐算法是机器学习领域中的一个重要应用方向,用于根据用户的行为、兴趣和偏好为其提供个性化的推荐内容。以下是一些常见的推荐算法及其详细介绍:

  1. 协同过滤(Collaborative Filtering):
    • 协同过滤是一种基于用户行为或项目之间的相似性进行推荐的方法。它分为两类:
      • 用户协同过滤(User-Based Collaborative Filtering): 根据用户的历史行为找到相似用户,然后将那些相似用户喜欢的物品推荐给目标用户。
      • 物品协同过滤(Item-Based Collaborative Filtering): 根据物品之间的相似性,推荐目标用户喜欢过的相似物品。
  2. 基于内容的推荐(Content-Based Recommendation):
    • 基于内容的推荐算法使用物品的属性信息和用户的历史行为,通过计算它们之间的相似性来进行推荐。例如,通过分析电影的类型、演员等属性,向用户推荐相似类型的电影。
  3. 矩阵分解(Matrix Factorization):
    • 矩阵分解通过将用户-物品交互矩阵分解为两个低维矩阵的乘积,学习用户和物品的隐含特征向量。这些特征向量捕捉了用户和物品之间的关系,从而进行推荐。
  4. 深度学习推荐算法(Deep Learning Recommendation):
    • 利用深度学习模型来学习用户和物品之间的复杂关系。神经网络结构如多层感知机(MLP)、卷积神经网络(CNN)和循环神经网络(RNN)等被用于捕捉更高阶的特征表示。
  5. 多臂老虎机算法(Multi-Armed Bandits):
    • 这种算法通过在不同的推荐选择中进行权衡探索(尝试新事物)和利用(选择已知的好事物),以优化推荐的效果。
  6. 混合推荐算法(Hybrid Recommendation):
    • 结合多个推荐算法,利用它们的优势来提高推荐的准确性。例如,将协同过滤和基于内容的方法结合,以弥补各自算法的缺陷。
  7. 时序推荐算法(Sequential Recommendation):
    • 针对用户在时间上的变化,考虑用户行为的时序信息,使得推荐更加具有时效性。
  8. 因子分解机(Factorization Machines):
    • 类似于矩阵分解,但更加灵活,可以处理稀疏数据和高维特征。
  9. 群体推荐算法(Community-Based Recommendation):
    • 考虑用户之间的社交网络关系,通过社交网络信息进行推荐。

实际应用中常常结合多个算法,形成混合推荐系统,以提高推荐的准确性和覆盖度。选择合适的算法取决于数据的性质、问题的要求以及系统的特定场景。

4、大数据爬虫

当谈到大数据爬虫技术时,我们通常指的是使用自动化工具或技术从互联网上收集大量数据的过程。以下是对大数据爬虫技术的讲解:

  1. 什么是爬虫: 爬虫是一种自动化程序,可以模拟人类用户在网页上的行为,通过HTTP请求和解析HTML来从网页中提取数据。爬虫可以自动访问网页、抓取数据以及存储数据。
  2. 大数据爬虫的目的: 大数据爬虫旨在从大量来源中收集数据,这些来源可以是互联网上的网页、社交媒体平台、在线论坛、新闻网站等。它们被用于数据挖掘、情报搜集、市场研究、信息聚合等领域。
  3. 大数据爬虫的工作流程: 在使用大数据爬虫时,通常遵循以下步骤:
    • 确定目标:明确需要收集数据的来源和具体的信息需求。
    • 构建爬虫:编写爬虫程序,使用合适的编程语言和工具,设置爬取规则和网页解析方法。
    • 发送请求:爬虫程序向目标网站发送HTTP请求,获取网页内容。
    • 解析数据:对获取的网页内容进行解析,提取所需的数据。
    • 存储数据:将解析得到的数据存储到数据库、文件系统或其他存储介质中。
    • 处理数据:对收集的大量数据进行清洗、转换和分析。
    • 可视化和应用:可视化处理后的数据,并将其应用于各种领域,如商业决策、产品开发、研究报告等。
  4. 大数据爬虫技术的关键要素
    • URL管理:控制要爬取的网页URL列表,并管理爬虫的爬取策略,包括广度优先、深度优先等。
    • 网页解析:使用HTML解析器或XPath解析器来解析网页内容,提取所需的数据。
    • 数据存储:选择合适的数据库或文件系统来存储爬取的数据,如MySQL、Hadoop、Elasticsearch等。
    • 反爬虫机制应对:处理网站的反爬虫机制,如设置合理的请求频率、使用代理IP、处理验证码等。
    • 分布式爬取:如果需要处理大量的数据,可以使用分布式爬虫系统来提高效率和容错性。

这里给大家分享一些爬虫实战源码:
干货链接:https://pan.baidu.com/s/1SEAwAz54aDmFhvdBoAueAQ?pwd=2023

5、大数据Echarts可视化

ECharts(Enterprise Charts)是一个由百度开发的开源JavaScript图表库,用于构建各种交互式和可视化的图表。它提供了丰富的图表类型和灵活的配置选项,使得用户可以轻松地创建各种复杂的图表,包括折线图、柱状图、饼图、散点图等。

Echarts官方文档:Apache ECharts

四、系统设计思想

  1. 数据采集与处理:
    • 数据爬取: 利用爬虫技术从豆瓣网站获取电影评论数据,包括用户评论、评分、电影信息等。
    • 数据清洗: 对采集到的数据进行清洗,去除重复、缺失或异常数据,确保数据的质量和准确性。
    • 数据存储: 将清洗后的数据存储到数据库中,构建一个稳定、高效的电影信息数据库。
  2. 系统架构设计:
    • 前端设计: 使用Django框架构建用户界面,采用HTML、CSS、JavaScript等前端技术实现用户友好的交互和可视化效果。
    • 后端设计: 利用Django的模型-视图-控制器(MVC)架构设计后端逻辑,处理用户请求、调用推荐算法和访问数据库。
    • 数据库设计: 设计数据库表结构,包括用户信息、电影信息、评论数据等表,保证数据存储的规范性和一致性。
  3. 数据可视化与分析:
    • 可视化工具选择: 使用Python中的数据可视化库(如Matplotlib、Seaborn、Plotly)进行图表绘制,展示电影数据的统计信息、趋势和分布。
    • 用户交互设计: 在前端设计中,通过图表和用户界面实现用户对电影数据的灵活查询和交互,提升用户体验。
  4. 推荐算法设计:
    • 协同过滤算法: 基于用户的历史行为和兴趣,设计协同过滤算法,为用户推荐类似兴趣的电影。
    • 内容过滤算法: 考虑电影的内容特征,设计内容过滤算法,提供与用户过去喜好相符的电影推荐。
    • 混合推荐策略: 结合不同推荐算法,采用混合策略提高推荐系统的准确性和个性化程度。
  5. 系统性能优化:
    • 缓存机制: 利用缓存技术提高系统性能,减少重复计算,加速数据访问。
    • 分布式处理: 如有必要,考虑引入分布式计算和存储,处理大规模数据,提高系统的可扩展性。
  6. 安全性与隐私保护:
    • 用户身份验证: 在系统中引入用户身份验证机制,保护用户数据安全。
    • 隐私保护: 对于敏感用户信息,采用加密等手段保护用户隐私。
  7. 系统测试与优化:
    • 单元测试: 对系统的各个组件进行单元测试,确保每个部分的功能正常。
    • 性能测试: 对系统进行性能测试,发现并解决潜在的性能瓶颈,确保系统在大数据量下依然高效稳定。

通过以上设计思想,系统可以从数据采集、存储、处理,到用户界面设计、推荐算法实现,全方位满足用户对电影数据的需求,提供高效、可靠的服务。同时,注重系统性能和安全性的优化,为用户提供更好的体验。

五、部分代码讲解

spider_douban.py脚本,从豆瓣电影网站爬取电影信息。

部分源码:

  1. 导入模块:

    pythonimport requests
    from concurrent.futures import ThreadPoolExecutor
    

    使用requests库发送HTTP请求,以及ThreadPoolExecutor`来实现多线程执行。

  2. 函数定义:

    pythondef fenlei(nums=0, itype=''):
    

    定义名为fenlei的函数,接受两个参数numsitype,并给它们设置了默认值0和空字符串。

  3. 异常处理:

    pythontry:# ...
    except Exception as e:print(e)
    

    将代码包装在一个try-except块中,以捕获任何可能发生的异常,并打印异常信息。

  4. 设置请求头:

    pythonheaders = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Mobile Safari/537.36','Host': 'movie.douban.com','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'
    }
    

    定义了HTTP请求头,模拟了一个移动设备的用户代理。

  5. 发送请求:

    pythonhtml = session.get('https://movie.douban.com/', headers=headers, verify=False)
    

    使用requests库发送GET请求,获取豆瓣电影网站的主页内容,并禁用了SSL证书验证(verify=False)。

  6. 电影类型列表:

    pythontypes = ['剧情','喜剧','动作',...,'武侠','情色']
    

    定义电影类型。

  7. 计算页数:

    pythonpage = nums
    pages = page // 20
    

    根据输入的nums计算需要爬取的页数,每页20个电影。

  8. 多线程爬取:

    pythonwith ThreadPoolExecutor(1) as executor:for typez in types:for i in range(1, pages+1):executor.submit(start, session, i, typez, nums)
    

    使用ThreadPoolExecutor创建一个线程池,遍历电影类型和页数,通过executor.submit提交任务,调用start函数进行爬取。

  9. 异常处理输出:

    pythonexcept Exception as e:print(e)
    

    如果在try块中发生异常,将异常信息打印出来。

在这里插入图片描述

基于用户之间的欧氏距离来计算相似度,通过指定用户的相似用户的观影记录,然后根据相似用户的评分信息为指定用户推荐电影,为指定用户推荐未观看过且评分较高的电影。
部分算法源码:

# 根据用户推荐信息给其他人
def recommend(self,user):try:# 相似度最高的用户top_sim_user = self.top10_simliar(user)[0][0]print(top_sim_user)# 相似度最高的用户的观影记录items = self.data[top_sim_user]recommendations = []# 筛选出该用户未观看的信息并添加到列表中for item in items.keys():if item not in self.data[user].keys():recommendations.append((item, items[item]))recommendations.sort(key=lambda val: val[1], reverse=True)  # 按照评分排序# 返回评分最高的10部信息if len(recommendations) == 1:recommendations = []lists = []for key,value in self.data.items():for keys,values in value.items():lists.append((keys,values))for i in range(4):recommendations.append(random.choice(lists))recommendations = list(set(recommendations))return recommendations[:10]except:return ''
  1. recommend 方法:
    • 参数
      • user: 要为其进行推荐的用户ID。
    • 功能
      • 调用 top10_similar 方法找到与指定用户最相似的前4个用户中的第一个用户(相似度最高的用户)。
      • 获取相似用户的观影记录(items),即该用户已经观看过的电影及其评分。
      • 筛选出指定用户未观看的电影,并将这些电影及其评分添加到 recommendations 列表中。
      • recommendations 列表按照评分进行降序排序。
      • 如果推荐列表长度为1,说明相似用户与指定用户没有共同的观看历史,此时通过随机选择其他用户的电影进行推荐。首先,将所有用户的观影记录放入 lists 列表中,然后随机选择4部电影添加到 recommendations 中,并去重。
      • 返回评分最高的前10部电影作为推荐。

在这里插入图片描述
基于情感词典和程度词典的情感分析,使用了LDA模型进行主题建模。
部分代码

def sentiment_score_list(dataset):# seg_sentence = dataset.split('。')count1 = []count2 = []for sen in [dataset]: #循环遍历每一个评论segtmp = jieba.lcut(sen, cut_all=False)#把句子进行分词,以列表的形式返回stopwords = stopwordslist(root_path + os.sep + 'tex1' + os.sep + 'stopwords.txt')  # 这里加载停用词的路径outstr = []for word in segtmp:if word not in stopwords:if word != '\t':if word != ' ' and word != '\n':outstr.append(word)segtmp = outstrprint('分词:',segtmp)neg_dict = corpora.Dictionary([segtmp])  # 建立词典neg_corpus = [neg_dict.doc2bow(i) for i in [segtmp]]  # 建立语料库neg_lda = models.LdaModel(neg_corpus, num_topics=3, id2word=neg_dict,passes=20)  # LDA模型训练,一种主题模型,它基于一组文档中的词频生成主题for i in range(3):  # num_topics = 3print('模型主题:')print(neg_lda.print_topic(i))i = 0 #记录扫描到的词的位置a = 0 #记录情感词的位置poscount = 0 #积极词的第一次分值poscount2 = 0 #积极词反转后的分值poscount3 = 0 #积极词的最后分值(包括叹号的分值)negcount = 0negcount2 = 0negcount3 = 0for word in segtmp:if word in posdict:# 判断词语是否是情感词# print(word)poscount += 1c = 0for w in segtmp[a:i]:  # 扫描情感词前的程度词if w in mostdict:poscount *= 4.0elif w in verydict:poscount *= 3.0elif w in moredict:poscount *= 2.0elif w in ishdict:poscount *= 0.5elif w in deny_word:c += 1if judgeodd(c) == 'odd':  # 扫描情感词前的否定词数poscount *= -1.0poscount2 += poscountposcount = 0poscount3 = poscount + poscount2 + poscount3poscount2 = 0else:poscount3 = poscount + poscount2 + poscount3poscount = 0a = i + 1  # 情感词的位置变化elif word in negdict: # 消极情感的分析,与上面一致negcount += 1d = 0for w in segtmp[a:i]:if w in mostdict:negcount *= 4.0elif w in verydict:negcount *= 3.0elif w in moredict:negcount *= 2.0elif w in ishdict:negcount *= 0.5elif w in degree_word:d += 1if judgeodd(d) == 'odd':negcount *= -1.0negcount2 += negcountnegcount = 0negcount3 = negcount + negcount2 + negcount3negcount2 = 0else:negcount3 = negcount + negcount2 + negcount3negcount = 0a = i + 1elif word == '!' or word == '!':  ##判断句子是否有感叹号for w2 in segtmp[::-1]:  # 扫描感叹号前的情感词,发现后权值+2,然后退出循环if w2 in posdict or negdict:poscount3 += 2negcount3 += 2breaki += 1 # 扫描词位置前移# 以下是防止出现负数的情况pos_count = 0neg_count = 0if poscount3 < 0 and negcount3 > 0:neg_count += negcount3 - poscount3pos_count = 0elif negcount3 < 0 and poscount3 > 0:pos_count = poscount3 - negcount3neg_count = 0elif poscount3 < 0 and negcount3 < 0:neg_count = -poscount3pos_count = -negcount3else:pos_count = poscount3neg_count = negcount3count1.append([pos_count, neg_count])count2.append(count1)count1 = []return count2

解析:

  1. jieba.lcut(sen, cut_all=False): 使用结巴分词对输入的评论文本进行分词。cut_all=False表示采用精确模式。
  2. stopwords = stopwordslist(root_path + os.sep + 'tex1' + os.sep + 'stopwords.txt'): 载入停用词表,这些词汇将在后续的情感分析中被排除。
  3. 对分词后的文本进行停用词过滤,将不在停用词表中的词汇加入outstr列表。
  4. neg_dict = corpora.Dictionary([segtmp]): 创建一个词典,将分词后的文本作为一个文档传入。
  5. neg_corpus = [neg_dict.doc2bow(i) for i in [segtmp]]: 根据词典,将分词后的文本转换成词袋模型(Bag of Words)。
  6. neg_lda = models.LdaModel(neg_corpus, num_topics=3, id2word=neg_dict,passes=20): 使用Latent Dirichlet Allocation (LDA) 模型对文本进行主题建模,num_topics=3表示建立3个主题。
  7. 循环遍历三个主题,打印每个主题的内容。
  8. for word in segtmp: 遍历分词后的文本中的每个词汇。
  9. if word in posdict:: 判断词汇是否是情感词。
  10. poscount += 1: 如果是情感词,积极词的计数加1。
  11. 在接下来的循环中,检查情感词前的程度词,根据不同的程度词对积极词的分值进行调整。
  12. if judgeodd(c) == 'odd': poscount *= -1.0: 如果情感词前有奇数个否定词,将积极词的分值取反。
  13. poscount2 += poscount: 将调整后的积极词分值累加到poscount2中。

六、系统实现

安装好对应所需要的库

在这里插入图片描述

启动项目,在终端窗口输入命令:

python manage.py runserver

在这里插入图片描述

端口8000
在这里插入图片描述
部分截图:
在这里插入图片描述

电影查看

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

电影推荐
在这里插入图片描述

电影热度排行(前20)

在这里插入图片描述

影评可视化
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

后台管理

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

七、源码文档等资料获取

源码文档等资料可以添加下面个人名片,感谢各位的喜欢与支持!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/871786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ | Leetcode C++题解之第235题二叉搜索树的最近公共祖先

题目&#xff1a; 题解&#xff1a; class Solution { public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {TreeNode* ancestor root;while (true) {if (p->val < ancestor->val && q->val < ancestor->val) {anc…

贪心算法案例

1.买卖股票的最佳时机 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔…

代码随想录算法训练营第31天|LeetCode 56. 合并区间、738.单调递增的数字、968.监控二叉树

1. LeetCode 56. 合并区间 题目链接&#xff1a;https://leetcode.cn/problems/merge-intervals/description/ 文章链接&#xff1a;https://programmercarl.com/0056.合并区间.html 视频链接&#xff1a;https://www.bilibili.com/video/BV1wx4y157nD 思路&#xff1a; 本题关…

SpringBoot新手快速入门系列教程十一:自动生成API文档,Springboot3.x集成SpringDoc

本次项目我们用Maven来做&#xff0c;最近发现gradle其实很多项目的支持比较差&#xff0c;所以项目还是用Maven来新建项目。对比了市面上的几种API生成第三方库&#xff0c;只有springdoc 是能够按照文档就能部署出来的。 官网&#xff1a; OpenAPI 3 Library for spring-bo…

链接追踪系列-04.linux服务器docker安装elk

[rootVM-24-17-centos ~]# cat /proc/sys/vm/max_map_count 65530 [rootVM-24-17-centos ~]# sysctl -w vm.max_map_count262144 vm.max_map_count 262144 #先创建出相应目录&#xff1a;/opt/dockerV/es/…docker run -e ES_JAVA_OPTS"-Xms512m -Xmx512m" -d -p 92…

【流媒体】 通过ffmpeg硬解码拉流RTSP并播放

简介 目前RTSP拉流是网络摄像头获取图片数据常用的方法&#xff0c;但通过CPU软解码的方式不仅延时高且十分占用资源&#xff0c;本文提供了一种从网络摄像头RTSP硬解码的拉流的方法&#xff0c;并且提供python代码以便从网络摄像头获取图片进行后续算法处理。 下载ffmpeg F…

2024-07-15 Unity插件 Odin Inspector3 —— Button Attributes

文章目录 1 说明2 Button 特性2.1 Button2.2 ButtonGroup2.3 EnumPaging2.4 EnumToggleButtons2.5 InlineButton2.6 ResponsiveButtonGroup 1 说明 ​ 本章介绍 Odin Inspector 插件中有关 Button 特性的使用方法。 2 Button 特性 2.1 Button 依据方法&#xff0c;在 Inspec…

QT控件篇三

一、微调框 微调框&#xff08;QSpinBox&#xff09;是一个常用的Qt控件&#xff0c;允许用户通过增加或减少值来输入数字。分为两种, 整型-QSpinBox 浮点 QDoubleSpinBoxQSpinBox&#xff08;微调框&#xff09;的 setSingleStep 函数可以用来设置每次调整的步长&#xff08;…

【人工智能】人工智能与传统美工结合,AI美工的详细解析。

AI美工是一个结合了人工智能技术与美工设计的岗位&#xff0c;它利用AI工具和技术来辅助或完成美工设计的各项工作。以下是对AI美工的详细解析&#xff1a; 一、定义与职责 AI美工是指能够熟练使用AI工具和技术&#xff0c;如Midjourney、StableDiffusion等AIGC&#xff08;人…

2024安全行业大模型技术应用态势发展报告

以上是资料简介和目录&#xff0c;如需下载&#xff0c;请前往星球获取&#xff1a;https://t.zsxq.com/dH9bu

Python爬虫入门篇学习记录

免责声明 本文的爬虫知识仅用于合法和合理的数据收集&#xff0c;使用者需遵守相关法律法规及目标网站的爬取规则&#xff0c;尊重数据隐私&#xff0c;合理设置访问频率&#xff0c;不得用于非法目的或侵犯他人权益。因使用网络爬虫产生的任何法律纠纷或损失&#xff0c;由使用…

计算机网络之网络互连

1.什么是网络互连 1.1网络互连的目的 将两个或者两个以上具有独立自治能力的计算机网络连接起来&#xff0c;实现数据流通&#xff0c;扩大资源共享范围&#xff0c;或者容纳更多用户。 网络互连包括&#xff1a; 同构网络、异构网络的互连&#xff0c; 局域网与局域网&…

【Linux】多线程_5

文章目录 九、多线程6. 条件变量7. 生产者消费者模型 未完待续 九、多线程 6. 条件变量 在多线程编程中&#xff0c;一个或多个线程可能需要等待某个条件的发生&#xff0c;然后才能继续执行&#xff0c;而不是一直忙等。这种等待通常会占用CPU资源。条件变量提供了一种机制&…

【Java 的四大引用详解】

首先分别介绍一下这几种引用 强引用&#xff1a; 只要能通过GC ROOT根对象引用链找到就不会被垃圾回收器回收&#xff0c;当所有的GC Root都不通过强引用引用该对象时&#xff0c;才能被垃圾回收器回收。 软引用&#xff08;SoftReference&#xff09;&#xff1a; 当只有软引…

从汇编层看64位程序运行——栈上变量的rbp表达

在《从汇编层看64位程序运行——参数传递的底层实现》中&#xff0c;我们看到了栈帧中的变量是分为两种&#xff1a; 局部非静态变量。调用超过6个参数的函数时&#xff0c;从第7个参数开始的入参。 比如下面的代码 void foo10(int a, int b, int c, int d, int e, int f, i…

Python实现简单的ui界面设计(小白入门)

引言&#xff1a; 当我们书写一个python程序时&#xff0c;我们在控制台输入信息时&#xff0c;往往多有不便&#xff0c;并且为了更加美观且直观的方式输入控制命令&#xff0c;我们常常设计一个ui界面&#xff0c;这样就能方便执行相关功能。如计算器、日历等界面。 正文&a…

水表数字识别2:Pytorch DBNet实现水表数字检测(含训练代码和数据集)

水表数字识别2&#xff1a;Pytorch DBNet实现水表数字检测(含训练代码和数据集) 目录 水表数字识别2&#xff1a;Pytorch DBNet实现水表数字检测(含训练代码和数据集) 1.前言 2. 水表数字识别的方法 3. 水表数字识别数据集 4. 水表数字分割模型训练 &#xff08;1&#x…

JavaSE 面向对象程序设计进阶 IO 压缩流 解压缩流

目录 解压缩流 压缩流 解压缩流 压缩包 压缩包里面的每一个文件在java中都是一个ZipEntry对象 把每一个ZipEntry按照层级拷贝到另一个文件夹当中 import java.io.*; import java.util.Date; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream;public cl…

c#与欧姆龙PLC通信——如何更改PLC的IP地址

前言 我们有时候需要改变欧姆龙Plc的ip地址,下图有两种更改方式,一种是已知之前Plc设置的Ip地址,还有一种是之前不知道Pl的Ip地址是多少,下面分别做介绍。 1、已知PLC的IP地址的情况下更改地址 假设已知PLC的Ip地址,比如本文中PLC的IP为192.168.1.2,我首先将电脑的IP地…

17:低功耗篇(PWR)---HAL库

一:PWR 1:简历 PWR&#xff08;Power Control&#xff09;电源控制 PWR负责管理STM32内部的电源供电部分&#xff0c;可以实现可编程电压监测器和低功耗模式的功能 可编程电压监测器&#xff08;PVD&#xff09;可以监控VDD电源电压&#xff0c;当VDD下降到PVD阀值以下或上升到…