虎扑步行街舆情监控
对虎扑步行街某一天的用户发帖及评论进行分析,采用NLP的方法提取出每个帖子的关键词,生成词云
数据采集使用Scrapy框架,存储使用MongoDB,数据处理采用jieba和WordCloud
爬虫使用Scrapy框架编写,采用SpiderKeeper进行管理,设置一个定时任务每半小时抓取论坛首页的所有帖子的
- 标题
- url
- 楼主ID
- 回复数量
- 浏览量
- 发帖时间
- 主贴内容
- 亮评内容
为了方便数据分析,在每次抓取时都对数据的crawl_time字段进行更新,记录数据的抓取时间。
考虑到数据格式的复杂性,采用非关系型数据库MongoDB 数据样例如下
{
"_id" : "/24213454.html",
"title" : "认真脸:日韩医术那么发达,增高手术也是没问题的吧",
"url" : "/24213454.html",
"reply_num" : 98,
"browse_num" : 21963,
"author" : "可惜不是金牛座",
"publish_time" : "2018-11-03",
"crawl_time" : "2018-11-03 16:30,2018-11-03 17:00",
"bright_reply_num" : 8,
"post_content" : "帖子内容....",
"bright_reply_dict" : {
"bright_reply_num" : 8,
"bright_reply_1" : {
"username" : "CZ_Miles",
"uid" : "195790169801066",
"bright_num" : "262",
"reply_content" : "亮评内容..."
},
/*省略下面的7条亮评*/
}
- 将帖子的crawl_time字段作为查询条件,从数据库查询得到目标天的所有帖子。为了避免一些水贴影响分析效果,在查询条件中设置:
- 帖子的回复数需要大于0
- 帖子的被点亮的回复数需要大于0
- 帖子的浏览量需要大于0
- 对第一步查询到的结果,按照帖子的亮评数量对帖子排序(点亮数相同的再比较评论数量,评论数量相同的再比较浏览量),取排名前5%的帖子作为待分析的数据
-
考虑到帖子中可能有一些无意义的字符(如客户端自带的评论小尾巴),对每一个帖子用正则表达式去掉其中的无效内容
-
对每个帖子的文本内容(帖子正文和亮评)采用中文语言处理工具jieba分词中的关键词提取算法TF-IDF提取其关键词,为了使处理的效果更好,添加了停用词表和大概率成词表进行修正
-
关键词权重(在词云中的大小)取决于所属帖子的热度
关键词权重计算公式:
0.4995*帖子的点亮数+0.4995*帖子的被点亮的评论的平均点亮数+0.001*帖子的回复数
最后将给关键词-权重封装成字典类型
使用WordCloud将上一步骤得到的关键词-权重字典生成词云