最初产生这个项目的想法应该是在 2018 年 10 月份,当时正在学习 python 中,就萌生了这样一个想法:从一个用户这一年发布的微博数据中,提取最有意义的 top50 个关键词。很明显涉及到了数据采集和自然语言处理的一些知识。
前期准备:
需要到微博开发平台认证开发者;
在微博开发平台创建应用;
域名 1 个,服务器 1 台;
微博应用创建和审核
创建应用的目的就是你的网站可以接入微博,使用微博登录授权,调用微博开放的一些 api;质量高,用户多的应用还会被推荐到微博应用广场等等。
创建应用需要我们填写一些信息,应用名称,描述之类的。把准备好的文案直接粘贴进去就可以;需要不同规格的应用图标和三张以上应用介绍的宣传图。这个里面有一个关键点就是应用地址,需要提供一个可访问到的,并且包含微博组件的一个地址。这些东西提交完就可以提交审核了,微博应用审核的速度还算比较快的,一两天基本差不多会审核完。
等应用审核完,你就可以拿着 appkey 和 appsecret 继续往下开发了。
微博数据采集
因为微博开放的 api 接口里并不提供用户微博数据,所以才使用了数据采集的方案。第一个版本的工具是用 nodejs 写的,后来换成了 python 的版本。
提取关键词
这里还是使用 python 进行处理:
预处理(去掉微博里的表情、标签等);
分词(将整句分割为词汇);
加载词库(包括通用词库和用户自定义词库);
去停用词(去除一些无意义的词汇);
计算 TFIDF,按权重排序;
取前 50 个词生成词云图片。
串联项目
项目的基础架构使用 nodejs 搭建,整个应用的路由访问控制,视图渲染,异常处理,日志收集,进程管理,都是使用 nodejs 来完成。
大致流程:
用户访问应用;
引导用户到微博授权页;
授权成功后,后台拿到 uid,开启一个新的子进程进行微博词云图片的生成;
这个时候给用户返回一个 grant 页面(此时微博词云的进程可能还没结束);
用户点击到下一个页面,如果图片已经生成了,就展示该展示的数据,如果还没有,就给用户等待的处理。
对,基本流程差不多就这些,比较简单。下面看下最终的效果。
重要的知识点
在 nodejs 中调用 python 脚本,大致思路就是生成一个 shell 命令,然后 nodejs 开启一个子进程,在子进程中执行这个 shell 即可。
h5 页面,长按保存成图片,这里的大致思路如下:
我们将 html 转为 canvas,然后取出 canvas 数据放入一个 img 标签里。将这个 img 放到页面最顶层,并且将不透明度设为 0 就可以了。然后在微信、微博等 app 里面,长按就可以保存到手机了,具体实现代码请看下图。
总结
更多的是一些交互上的细化处理,让用户有更好的操作体验,和视觉上的冲击。这个应用视觉冲击倒是没有多少,哈哈。
最后,欢迎大家一起交流。
项目地址:http://yk.mcust.cn/wb