福大软工1816 · 团队现场编程实战(抽奖系统

组员职责分工

林燊

  • 分工
    • 协调组内成员编码
    • 完成原始数据的格式化处理,分类别抽取出数据特征
    • 审查最终各成员代码
    • 协助优化各模块代码

董钧昊

  • 分工
    • 完成基于字典形式的数据库建立
    • 实现抽奖标准算法——开局选取基于名字中的英文字符个数以及极低的随机权重选取部分 “欧洲人”(运气较好的人),同时基于朴素贝叶斯分类器以及较低的发言权重再附加上极低的随机权重完成中奖者的选取
    • 完成数据处理端与后端接口以及前后端接口的实现
    • 完成博客的编写工作

卢恺翔

  • 分工
    • 完成普通过滤算法和深度过滤算法的实现,以及参与了数据预处理部分。
    • 普通过滤算法能够根据用户发言的时间进行判断,过滤掉只在抽奖当天发言或者已经有两周不发言的人;而深度过滤算法过滤掉只在抽奖当天发言或者在3天内不发言的人。
    • 将格式化化文件按照要求,转换成固定格式的txt文件。

杨喜源

  • 分工
    • 附加功能实现中的中奖海报生成——提供了抽奖次数、颁奖时间、中奖名单等一系列信息,实现了数据到海报的可视化。
    • 附加功能中的自动分享功能

朱志豪

  • 分工
    • 附加功能实现中的数据可视化,即为将同学之间提到对方的次数呈现为可视化的图,得到结论:聊天室的中心是柯老师。
    • 同时提供了条形图数据,将每个人被提次数呈现为条形图,结论:排名前三的是柯老师,助教雨勤学姐和佩佩
    • 抽奖文案的设计

陈柏涛

  • 分工
    • 前段界面实现
    • 协助前后端接口实现

蔡宇航

  • 分工
    • qqbot的学习(附加功能中实现爬取指定群聊指定时刻聊天记录)
    • qqbot爬取用户所有聊天记录并写入文件
    • 编写定时结束qqbot并退出账号的函数
    • 代码整合

刘宏岩

  • 分工
    • 编写启动qqbot登录指定账号的函数
    • 编写指定群聊聊天记录指定格式写入文件写入文件的函数
    • 接口封装

陈俞辛

  • 分工
    • 对爬取的聊天记录预处理,结果提供给抽奖算法
    • 测试程序功能以及算法是否公平公正
    • 收集成员材料,以供钧昊写博客
    • readme部分撰写

github的提交日志截图

程序运行截图

  • 我们通过设置抽奖名称奖品名称等多个抽奖关键字来完成抽奖的进行,同时隐式返回信息至后端,完成海报的智能生成
  • 再通过选择关键词以及过滤规则 (不过滤、浅度过滤、深度过滤) 来完成抽奖信息的匹配。
  • 最后实现抽奖返回中奖名单以及公示海报,如下图所示。

  • 在附加模块上,我们完成了获取指定群聊的所有聊天记录、公示海报的智能生成以及聊天记录的分析与挖掘,具体如下图所示。

程序运行环境

  • 算法、后端部分
    • python==3.6
    • matlab
  • 前端
    • Qt==5
  • 具体运行操作参见readme.md

GUI界面

(尚缺空截图)

基础功能实现

基础功能

  • 基于朴素贝叶斯分类器的抽奖,具体分为以下几个步骤:

附加功能实现

附加功能(需要安装qqbot库):

  • 在给定时间内获取指定群聊的所有聊天记录,具体如下:
    • 设定用于获取记录的qq帐号
    • 利用网页端qq(smart qq)实现指定账号扫码登录;
    • 基于qqbot库实时爬取当前账户的所有聊天记录;
    • 将爬取的聊天记录进行分类,并写入到如下两个文件:
      • input.txt:爬取并记录下用户登录后所有聊天记录
      • output.txt:爬取并以指定格式记录用户指定群聊指定时刻内的聊天记录
    • 超过用户给定时间后自动退出当前账户,保证账户安全;
    • 由于腾讯关闭获取qq号端口,无法获取qq号(属于个人隐私)
  • 效果展示:
  • 请求用户输入群名和倒计时长:

  • 弹出登录二维码:

  • 登录成功开始计时:

  • 提示计时完毕

  • 命令行中显示爬取结果:

  • input.txt内容:

  • output.txt内容:

  • 自动生成海报

获奖了怎么公布?发文字?太low了。一键自动生成获奖海报才能体现逼格。

本次利用python的PIL库,实现读取抽奖结果的txt文件,自动生成美观海报

例:#我要红包#结果如下:

  • 聊天记录的分析与挖掘

  • 1. 将同学之间提到对方的次数呈现为可视化图(如下所示)

实现方法:遍历数据,将同学名和他们所发的消息保存成词典,然后依次遍历消息,寻找提到别人的次数,记到列表中。

仔细观察图,发现2号和9号被提起的次数很多,查看前面记录的数据(号数加用户名

发现是柯老师和雨勤学姐(显而易见)

  • 2. 将每个同学被q的次数呈现为条形图

可以看到,被que最多的是2号(柯老师),9号(雨勤学姐)和21号(佩佩),和我们预想的一样

这个功能也有一些问题,比如有礼貌的我可能并不会提到老师的全名,这样的que是不被计入次数的,又或者各个同学有一些奇怪的爱称,这个也是我们不能识别的

鼓励有想法且有用的功能

遇到的困难及解决方法

  • 陈俞辛
    • 困难一:作业中给出的示例聊天记录编码格式和我的VS上默认的编码格式不一样,导致我在处理文件的时候一直乱码
    • 解决方法一:用了队友的 MAC 进行编程(MAC真好用)
    • 困难二:还是示例聊天记录的问题,现场编码的时候看到用户的每次发言都只有一行,于是就按这样的格式去处理文件了,然而频繁出错
    • 解决方法二:在队友的建议下,使用 Notepad++ 打开文件,发现有的发言居然不止一行...然后就只好调整处理文件的逻辑重新编码

马后炮

  • 陈俞辛
    • 如果我早点发现编码和格式的问题,那么就不用浪费那么多时间做无用功了

贡献度

贡献度
俞辛
柏涛
志豪
钧昊
恺翔
喜源
宇航
宏岩
posted @ 2018-11-18 22:49  sungam  阅读(177)  评论(0编辑  收藏  举报