基于深度学习+NLP豆瓣电影数据爬虫可视化推荐系统

36 阅读10分钟

 

项目编号:BS-BD-022

一,环境介绍

语言环境:Python3.8

数据库:Mysql: mysql5.7

WEB框架:Flask

开发工具:IDEA或PyCharm

二,项目简介

      本项目旨在基于深度学习LSTM(Long Short-Term Memory)模型,基于python编程语言,Vue框 架进行前后端分离,结合机器学习双推荐算法、scrapy爬虫技术、PaddleNLP情感分析以及可视化技 术,构建一个综合的电影数据爬虫可视化+NLP情感分析推荐系统。通过该系统,用户可以获取电影数 据、进行情感分析,并获得个性化的电影推荐,从而提升用户体验和满足用户需求。

      首先,项目将利用scrapy爬虫框架从多个电影网站上爬取丰富的电影数据,包括电影名称、类型、演员 信息、剧情简介等。这些数据将被存储并用于后续的分析和推荐。接着,使用PaddleNLP情感分析技术 对用户评论和评分数据进行情感倾向性分析,帮助用户更全面地了解电影的受欢迎程度和评价。 在推荐系统方面,项目将结合深度学习LSTM模型和机器学习双推荐算法,实现个性化的电影推荐。 LSTM模型将用于捕捉用户的浏览和评分行为序列,从而预测用户的兴趣和喜好;双推荐算法则综合考虑 用户的历史行为和电影内容特征,为用户提供更精准的推荐结果。 此外,项目还将注重可视化展示,通过图表、图形等形式展示电影数据的统计信息和情感分析结果,让 用户直观地了解电影市场趋势和用户情感倾向。同时,用户也可以通过可视化界面进行电影搜索、查看 详情、评论互动等操作,提升用户交互体验。

       综上所述,本项目将集成多种技术手段,构建一个功能强大的电影数据爬虫可视化+NLP情感分析推荐系 统,为用户提供全方位的电影信息服务和个性化推荐体验。通过深度学习、机器学习和数据挖掘等技术 的应用,该系统有望成为电影爱好者和观众们的理想选择,为电影产业的发展和推广起到积极的推动作

用。

