跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

基于知识图谱的电影推荐问答系统 Python Django Neo4j

本项目是一个基于知识图谱的电影推荐问答系统,采用 Python Django 框架开发,结合 Neo4j 图形数据库与协同过滤算法。系统功能涵盖电影知识图谱管理、问答交互、列表展示、用户管理及后台数据管控。通过 Echarts 实现可视化,支持多终端访问,旨在解决传统电影信息获取低效问题,提供精准推荐与高效问答服务。

奇形怪状发布于 2026/4/5更新于 2026/10/2699 浏览
基于知识图谱的电影推荐问答系统 Python Django Neo4j

1、项目概述

技术栈

Python、Django 框架、Neo4j 图形数据库、Echarts 可视化、HTML、协同过滤推荐算法、MySQL 数据库

功能模块

  • 电影知识图谱管理
  • 电影问答交互
  • 电影列表展示
  • 个人信息查看
  • 电影详情展示
  • 用户注册登录
  • 后台电影数据管理

项目介绍

本基于知识图谱的电影推荐问答系统,针对传统电影信息获取与推荐方式的不足开发。前端采用 HTML5、DIV+CSS 布局,适配多终端访问;后端以 Python+Django 搭建,结合 MySQL 保障数据存储安全,核心依托 Neo4j 知识图谱与协同过滤算法,实现电影智能推荐与问答功能。系统涵盖注册登录、电影列表/详情展示、个人信息查看、问答交互、知识图谱管理及后台数据管控等功能,可精准推荐电影、高效解答用户问题,提升用户体验。

2、界面展示

(1)电影知识图谱

展示电影相关节点与关系的可视化图谱,支持通过 Cypher 语句查询数据并呈现对应节点信息,同时提供数据库信息查看、节点标签与关系类型管理等功能,还包含学习与代码操作的引导入口,辅助用户管理和分析电影知识图谱数据。

(2)电影问答系统

支持用户在输入框提交关于电影的问题并搜索,展示电影相关问题及对应回答内容,同时页面右侧设有电影推荐列表,辅助用户获取电影信息的同时提供观影推荐。

电影问答系统

(3)电影列表

以海报形式展示多部电影,同时呈现电影名称与对应国家信息,支持用户浏览不同电影内容,结合系统的知识图谱能力,可辅助后续的推荐与信息查询,为用户提供直观的电影选择入口。

电影列表

(4)个人信息

展示用户的 ID、账号、联系方式、是否管理员等个人信息内容,帮助用户查看自身在系统中的注册及身份相关数据,是系统中用户管理自身信息的展示入口。

个人信息

(5)电影详情页

展示电影的名称、上映日期、演员、导演等基础信息,还有评分、用户想看数及故事简介,同时呈现评论数量,帮助用户全面了解该电影的相关内容,是系统中展示单部电影信息的核心页面。

电影详情页

(6)注册登录

分为登录与注册两个板块,登录板块提供用户名、密码输入框及登录按钮,支持记住在线选项;注册板块包含用户名、邮箱、密码等输入项及注册按钮,是用户进入系统的身份验证与账号创建入口。

注册登录

(7)后台管理

展示电影信息列表,包含电影名称、类型、评分等内容,支持对电影信息进行添加、删除操作,同时左侧设有功能导航栏,可切换至不同管理模块,辅助管理员管控系统内的电影数据。

后台管理

3、核心代码

# -*- coding = utf-8 -*-
""" User-based Collaborative filtering. """
import collections
from operator import itemgetter
import math
from collections import defaultdict
from . import similarity
from . import utils
from .utils import LogTime

