毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏)
毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总
感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。
技术栈:
Python、Django框架、MySQL数据库、基于物品的协同过滤推荐算法、
Selenium爬虫库
(8)配套文档
本系统以Python计算机设计语言为基础,使用 Selenium对猎聘网的招聘就业信息源进行抓取,针对网页信息编写抽取规则,对招聘就业信息进行必要的过滤和提取,使用MySql对招聘就业信息进行数据存储。然后使用 Python 开源web框架 Django进行系统搭建,结合协同过滤算法基于职位信息完成对用户的招聘职位信息推荐,完成整个爬取以及数据检索到成功进行职位推荐的网页端操作展示。
django协同过滤算法的招聘推荐系统是一种基于django框架开发的用于帮助企业快速找到合适人才的智能推荐系统。该系统利用协同过滤算法,通过分析用户的历史行为和偏好,为企业提供个性化的招聘推荐。
该系统主要包括以下几个模块:
用户管理模块:用户可以注册、登录和管理个人信息,包括教育背景、工作经验和技能等。
职位管理模块:企业可以发布招聘职位,并设置职位的详细要求和福利待遇等信息。
数据收集模块:系统通过收集用户的浏览记录、职位投递记录和面试结果等数据,建立用户-职位的关联关系。
推荐算法模块:系统利用协同过滤算法,根据用户的历史行为和偏好,计算出与用户兴趣相似的职位,并进行推荐。
推荐结果展示模块:系统将推荐的职位结果展示给用户,用户可以查看职位详情并进行投递或收藏。
反馈与评价模块:用户可以对推荐结果进行反馈和评价,系统通过用户反馈的数据不断优化推荐算法。
通过该系统,企业可以减少招聘时间和成本,同时提高招聘效率和人才匹配度。用户也能够更快速地找到符合自己兴趣和能力的职位,提升就业机会和职业发展。
#!/usr/bin/python3.9.10
# -*- coding: utf-8 -*-
# @Time : 2023/2/18 9:41
# @File : job_recommend.py
import os
os.environ["DJANGO_SETTINGS_MODULE"] = "JobRecommend.settings"
import django
django.setup()
from job import models
from math import sqrt, pow
import operator
from django.db.models import Subquery, Q, Count
import random
# 计算相似度
def similarity(job1_id, job2_id):
job1_set = models.SendList.objects.filter(job=job1_id)
# job1的投递用户数
job1_sum = job1_set.count()
# job2的打分用户数
job2_sum = models.SendList.objects.filter(job=job2_id).count()
# 两者的交集
common = models.SendList.objects.filter(user__in=Subquery(job1_set.values('user')), job=job2_id).values('user').count()
# 没有人投递当前职位
if job1_sum == 0 or job2_sum == 0:
return 0
similar_value = common / sqrt(job1_sum * job2_sum) # 余弦计算相似度
return similar_value
# 基于物品的协同过滤推荐算法
def recommend_by_item_id(user_id, k=9):
# 投递简历最多的前三keyword
jobs_id = models.SendList.objects.filter(user_id=user_id).values('job_id') # 先找出用户投过的简历
print(jobs_id)
key_word_list = [] # 找出用户投递的职位关键字
for job in jobs_id:
key_word_list.append(models.JobData.objects.get(job_id=job['job_id']).key_word)
print(key_word_list)
key_word_list_1 = list(set(key_word_list))
user_prefer = []
for key_word in key_word_list_1:
user_prefer.append([key_word, key_word_list.count(key_word)])
user_prefer = sorted(user_prefer, key=lambda x:x[1], reverse=True) # 排序
user_prefer = [x[0] for x in user_prefer[0:3]] # 找出最多的3个投递简历的key_word
print(user_prefer)
current_user = models.UserList.objects.get(user_id=user_id)
# 如果当前用户没有投递过简历,则看是否选择过意向职位,选过的话,就从意向中找,没选过就随机推荐
if current_user.sendlist_set.count() == 0:
if current_user.userexpect_set.count() != 0:
user_expect = list(models.UserExpect.objects.filter(user=user_id).values("key_word", "place"))[0]
# print(user_expect)
job_list = list(models.JobData.objects.filter(name__icontains=user_expect['key_word'], place__icontains=user_expect['place']).values()) # 从用户设置的意向中选
job_list = random.sample(job_list, 9) # 随机9个推荐
# print(job_list)
else:
job_list = list(models.JobData.objects.all().values()) # 从全部的职位中选
# job_list = random.sample(job_list, 9) # 随机9个推荐
# print('from here')
# print(job_list)
return job_list
# # most_tags = Tags.objects.annotate(tags_sum=Count('name')).order_by('-tags_sum').filter(movie__rate__user_id=user_id).order_by('-tags_sum')
# 选用户投递简历最多的职位的标签,再随机选择30个没有投递过的简历的职位,计算距离最近
un_send = list(models.JobData.objects.filter(~Q(sendlist__user=user_id), key_word__in=user_prefer).order_by('?').values())[:30] # 没有投过的简历
# un_send = random.sample(un_send, 30)
# print(un_send)
send = [] # 找出用户投递的职位关键字
for job in jobs_id:
send.append(models.JobData.objects.filter(job_id=job['job_id']).values()[0])
# print(send)
distances = []
names = []
# 在未投过的简历的职位中找到
for un_send_job in un_send:
for send_job in send:
if un_send_job not in names:
names.append(un_send_job)
distances.append((similarity(un_send_job['job_id'], send_job['job_id']) * send_job['job_id'], un_send_job)) # 加入相似的职位列表
distances.sort(key=lambda x: x[0], reverse=True)
# print('this is distances', distances[:15])
recommend_list = []
for mark, job in distances:
if len(recommend_list) >= k:
break
if job not in recommend_list:
recommend_list.append(job)
# print('this is recommend list', recommend_list)
# 如果得不到有效数量的推荐 按照未投递的简历中的职位进行填充
print('recommend list', recommend_list)
return recommend_list
if __name__ == '__main__':
# similarity(2003, 2008)
recommend_by_item_id(1)
由于篇幅限制,获取完整文章或源码、代做项目的,查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦
大家点赞、收藏、关注、评论啦 、查看获取联系方式