深度学习长短时记忆网络( Long Short-Term Memory LSTM

     深度学习长短时记忆网络(Long Short-Term Memory,LSTM)是一种常用于处理时序数据和序列 建模的深度学习模型。它在解决传统循环神经网络(RNN)中存在的梯度消失和梯度爆炸等问题上具有 显著优势,能够更好地捕捉数据中的长期依赖关系和时间相关性。 LSTM网络由一系列特殊设计的单元组成,每个单元内部包含输入门、遗忘门、输出门等关键组件, 通过这些门的开关控制信息的流动,从而实现对数据的长期记忆和短期记忆。相比于传统的RNN, LSTM能够更有效地存储和提取长期记忆信息,同时能够更好地避免梯度消失和梯度爆炸的问题,使得其 在处理长序列数据时表现更加出色。

      在LSTM中,每个时间步的计算都涉及三个关键部分:遗忘门、输入门和输出门。遗忘门用于控制上 一个时间步的记忆是否保留到当前时间步,输入门用于控制当前时间步的输入是否被添加到记忆中,输 出门则用于控制当前时间步的记忆如何被输出。这种机制使得LSTM网络能够有效地处理时间序列中的长 期依赖关系,适用于语言建模、机器翻译、时间序列预测等多个领域。

除了基本的LSTM结构外,还衍生出了多种变体模型,如双向LSTM(Bidirectional LSTM)、多层

LSTM(Multilayer LSTM)等,以适应不同任务的需求。同时,LSTM也常与其他深度学习模型相结合, 如卷积神经网络(CNN)和注意力机制(Attention),共同完成更复杂的任务。 深度学习长短时记忆网络(LSTM)作为一种强大的序列建模工具,通过其独特的门控机制和记忆单 元结构,能够有效地处理时序数据,具有广泛的应用前景,对于解决时间序列数据分析、自然语言处理

和其他时序信息处理任务具有重要意义。

机器学习协同过滤算法( UserCF+ItemCF

      机器学习中的协同过滤算法是一种常用于推荐系统中的算法,旨在根据用户和物品之间的历史交互 行为,预测用户对未知物品的兴趣度。主要有两种类型:基于用户的协同过滤和基于物品的协同过滤。 基于用户的协同过滤算法通过计算用户之间的相似度,推荐给某个用户与其相似用户喜欢的物品。 而基于物品的协同过滤算法则是通过计算物品之间的相似度,向用户推荐与其已喜欢物品相似的其他物 品。这些算法通常依赖于用户-物品交互矩阵,利用用户对物品的评分或点击等信息进行计算。 协同过滤算法不需要事先对物品进行特征提取,能够发现用户和物品之间的隐藏关系,因此在个性 化推荐领域应用广泛。然而,协同过滤算法也存在数据稀疏、冷启动等问题,需要通过增加数据量、引 入正则化等手段来提高推荐效果。随着深度学习和神经网络的发展,协同过滤算法也逐渐与深度学习相 结合,提升了推荐系统的性能和准确度。

大数据scrapy爬虫

       Scrapy是一个基于Python的开源网络爬虫框架,用于快速、高效地抓取和提取网页数据。它提供了 一套强大的工具和机制,使得开发者能够轻松地编写和运行爬虫程序。 Scrapy的核心组件包括引擎(Engine)、调度器(Scheduler)、下载器(Downloader)、解析 器(Parser)和管道(Pipeline)。引擎负责控制整个爬虫的流程和协调各个组件之间的工作;调度器 负责管理待抓取的URL队列,并根据优先级和调度策略分配给下载器;下载器负责发送HTTP请求并接收 响应;解析器负责解析下载的网页内容,提取出感兴趣的数据;管道负责处理解析出的数据,如存储到 数据库或导出到文件等。

      Scrapy的特点包括:

  1. 高性能:Scrapy采用异步非阻塞的方式处理并发请求,通过多线程和多进程技术,实现高效的

爬取速度。

  1. 可扩展性:Scrapy提供了丰富的扩展接口和中间件机制,开发者可以方便地定制和扩展功能。

  2. 分布式支持:Scrapy可以通过分布式框架进行部署,实现分布式的并发爬取,提高效率。

  3. 数据提取方便:Scrapy提供了灵活、强大的数据提取工具,如XPath和CSS选择器,能够方便

地从网页中提取目标数据。

  1. 支持代理和登录:Scrapy支持设置代理IP和处理登录认证等功能,可以应对一些需要身份验证

或访问限制的网站。

  1. 丰富的生态系统:Scrapy有庞大的开源社区支持,提供了各种插件、扩展和文档资源,方便开

发者使用和学习。

NLP****情感分析

      自然语言处理(NLP)情感分析是一种利用计算机自动识别和理解文本中所包含情感倾向的技术。 该技术可以帮助分析文本内容中的情绪、态度和情感倾向,对用户评论、社交媒体内容、新闻文章等进 行情感分类,从而实现对大规模文本数据的情感挖掘和分析。 情感分析通常包括情感识别和情感分类两个方面。情感识别旨在识别文本中所包含的情感,如喜怒 哀乐等;情感分类则是将识别到的情感分为积极、消极或中性等类别。情感分析技术通常基于机器学习 和深度学习算法,通过构建情感词典、训练情感分类模型等方式来实现。 在情感分析中,常用的技术包括词袋模型(Bag of Words)、词嵌入(Word Embedding)、循环 神经网络(RNN)、长短期记忆网络(LSTM)、卷积神经网络(CNN)等。这些技术能够有效地捕捉 文本中的语义信息和上下文关联,从而实现对情感的准确识别和分类。情感分析技术在商业领域具有广泛应用,如舆情监控、产品评论分析、市场调研等方面。通过情感 分析,企业可以了解用户对其产品和服务的态度和情感倾向,及时发现和解决问题,改进产品设计和营 销策略。此外,在社交媒体舆情监控中,情感分析也能够帮助政府和组织了解公众情绪,及时回应和处 理热点事件,为决策提供参考依据。 NLP情感分析技术以其在舆情监控、用户评论分析等领域的应用前景,成为当今自然语言处理领域

中备受关注的研究和应用方向。

三,系统展示

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

​编辑

四,核心代码展示

# -*- codeing = utf-8 -*-
# 

# 3/10 16:12
# 
# @File: fileApi.py
# @Desc:
import os

from flask import Flask, send_from_directory
from aip import AipOcr

APP_ID = '23995255'
API_KEY = 'nbKNqoVPa3eOFwQ3A6EBRTGp'
SECRET_KEY = 'tuuVDpiYXh5v53IUMktD0QFFLUAQGj8V'

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

idCardSide = "back"

# 读取图片
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()

def idocr(filename):
    print("当前路径 -> %s" % os.getcwd())
    image = get_file_content(filename)
    result = client.idcard(image, idCardSide)
    print("姓名:", result['words_result']['姓名']['words'])
    print("性别:", result['words_result']['性别']['words'])
    print("民族:", result['words_result']['民族']['words'])
    print("出生:", result['words_result']['出生']['words'])
    print("公民身份号码:", result['words_result']['公民身份号码']['words'])
    print("住址:", result['words_result']['住址']['words'])
    return  result['words_result']['公民身份号码']['words'], result['words_result']['姓名']['words']