下午就要答辩了,想把项目经历再总结一下。
项目分三个阶段。
第一阶段,是信息搜集整理阶段
要想法设法从各个门户网站上抓取到新闻和对应的评论数据。首先要分析网站结构。
1. 从哪里找到网站每日发布的所有新闻呢?
每个门户网站都提供了一个滚动新闻播报的网站。
以新浪为例:http://roll.news.sina.com.cn/s/channel.php?ch=01
这里能及时而全面地得到网站发布的新闻,而且可以看出有的新闻经过简单的修改重新发布过。
让人开心的是,控制台查看浏览器后台找到了提供原始数据的 API,可以用JSON直接解析了。
2. 针对每个新闻进行处理
从新闻页面开始看:首先,要对页面HTML进行解析提取出新闻文本。并尝试得到更多的数据。
然后就是抓取对应评论了,我从评论界面后台找到了提供评论内容的API,弄明白参数后,修改参数尽可能多地抓取评论。对返回的json进行分析,数据还是很丰富的,包括评论有多少人参与,具体包括点赞还有发言,但是并没有数据指出评论的情感倾向,这导致以后难以对其进行感情倾向分析。
抓取阶段虽然看起来逻辑简单,不过具体操作上还是遇到了很多问题,比如怎样设计数据库,在没有指导和前车之鉴的情况下只能自己摸索,保证新闻和评论的正确关联,怎样面对更新过的新闻,设置数据之间的约束,选取什么字段作为 primarykey等等。又比如,在进行数据抓取时,遇到了不同编码带来的问题,要根据不同的网站选取合适的解码方式,同时对于新出现的emoji表情也要采取一定的措施。也要考虑怎样降低计算强度,提高抓取速度。尽量减少使用效率相对低下的三方库,直接用re解析HTML文本,宽度优先搜索高效率地展开多线程。
第二阶段,进行网站搭建,展示热门新闻。
怎样找出热门新闻并排序呢?
提出思路:根据新闻参与互动的人数来进行排序。后来证明达到了理想的效果,比如今年王宝强先生连读多日用多条新闻占据各大网站头条。
发现,为数不多的几条热门新闻占据了绝大多数读者的注意力。头条的力量很强大!
再将新闻评论展示出来,其实除了热门新闻,大多数新闻的评论数量寥寥无几。
第三阶段,进行情感分析
一开始我打算从简单的两个维度来判断评论的感情,即积极和消极。这就涉及到自然语言处理了。
对于新闻评论,有一些比较突出的特点,比如用词广泛,语法不严格,而且错别字出现比较多。
想要针对性地建立语言分析模型,就得有可以用来参考的模式。
如果要用机器学习的方法进行建模的话,得有一个经过标记的训练集。考虑到时间和人手,我们难以抽出经历对每条新闻进行标记。分词的工具Github已经有了,比如结巴分词。
在网上查过一些论文,阅读了一些机器学习方面书籍,想要把情感分析做好还是有一定难度的。
总之,这一点目前更多地停留在理论阶段。
我自己尝试过Github上的SnowNLP,一个中文自然语言处理三方库,它本身带有感情倾向分析,但是从结果上来看,并不能有效地分析出新闻评论的感情倾向。
总结:
学海无涯,处处留心皆学问,亲历之,更觉如此。
大问题需要团队合作,如果团队里各司其职,各尽其力,我想项目会好很多。
最后:
有的人划得一手好水。人各有志亦或是各有所长,不想再对团队里的其他成员做太多评论。