下午就要答辩了,想把项目经历再总结一下。

项目分三个阶段。

第一阶段,是信息搜集整理阶段

要想法设法从各个门户网站上抓取到新闻和对应的评论数据。首先要分析网站结构。

1. 从哪里找到网站每日发布的所有新闻呢?

每个门户网站都提供了一个滚动新闻播报的网站。

以新浪为例:http://roll.news.sina.com.cn/s/channel.php?ch=01

这里能及时而全面地得到网站发布的新闻,而且可以看出有的新闻经过简单的修改重新发布过。

让人开心的是,控制台查看浏览器后台找到了提供原始数据的 API,可以用JSON直接解析了。

http://roll.news.sina.com.cn/interface/rollnews_ch_out_interface.php?col=89&spec=&type=&date=2015-10-31&ch=01&k=&offset_page=0&offset_num=0&num=1000

2. 针对每个新闻进行处理

从新闻页面开始看:首先,要对页面HTML进行解析提取出新闻文本。并尝试得到更多的数据。

然后就是抓取对应评论了,我从评论界面后台找到了提供评论内容的API,弄明白参数后,修改参数尽可能多地抓取评论。对返回的json进行分析,数据还是很丰富的,包括评论有多少人参与,具体包括点赞还有发言,但是并没有数据指出评论的情感倾向,这导致以后难以对其进行感情倾向分析。

抓取阶段虽然看起来逻辑简单,不过具体操作上还是遇到了很多问题,比如怎样设计数据库,在没有指导和前车之鉴的情况下只能自己摸索,保证新闻和评论的正确关联,怎样面对更新过的新闻,设置数据之间的约束,选取什么字段作为 primarykey等等。又比如,在进行数据抓取时,遇到了不同编码带来的问题,要根据不同的网站选取合适的解码方式,同时对于新出现的emoji表情也要采取一定的措施。也要考虑怎样降低计算强度,提高抓取速度。尽量减少使用效率相对低下的三方库,直接用re解析HTML文本,宽度优先搜索高效率地展开多线程。

第二阶段,进行网站搭建,展示热门新闻。

怎样找出热门新闻并排序呢?

提出思路:根据新闻参与互动的人数来进行排序。后来证明达到了理想的效果,比如今年王宝强先生连读多日用多条新闻占据各大网站头条。

发现,为数不多的几条热门新闻占据了绝大多数读者的注意力。头条的力量很强大!

再将新闻评论展示出来,其实除了热门新闻,大多数新闻的评论数量寥寥无几。

第三阶段,进行情感分析

一开始我打算从简单的两个维度来判断评论的感情,即积极和消极。这就涉及到自然语言处理了。

对于新闻评论,有一些比较突出的特点,比如用词广泛,语法不严格,而且错别字出现比较多。

想要针对性地建立语言分析模型,就得有可以用来参考的模式。

如果要用机器学习的方法进行建模的话,得有一个经过标记的训练集。考虑到时间和人手,我们难以抽出经历对每条新闻进行标记。分词的工具Github已经有了,比如结巴分词。

在网上查过一些论文,阅读了一些机器学习方面书籍,想要把情感分析做好还是有一定难度的。

总之,这一点目前更多地停留在理论阶段。

我自己尝试过Github上的SnowNLP,一个中文自然语言处理三方库,它本身带有感情倾向分析,但是从结果上来看,并不能有效地分析出新闻评论的感情倾向。

总结:

学海无涯,处处留心皆学问,亲历之,更觉如此。

大问题需要团队合作,如果团队里各司其职,各尽其力,我想项目会好很多。

最后:

有的人划得一手好水。人各有志亦或是各有所长,不想再对团队里的其他成员做太多评论。

NCspider项目总结的更多相关文章

  1. Fis3前端工程化之项目实战

    Fis3项目 项目目录结构: E:. │ .gitignore │ fis-conf.js │ index.html │ package.json │ README.md │ ├─material │ ...

  2. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  3. 最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目

    最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目 最近一个来自重庆的客户找到走起君,客户的业务是做移动互联网支付,是微信支付收单渠道合作伙伴,数据库里存储的是支付流水和交易流水 ...

  4. Hangfire项目实践分享

    Hangfire项目实践分享 目录 Hangfire项目实践分享 目录 什么是Hangfire Hangfire基础 基于队列的任务处理(Fire-and-forget jobs) 延迟任务执行(De ...

  5. Travis CI用来持续集成你的项目

    这里持续集成基于GitHub搭建的博客为项目 工具: zqz@ubuntu:~$ node --version v4.2.6 zqz@ubuntu:~$ git --version git versi ...

  6. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  7. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  8. Angular企业级开发(5)-项目框架搭建

    1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...

  9. 【分享】标准springMVC+mybatis项目maven搭建最精简教程

    文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...

随机推荐

  1. Entity Framework 教程——安装Entity Framework环境

    安装Entity Framework环境 Entity Framework 5.0 API分布在两个地方,一个可在NuGet包管理器中找到,一个存在于.NET framework中..NET fram ...

  2. JavaScript原型OOP——你上车了吗?

    .title-bar { width: 80%; height: 35px; padding-left: 35px; color: white; line-height: 35px; font-siz ...

  3. LINQ to SQL语句(14)之Null语义和DateTime

    Null语义 说明:下面第一个例子说明查询ReportsToEmployee为null的雇员.第二个例子使用Nullable<T>.HasValue查询雇员,其结果与第一个例子相同.在第三 ...

  4. C#开发微信门户及应用(19)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)

    我们知道,企业号主要是面向企业需求而生的,因此内部消息的交流显得非常重要,而且发送.回复消息数量应该很可观,对于大企业尤其如此,因此可以结合企业号实现内部消息的交流.企业号具有关注安全.消息无限制等特 ...

  5. 【Java每日一题】20161228

    package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1228 { public s ...

  6. java泛型基础

    泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 这种参数类型可以用在类.接口和方法的创建中, 分别称为泛型类.泛型接口.泛型方法.  Ja ...

  7. Connect to the DSP on C6A8168/DM8168/DM8148 using CCS

    转自ti-wiki  这份wiki,我曾经就收藏过,但是没有加以重视,以至于绕了一大圈的ccs开发环境的配置,现在正式收藏于自己的博客中...总结良多啊 Connecting to DSP on C6 ...

  8. DbMigration使用方法

    1.Enable-Migrations -ContextTypeNameLITCS.Data.gmisContext Enable-Migrations  命令创建了一个新的Migrations文件夹 ...

  9. 建造者模式组装mybatis参数Example()

    参考:github,   https://github.com/liuxiaochen0625/MyBatis-Spring-Boot-master.git 从controller组装tk.mybat ...

  10. 遍历map的四种方法

    方法一  在for-each循环中使用entries来遍历这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用.注意:for-each循环在Java 5中被引入所以该方法只能应用于j ...