class UserBasedCF:
    """ User-based Collaborative filtering. Top-N recommendation. """
    def __init__(self, k_sim_user=20, n_rec_movie=10, use_iif_similarity=False, save_model=True):
        """ Init UserBasedCF with n_sim_user and n_rec_movie.
        @return: None
        """
        print("UserBasedCF start...\n")
        self.k_sim_user = k_sim_user
        self.n_rec_movie = n_rec_movie
        self.trainset = None
        self.save_model = save_model
        self.use_iif_similarity = use_iif_similarity

    def fit(self, trainset):
        """ Fit the trainset by calculate user similarity matrix.
        @param trainset: train dataset
        @return: None
        """
        model_manager = utils.ModelManager()
        try:
            self.user_sim_mat = model_manager.load_model('user_sim_mat-iif' if self.use_iif_similarity else 'user_sim_mat')
            self.movie_popular = model_manager.load_model('movie_popular')
            self.movie_count = model_manager.load_model('movie_count')
            self.trainset = model_manager.load_model('trainset')
            print('User origin similarity model has saved before.\nLoad model success...\n')
        except OSError:
            print('No model saved before.\nTrain a new model...')
            self.user_sim_mat, self.movie_popular, self.movie_count = \
                similarity.calculate_user_similarity(trainset=trainset, use_iif_similarity=self.use_iif_similarity)
            self.trainset = trainset
            print('Train a new model success.')
        if self.save_model:
            model_manager.save_model(self.user_sim_mat,'user_sim_mat-iif' if self.use_iif_similarity else 'user_sim_mat')
            model_manager.save_model(self.movie_popular,'movie_popular')
            model_manager.save_model(self.movie_count,'movie_count')
            print('The new model has saved success.\n')

    def recommend(self, user):
        """ Find K similar users and recommend N movies for the user.
        @param user: The user we recommend movies to.
        @return: the N best score movies
        """
        if not self.user_sim_mat or not self.n_rec_movie or \
           not self.trainset or not self.movie_popular or not self.movie_count:
            raise NotImplementedError('UserCF has not init or fit method has not called yet.')
        K = self.k_sim_user
        N = self.n_rec_movie
        predict_score = collections.defaultdict(int)
        if user not in self.trainset:
            print('The user (%s) not in trainset.' % user)
            return
        watched_movies = self.trainset[user]
        for similar_user, similarity_factor in sorted(self.user_sim_mat[user].items(), key=itemgetter(1), reverse=True)[0:K]:
            for movie, rating in self.trainset[similar_user].items():
                if movie in watched_movies:
                    continue
                # predict the user's "interest" for each movie
                # the predict_score is sum(similarity_factor * rating) 预测分数为加权(相似度*评分)求和
                predict_score[movie] += similarity_factor * rating
        # return the N best score movies
        return [movie for movie, _ in sorted(predict_score.items(), key=itemgetter(1), reverse=True)[0:N]]

    def test(self, testset):
        """ Test the recommendation system by recommending scores to all users in testset.
        @param testset: test dataset
        @return: """
        if not self.n_rec_movie or not self.trainset or not self.movie_popular or not self.movie_count:
            raise ValueError('UserCF has not init or fit method has not called yet.')
        self.testset = testset
        print('Test recommendation system start...')
        N = self.n_rec_movie
        hit = 0
        rec_count = 0
        test_count = 0
        all_rec_movies = set()
        popular_sum = 0
        test_time = LogTime(print_step=1000)
        for i, user in enumerate(self.trainset):
            test_movies = self.testset.get(user, {})
            rec_movies = self.recommend(user)
            for movie in rec_movies:
                if movie in test_movies:
                    hit += 1
                    all_rec_movies.add(movie)
                    popular_sum += math.log(1 + self.movie_popular[movie])
                rec_count += N
                test_count += len(test_movies)
            test_time.count_time()
        precision = hit / (1.0 * rec_count)
        recall = hit / (1.0 * test_count)
        coverage = len(all_rec_movies) / (1.0 * self.movie_count)
        popularity = popular_sum / (1.0 * rec_count)
        print('Test recommendation system success.')
        test_time.finish()
        print('precision=%.4f\trecall=%.4f\tcoverage=%.4f\tpopularity=%.4f\n' % (precision, recall, coverage, popularity))

    def predict(self, testset):
        """ Recommend movies to all users in testset.
        :param testset: test dataset
        :return: `dict` : recommend list for each user.
        """
        movies_recommend = defaultdict(list)
        print('Predict scores start...')
        predict_time = LogTime(print_step=500)
        for i, user in enumerate(testset):
            rec_movies = self.recommend(user)
            movies_recommend[user].append(rec_movies)
            predict_time.count_time()
        print('Predict scores success.')
        predict_time.finish()
        return movies_recommend

4、项目总结

本基于知识图谱的电影推荐问答系统,针对性解决了传统电影信息获取与推荐方式的低效问题。技术层面融合多类主流技术,后端依托 Python+Django 保障系统稳定,Neo4j 与 MySQL 双数据库协同实现数据高效存储与关联查询,协同过滤算法提升推荐精准度;功能层面覆盖用户从注册登录到信息查询、问答交互、观影推荐的全流程需求,同时为管理员提供便捷的后台数据管控能力。系统前端适配多终端,操作直观易用,通过知识图谱与推荐算法的结合,既实现了电影信息的高效查询与问答,又能为用户推送个性化内容,大幅提升了用户体验,圆满达成了项目预期目标。

目录

  1. 1、项目概述
  2. 技术栈
  3. 功能模块
  4. 项目介绍
  5. 2、界面展示
  6. (1)电影知识图谱
  7. (2)电影问答系统
  8. (3)电影列表
  9. (4)个人信息
  10. (5)电影详情页
  11. (6)注册登录
  12. (7)后台管理
  13. 3、核心代码
  14. -- coding = utf-8 --
  15. 4、项目总结

更多推荐文章

查看全部
  • 三年前端面试复盘:字节阿里美团高频题与手写源码解析
  • 按下 F5 后,浏览器前端究竟发生了什么?
  • Web 自动化测试实战:基于 Python+Selenium 的博客系统全流程解析
  • Midjourney 进阶:色相详解与色彩控制
  • 按下 F5 后浏览器前端发生了什么
  • AI动画剧本、脚本、分镜头生成提示词
  • Flux 镜像部署:中低显存畅玩高质量 AI 绘画
  • Java 集成百度地图 API 实现实时路况检索
  • MySQL 与 Navicat 入门:数据库连接、建库和常用命令
  • Cursor Composer Agent 详解:多 Agent 协作完成复杂项目
  • Python 新手学习路线规划与基础语法指南
  • C++ 关联式容器详解:map 与 set
  • C++ 继承中同名成员的隐藏与重载规则
  • Rust WebAssembly 与 Three.js 结合的高性能 3D 粒子系统实战
  • Rokid JSAR 基于 Web 技术栈的 AR 开发环境搭建与 3D 时钟实战
  • C++ STL 算法实战:序列操作、排序与数值处理
  • OpenClaw Gateway 通俗入门指南
  • Python 素数判断与查找算法详解
  • Qt C++ 无边框窗口开发:自定义标题栏、圆角及阴影实现
  • DeepSeek 各版本演进历程与优缺点深度解析

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online