协同过滤推荐的高校社团系统*

2022-12-16 09:23李柯谕何明昌高利新王陈培
计算机时代 2022年12期
关键词:社团协同用户

李柯谕,何明昌,吴 丹,高利新,王陈培

(温州大学数理学院,浙江 温州 325035)

0 引言

目前大学生社团规模激增,加大了社团管理的难度,为此,有部分高校开发了高校社团系统。高校社团系统的开发并不简单,设计语义分析、算法[1]以及系统软硬件环境的搭建。目前许多已有系统基本上是网页版,在移动设备上使用往往十分不便。

本文基于协同过滤算法,开发了移动版高校社团系统,来提升社团工作效率。

1 技术实现

1.1 开发语言

PHP 语言是目前最流行的编程语言,并且具有开源性、数据库连接的广泛性等优点,上手容易,在补丁漏洞升级过程中,核心部分植入简单易行,且速度快[2],与Java、Python 等语言进行对比之后,我们选择采用PHP进行后台开发。

1.2 技术结构

为实现高校社团组织工作交流、文件上传下载等功能,系统采用Okhttp 框架,同时为增加功能多样化,系统预留了功能扩增接口;考虑到安全性和便捷性,APP 采用Ubuntu GNU/Linux 操作系统,在登录时采用JWT Token 进行身份验证,并对重要的数据进行MD5 加密存储;考虑到高校社团数量及使用人员较多,采用CDN,以保障服务器流畅。

1.3 Android前端

Android 系统基于Linux 系统,其具有代码开源的特点,兼容性也比较好,是目前在移动应用使用最多的系统。通过Android系统,前端采用MVP三层架构体系,使Controller 和View 做到完全解耦,避免View具有过于复杂的业务逻辑,减少Activity或Fragment的代码数量,这样做可以通过创建接口的方式增加系统灵活性,降低开发和维护的成本[3]。

1.4 后台架构

LAMP 架构有着开源、大量的额外组件和扩展功能模块、代码简洁易于开发、方便易用和安全稳定等优点,LAMP框架的后端采用MySQL数据库服务,可以存储各种账号信息、产品信息、客户资料、业务数据等,其他程序可以通过SQL 语句进行查询、更改,同时还采用PHP 语言解释动态网页文件,提供Web 应用程序开发和运行环境[4],所以我们后台采用LAMP 架构,考虑到读写效率和线程安全,数据存储方面采用Redis非关系型数据库,这样就可以很好弥补存储数据读取数据慢的不足,另外我们系统还引入华为云开放云存储服务,以保证大量的上传和下载视频等文件。

1.5 数据库

在系统后台数据处理方面,主要涉及的数据表有用户个人信息表、社团信息表、用户与社团关系表。

⑴用户个人信息表主要记录用户姓名、ID、账号密码等字段,如表1所示。

表1 用户个人信息表(organization_user)

⑵ 社团信息表主要记录社团名称,类型等,如表2所示。

表2 社团信息表(organization_organization)

⑶用户与社团关系表主要记录用户是否加入社团、加入的社团id等,如表3所示。

在除上述的三个主要的数据表之外,系统还设计了用户好友表、社团联结表等相关表格。

2 系统功能设计

2.1 需求分析

从使用者角度考虑,系统将用户群体分为四类,普通用户,注册用户,社团管理员,系统管理员。普通用户可以注册,浏览公众信息,可以注册成为注册用户;注册用户可以登录,参加、浏览相关社团活动,加入、创建社团,与其他用户进行社交行为等;社团管理员可以发布、管理社团活动,审批和管理管理社员;系统管理员可以对申请的社团进行政治、法律审查,对所有注册的用户、社团进行管理与维护。

2.2 主要功能分析

系统平台主要分为社团、首页、个人(我的)三个模块。

⑴社团

主要这社团的一些信息。普通用户可以浏览相关信息,系统会根据用户的浏览记录,通过协同过滤算法推荐相关的社团,并指导其注册加入相关社团;

⑵首页

有加入社团的活动推荐、搜索框,搜索社团、活动及联系人等功能。用户找到自己心仪的社团的时候,可以点进该社团界面进行申请加入社团。加入社团后:会显示社团内的活动,有社团历史活动,正在进行的社团活动,以及未进行的社团活动,同时显示社团内成员及成员状态。用户加入某个社团后,可与参与该社团的相关活动、打卡、发表与社团相关的消息等。

