基于python豆瓣电影爬虫数据可视化分析推荐系统(完整系统源码+数据库+详细 ...

打印 上一主题 下一主题

主题 722|帖子 722|积分 2166

基于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框架的一些详细介绍:

  • MVC 架构:

    • Django 遵循经典的 Model-View-Controller(MVC)软件计划模式,但接纳了轻微差别的结构。在Django中,这个模式被称为Model-View-Template(MVT)。
    • Model(模型): 负责数据存储和检索。定义数据模型,通过对象关系映射(ORM)将数据模型映射到数据库表。
    • View(视图): 处置惩罚用户请求,从模型中检索数据,并将数据传递给模板进行渲染。
    • Template(模板): 定义怎样出现数据。Django模板系统使得在HTML中嵌套Python代码变得简朴,支持动态生成内容。

  • ORM(对象关系映射):

    • Django的ORM系统允许使用Python代码而不是SQL语句来定义和查询数据库模型。
    • 模型类(Model)是Django ORM的核心。通过定义模型类,可以在数据库中创建表,并通过模型类实例来执行数据库操作,而无需直接编写SQL语句。

  • 自动化 Admin 界面:

    • Django自带一个强盛的自动生成管理背景的功能。通过简朴地定义模型,可以得到一个功能齐备的管理界面,用于添加、编辑和删除数据库中的记载。
    • 这减少了开发人员为管理使命编写额外代码的必要,进步了开发效率。

  • 表单处置惩罚:

    • Django提供了用于处置惩罚表单的内置模块。这些表单可以用于在网站上网络用户输入,并在服务器端进行验证和处置惩罚。
    • 表单处置惩罚是构建用户交互的重要组成部分,而Django的表单系统使其变得简朴而强盛。

  • URL 映射:

    • Django使用URL模式将URL映射到相应的视图函数。这使得URL的定义变得清晰,易于维护。
    • URL映射是通过在项目的urls.py文件中定义URL模式来完成的,这样使得项目具有清晰的URL结构。

  • 中央件:

    • 中央件是Django处置惩罚请求和相应的钩子。它可以在请求到达视图之前或脱离视图之后执行一些操作。
    • 例如,中央件可以用于身份验证、缓存、安全性等方面的处置惩罚,以便更好地组织和维护项目。

  • 安全性:

    • Django具有内置的安全功能,包括防止跨站脚本攻击(XSS)、跨站请求伪造(CSRF)和点击挟制等安全毛病。
    • 框架通过提供安全性相关的库和设置,帮助开发者编写更安全的Web应用。

  • 模块化:

    • Django是一个模块化的框架,允许开发者使用或不使用框架的特定组件。这使得Django可以根据项目的必要机动扩展和定制。

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

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

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


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

    • 从上面抽取的主题分布中抽取一个主题。
    • 从该主题的单词分布中抽取一个单词。

LDA的学习过程通常使用EM算法或变分推断等方法,通过最大化似然函数来估计模型参数。
在现实应用中,LDA常常被用于文本数据的主题建模,例如在文档会合发现主题结构,大概对文档进行主题分类。 LDA的一个关键优势是它的概率性质,可以提供主题分布的不确定性信息。
LDA是一个强盛的工具,适用于从文本数据中发现潜在主题结构的问题。
在情感分析中,一种常见的方法是使用情感辞书或机器学习模型来判别文本中的情感倾向,通常分为正向、负向和中性。与LDA结合的方式大概包括以下几个方面:

  • 主题-情感模型: 在LDA生成主题的基础上,可以为每个主题关联一个情感。这就意味着每个主题不仅包罗一组单词,还包罗一个情感倾向。这种方式大概必要一个情感辞书大概标注好的训练数据来学习主题与情感之间的关系。
  • 文档级情感分析: 对于LDA生成的文档-主题分布,可以进一步在文档级别进行情感分析。例如,通过综合每个主题的情感信息,得出整个文档的情感倾向。
  • 词级情感分析: 对于LDA生成的主题-单词分布,可以思量对每个单词关联一个情感分数。这样,当对文本进行分析时,可以思量每个单词的情感信息,而不仅仅是主题信息。
3、机器学习推荐算法

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

  • 协同过滤(Collaborative Filtering):

    • 协同过滤是一种基于用户行为或项目之间的相似性进行推荐的方法。它分为两类:

      • 用户协同过滤(User-Based Collaborative Filtering): 根据用户的汗青行为找到相似用户,然后将那些相似用户喜欢的物品推荐给目标用户。
      • 物品协同过滤(Item-Based Collaborative Filtering): 根据物品之间的相似性,推荐目标用户喜欢过的相似物品。


  • 基于内容的推荐(Content-Based Recommendation):

    • 基于内容的推荐算法使用物品的属性信息和用户的汗青行为,通过计算它们之间的相似性来进行推荐。例如,通过分析电影的类型、演员等属性,向用户推荐相似类型的电影。

  • 矩阵分解(Matrix Factorization):

    • 矩阵分解通过将用户-物品交互矩阵分解为两个低维矩阵的乘积,学习用户和物品的隐含特征向量。这些特征向量捕捉了用户和物品之间的关系,从而进行推荐。

  • 深度学习推荐算法(Deep Learning Recommendation):

    • 利用深度学习模型来学习用户和物品之间的复杂关系。神经网络结构如多层感知机(MLP)、卷积神经网络(CNN)和循环神经网络(RNN)等被用于捕捉更高阶的特征表现。

  • 多臂老虎机算法(Multi-Armed Bandits):

    • 这种算法通过在差别的推荐选择中进行权衡探索(尝试新事物)和利用(选择已知的功德物),以优化推荐的效果。

  • 混合推荐算法(Hybrid Recommendation):

    • 结合多个推荐算法,利用它们的优势来进步推荐的准确性。例如,将协同过滤和基于内容的方法结合,以弥补各自算法的缺陷。

  • 时序推荐算法(Sequential Recommendation):

    • 针对用户在时间上的变化,思量用户行为的时序信息,使得推荐更加具有时效性。

  • 因子分解机(Factorization Machines):

    • 雷同于矩阵分解,但更加机动,可以处置惩罚希奇数据和高维特征。

  • 群体推荐算法(Community-Based Recommendation):

    • 思量用户之间的交际网络关系,通过交际网络信息进行推荐。

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

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

  • 什么是爬虫: 爬虫是一种自动化步伐,可以模仿人类用户在网页上的行为,通过HTTP请求和解析HTML来从网页中提取数据。爬虫可以自动访问网页、抓取数据以及存储数据。
  • 大数据爬虫的目的: 大数据爬虫旨在从大量来源中网络数据,这些来源可以是互联网上的网页、交际媒体平台、在线论坛、新闻网站等。它们被用于数据挖掘、情报搜集、市场研究、信息聚合等范畴。
  • 大数据爬虫的工作流程: 在使用大数据爬虫时,通常遵循以下步骤:

    • 确定目标:明白必要网络数据的来源和具体的信息需求。
    • 构建爬虫:编写爬虫步伐,使用合适的编程语言和工具,设置爬取规则和网页解析方法。
    • 发送请求:爬虫步伐向目标网站发送HTTP请求,获取网页内容。
    • 解析数据:对获取的网页内容进行解析,提取所需的数据。
    • 存储数据:将解析得到的数据存储到数据库、文件系统或其他存储介质中。
    • 处置惩罚数据:对网络的大量数据进行清洗、转换和分析。
    • 可视化和应用:可视化处置惩罚后的数据,并将其应用于各种范畴,如商业决议、产品开发、研究报告等。

  • 大数据爬虫技能的关键要素

    • 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
四、系统计划思想


  • 数据采集与处置惩罚:

    • 数据爬取: 利用爬虫技能从豆瓣网站获取电影批评数据,包括用户批评、评分、电影信息等。
    • 数据清洗: 对采集到的数据进行清洗,去除重复、缺失或非常数据,确保数据的质量和准确性。
    • 数据存储: 将清洗后的数据存储到数据库中,构建一个稳固、高效的电影信息数据库。

  • 系统架构计划:

    • 前端计划: 使用Django框架构建用户界面,接纳HTML、CSS、JavaScript等前端技能实现用户友好的交互和可视化效果。
    • 后端计划: 利用Django的模型-视图-控制器(MVC)架构计划后端逻辑,处置惩罚用户请求、调用推荐算法和访问数据库。
    • 数据库计划: 计划数据库表结构,包括用户信息、电影信息、批评数据等表,保证数据存储的规范性和一致性。

  • 数据可视化与分析:

    • 可视化工具选择: 使用Python中的数据可视化库(如Matplotlib、Seaborn、Plotly)进行图表绘制,展示电影数据的统计信息、趋势和分布。
    • 用户交互计划: 在前端计划中,通过图表和用户界面实现用户对电影数据的机动查询和交互,提升用户体验。

  • 推荐算法计划:

    • 协同过滤算法: 基于用户的汗青行为和爱好,计划协同过滤算法,为用户推荐雷同爱好的电影。
    • 内容过滤算法: 思量电影的内容特征,计划内容过滤算法,提供与用户过去喜好相符的电影推荐。
    • 混合推荐策略: 结合差别推荐算法,接纳混合策略进步推荐系统的准确性和个性化程度。

  • 系统性能优化:

    • 缓存机制: 利用缓存技能进步系统性能,减少重复计算,加速数据访问。
    • 分布式处置惩罚: 如有必要,思量引入分布式计算和存储,处置惩罚大规模数据,进步系统的可扩展性。

  • 安全性与隐私保护:

    • 用户身份验证: 在系统中引入用户身份验证机制,保护用户数据安全。
    • 隐私保护: 对于敏感用户信息,接纳加密等手段保护用户隐私。

  • 系统测试与优化:

    • 单元测试: 对系统的各个组件进行单元测试,确保每个部分的功能正常。
    • 性能测试: 对系统进行性能测试,发现并解决潜在的性能瓶颈,确保系统在大数据量下依然高效稳固。

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

spider_douban.py脚本,从豆瓣电影网站爬取电影信息。
部分源码:

  • 导入模块:
    1. pythonimport requests
    2. from concurrent.futures import ThreadPoolExecutor
    复制代码
    使用requests库发送HTTP请求,以及ThreadPoolExecutor`来实现多线程执行。
  • 函数定义:
    1. pythondef fenlei(nums=0, itype=''):
    复制代码
    定义名为fenlei的函数,接受两个参数nums和itype,并给它们设置了默认值0和空字符串。
  • 非常处置惩罚:
    1. pythontry:
    2.     # ...
    3. except Exception as e:
    4.     print(e)
    复制代码
    将代码包装在一个try-except块中,以捕获任何大概发生的非常,并打印非常信息。
  • 设置请求头:
    1. pythonheaders = {
    2.     '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',
    3.     'Host': 'movie.douban.com',
    4.     'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'
    5. }
    复制代码
    定义了HTTP请求头,模仿了一个移动装备的用户代理。
  • 发送请求:
    1. pythonhtml = session.get('https://movie.douban.com/', headers=headers, verify=False)
    复制代码
    使用requests库发送GET请求,获取豆瓣电影网站的主页内容,并禁用了SSL证书验证(verify=False)。
  • 电影类型列表:
    1. pythontypes = ['剧情','喜剧','动作',...,'武侠','情色']
    复制代码
    定义电影类型。
  • 计算页数:
    1. pythonpage = nums
    2. pages = page // 20
    复制代码
    根据输入的nums计算必要爬取的页数,每页20个电影。
  • 多线程爬取:
    1. pythonwith ThreadPoolExecutor(1) as executor:
    2.     for typez in types:
    3.         for i in range(1, pages+1):
    4.             executor.submit(start, session, i, typez, nums)
    复制代码
    使用ThreadPoolExecutor创建一个线程池,遍历电影类型和页数,通过executor.submit提交使命,调用start函数进行爬取。
  • 非常处置惩罚输出:
    1. pythonexcept Exception as e:
    2.     print(e)
    复制代码
    如果在try块中发生非常,将非常信息打印出来。

基于用户之间的欧氏隔断来计算相似度,通过指定用户的相似用户的观影记载,然后根据相似用户的评分信息为指定用户推荐电影,为指定用户推荐未观看过且评分较高的电影。
部分算法源码:
  1. # 根据用户推荐信息给其他人
  2. def recommend(self,user):
  3.     try:
  4.         # 相似度最高的用户
  5.         top_sim_user = self.top10_simliar(user)[0][0]
  6.         print(top_sim_user)
  7.         # 相似度最高的用户的观影记录
  8.         items = self.data[top_sim_user]
  9.         recommendations = []
  10.         # 筛选出该用户未观看的信息并添加到列表中
  11.         for item in items.keys():
  12.             if item not in self.data[user].keys():
  13.                 recommendations.append((item, items[item]))
  14.         recommendations.sort(key=lambda val: val[1], reverse=True)  # 按照评分排序
  15.         # 返回评分最高的10部信息
  16.         if len(recommendations) == 1:
  17.             recommendations = []
  18.             lists = []
  19.             for key,value in self.data.items():
  20.                 for keys,values in value.items():
  21.                     lists.append((keys,values))
  22.             for i in range(4):
  23.                 recommendations.append(random.choice(lists))
  24.             recommendations = list(set(recommendations))
  25.         return recommendations[:10]
  26.     except:
  27.         return ''
复制代码

  • recommend 方法:

    • 参数

      • user: 要为其进行推荐的用户ID。

    • 功能

      • 调用 top10_similar 方法找到与指定用户最相似的前4个用户中的第一个用户(相似度最高的用户)。
      • 获取相似用户的观影记载(items),即该用户已经观看过的电影及其评分。
      • 筛选出指定用户未观看的电影,并将这些电影及其评分添加到 recommendations 列表中。
      • 对 recommendations 列表按照评分进行降序排序。
      • 如果推荐列表长度为1,说明相似用户与指定用户没有共同的观看汗青,此时通过随机选择其他用户的电影进行推荐。起首,将所有效户的观影记载放入 lists 列表中,然后随机选择4部电影添加到 recommendations 中,并去重。
      • 返回评分最高的前10部电影作为推荐。



基于情感辞书和程度辞书的情感分析,使用了LDA模型进行主题建模。
部分代码
  1. def sentiment_score_list(dataset):
  2.     # seg_sentence = dataset.split('。')
  3.     count1 = []
  4.     count2 = []
  5.     for sen in [dataset]: #循环遍历每一个评论
  6.         segtmp = jieba.lcut(sen, cut_all=False)#把句子进行分词,以列表的形式返回
  7.         stopwords = stopwordslist(root_path + os.sep + 'tex1' + os.sep + 'stopwords.txt')  # 这里加载停用词的路径
  8.         outstr = []
  9.         for word in segtmp:
  10.             if word not in stopwords:
  11.                 if word != '\t':
  12.                     if word != ' ' and word != '\n':
  13.                         outstr.append(word)
  14.         segtmp = outstr
  15.         print('分词:',segtmp)
  16.         neg_dict = corpora.Dictionary([segtmp])  # 建立词典
  17.         neg_corpus = [neg_dict.doc2bow(i) for i in [segtmp]]  # 建立语料库
  18.         neg_lda = models.LdaModel(neg_corpus, num_topics=3, id2word=neg_dict,passes=20)  # LDA模型训练,一种主题模型,它基于一组文档中的词频生成主题
  19.         for i in range(3):  # num_topics = 3
  20.             print('模型主题:')
  21.             print(neg_lda.print_topic(i))
  22.         i = 0 #记录扫描到的词的位置
  23.         a = 0 #记录情感词的位置
  24.         poscount = 0 #积极词的第一次分值
  25.         poscount2 = 0 #积极词反转后的分值
  26.         poscount3 = 0 #积极词的最后分值(包括叹号的分值)
  27.         negcount = 0
  28.         negcount2 = 0
  29.         negcount3 = 0
  30.         for word in segtmp:
  31.             if word in posdict:# 判断词语是否是情感词
  32.                 # print(word)
  33.                 poscount += 1
  34.                 c = 0
  35.                 for w in segtmp[a:i]:  # 扫描情感词前的程度词
  36.                     if w in mostdict:
  37.                         poscount *= 4.0
  38.                     elif w in verydict:
  39.                         poscount *= 3.0
  40.                     elif w in moredict:
  41.                         poscount *= 2.0
  42.                     elif w in ishdict:
  43.                         poscount *= 0.5
  44.                     elif w in deny_word:
  45.                         c += 1
  46.                 if judgeodd(c) == 'odd':  # 扫描情感词前的否定词数
  47.                     poscount *= -1.0
  48.                     poscount2 += poscount
  49.                     poscount = 0
  50.                     poscount3 = poscount + poscount2 + poscount3
  51.                     poscount2 = 0
  52.                 else:
  53.                     poscount3 = poscount + poscount2 + poscount3
  54.                     poscount = 0
  55.                 a = i + 1  # 情感词的位置变化
  56.             elif word in negdict: # 消极情感的分析,与上面一致
  57.                 negcount += 1
  58.                 d = 0
  59.                 for w in segtmp[a:i]:
  60.                     if w in mostdict:
  61.                         negcount *= 4.0
  62.                     elif w in verydict:
  63.                         negcount *= 3.0
  64.                     elif w in moredict:
  65.                         negcount *= 2.0
  66.                     elif w in ishdict:
  67.                         negcount *= 0.5
  68.                     elif w in degree_word:
  69.                         d += 1
  70.                 if judgeodd(d) == 'odd':
  71.                     negcount *= -1.0
  72.                     negcount2 += negcount
  73.                     negcount = 0
  74.                     negcount3 = negcount + negcount2 + negcount3
  75.                     negcount2 = 0
  76.                 else:
  77.                     negcount3 = negcount + negcount2 + negcount3
  78.                     negcount = 0
  79.                 a = i + 1
  80.             elif word == '!' or word == '!':  ##判断句子是否有感叹号
  81.                 for w2 in segtmp[::-1]:  # 扫描感叹号前的情感词,发现后权值+2,然后退出循环
  82.                     if w2 in posdict or negdict:
  83.                         poscount3 += 2
  84.                         negcount3 += 2
  85.                         break
  86.             i += 1 # 扫描词位置前移
  87.             # 以下是防止出现负数的情况
  88.             pos_count = 0
  89.             neg_count = 0
  90.             if poscount3 < 0 and negcount3 > 0:
  91.                 neg_count += negcount3 - poscount3
  92.                 pos_count = 0
  93.             elif negcount3 < 0 and poscount3 > 0:
  94.                 pos_count = poscount3 - negcount3
  95.                 neg_count = 0
  96.             elif poscount3 < 0 and negcount3 < 0:
  97.                 neg_count = -poscount3
  98.                 pos_count = -negcount3
  99.             else:
  100.                 pos_count = poscount3
  101.                 neg_count = negcount3
  102.             count1.append([pos_count, neg_count])
  103.         count2.append(count1)
  104.         count1 = []
  105.     return count2
复制代码
解析:

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

安装好对应所必要的库

启动项目,在终端窗口输入命令:
  1. python manage.py runserver
复制代码

端口8000

部分截图:

电影查看








电影推荐

电影热度排行(前20)

影评可视化




背景管理





七、源码文档等资料获取

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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

笑看天下无敌手

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表