赞
踩
博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏)
毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总
技术栈:
Python语言、Django框架、MySQL数据库、基于物品的协同过滤推荐算法、Selenium爬虫库、Echarts可视化
(1)系统首页
(2)算法推荐模块(协同过滤推荐算法)
(3)职位柱状图分析
(4)学历要求分析饼状图
(5)招聘信息数据列表
(6)数据采集页面
(7)注册登录界面
(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)
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。