⑶我的

主要是个人信息。可以查看个人及修改信息、社交列表、查看好友联系人基础信息及状态;加入社团的活动推荐,同时有搜索框,点进搜索框搜索相关社团、活动及联系人。另外有便捷系统设置及退出账号,具体展示如图1所示。

图1 APP界面功能

2.3 功能实现

⑴JSON数据交换格式

目前流行的数据交换格式有XML,JSON,YAML等格式,JSON 格式易于阅读和编写,同时也易于机器解析和生成,是一种轻量级的数据交换格式,与XML 或HTML 片段相比,JSON 提供了更好的简单性和灵活性,因此本系统采用JSON 格式进行前台与后台数据交换。

⑵注册及实名认证

在注册填写信息时,姓名、性别、学校学院、学号、班级、电话号码等是必填字段,邮箱、住址等是选填信息;在核对用户注册信息格式无误后,通过与已经注册的用户数据进行对比,若关键字无重复则可进行下一步验证,否则显示相关信息重复,注册失败。

token 认证是在请求中发送token 而不是发送cookie,这样能够防止CSRF(跨站请求伪造),就算是在APP 客户端使用cookie 存储token,cookie 也仅仅是一个存储机制而不是用于认证,这样就不会将信息存储在Session 中,减少了对session 的操作,token 是有时效的,一段时间之后用户需要重新验证[5]。基于token 这样的特点,系统在实名认证方面,采取基于token 的认证方式,即用户不小心退出时,短时间内再次登录不需要再次输入账号密码,这样保障了用户的便利性和体验感,同时提高了安全性和扩展性。

⑶基于协同过滤的用户推荐

用户注册时,可以绑定QQ 号或者微信号来进行获取数据,这样就可以减少一些信息录入,减轻用户的工作量,同时通过用户在QQ 号或微信号的一些标签推测出用户的喜好,利用用户选择的标签来推荐其喜欢的社团。

为了提高推荐的准确性,采取基于用户的协同过滤算法(User-CF)和基于物品的协同过滤算法(Item-CF)。User-CF 算法是基于假设“用户会喜欢与他兴趣相投的其他用户喜欢的项目”,从与用户(U)有较高相似度的用户集合(C)喜欢的社团与活动中,选取用户(U)未采取任何行动的社团与活动,推荐给用户(U)。

而Item-CF 算法基于假设“用户会喜欢与他过往喜欢的项目相似的项目”,从与用户(U)过往喜欢的社团与活动有较高相似度的社团与活动集合(W)中,选取用户(U)未采取任何行动的社团与活动,推荐给用户(U);两者的基础思想是相似的,这里只对如何实现基于物品的协同过滤算法(Item-CF)进行较为详细的解释。

创建社团与活动时采取的是标签,借用共同标签占总体标签的比例来计算相似度,这里采取Jaccard公式,公式为:

主要思想是去重的jaccard系数,算法如下。

①先定义A∩B函数:

② 对两组数据进行逐一比较,在相同时进行数量增加:

③返回相同的个数:

④再定义A∪B函数:

⑤对两组数据进行逐一比较,在取得不重复的时候进行数量增加:

⑥返回不重复的个数:

⑦计算|A∩B|/|A∪B|函数:

⑧判断数组是否为0,输入数组的值:

⑨最后返回值:

为降低热门活动和热门社团对于推荐的准确率的影响,在计算用户相似度时,系统采取加入惩罚因子的解决方案,将项目出现次数的对数取倒数作为惩罚因子,其中,N(i)表示项目i 出现的次数;i 表示用户u 和v 共同感兴趣的活动;分母则表示用户u 和用户v有所行动的社团和活动的集合长度,公式如下:

3 结束语

本文基于协同过滤算法开发了移动版高校社团系统。师生通过手机登录该系统进行各种日常、学习活动。可以随时随地办公,发布及参加相关活动,进行社团规划和活动策划。系统还为大学生参加各类社团提供了学习、交流、锻炼的机会,以满足学生个性化发展的需要。

猜你喜欢
社团协同用户
缤纷社团
蜀道难:车与路的协同进化
“四化”协同才有出路
最棒的健美操社团
关注用户
K-BOT拼插社团
三医联动 协同创新
关注用户
关注用户
如何获取一亿海外用户