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

项目分三个阶段。

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

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

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. mvc 重定向的几种方式

    在RouteConfig添加一个简单的路由 //新增路由 routes.MapRoute( name: "Article", url: "Detial/{id}" ...

  2. .NET Core之Entity Framework Core 你如何创建 DbContext

    本文版权归博客园和作者吴双共同所有,欢迎转载,转载和爬虫请注明博客园蜗牛原文地址 http://www.cnblogs.com/tdws/p/5874212.html. 目前国内各大论坛,各位大牛的分 ...

  3. 如何实现一个php框架系列文章【2】实现类的自动加载

    根据前一篇文章的设计原则,我们暂时把php文件分为3类,类名和文件名都遵守如下约定.   类名 文件名 路径 模型类m {$app}Mod  {$app}.mod.php {$app}/model   ...

  4. Matlab 之 find()函数

    当我第一次用matlab语言编写一个工程项目时,发现自己编写的脚本里循环特别多,导致编程效率很低,这让我特别苦恼.有一次导师让我阅读他编写的一个Matlab脚本,并按照新要求对其进行更改.我发现脚本里 ...

  5. angularjs 弹出框 $modal

    angularjs 弹出框 $modal 标签: angularjs 2015-11-04 09:50 8664人阅读 评论(1) 收藏 举报  分类: Angularjs(3)  $modal只有一 ...

  6. HTML常用标签

    HTML常用标签: HTML文档格式: 首先,HTML是一种超文本标签语言,它是制作网页的基础. 其次,HTML文档中至少包含基本的和成对的<html> </html>.< ...

  7. Activity生命周期

    在开始之前我们先了解一下什么是Activity: 直接翻译为:"活动",而在Android中更多的是代表手机的屏幕,是Android的四大组件之一,重要的组成单元,提供了与用户交互 ...

  8. yii2 ActiveRecord多表关联以及多表关联搜索的实现

    作者:白狼 出处:http://www.manks.top/yii2_many_ar_relation_search.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明 ...

  9. eclipse调试(debug)的时候,出现Source not found,Edit Source Lookup Path,一闪而过

    问题描述 使用Eclipse调试代码的时候,打了断点,经常出现Source not found,网上找了半天,大部分提示点击Edit Source Lookup Path,添加被调试的工程,然而往往没 ...

  10. python列表模拟堆栈和队列

    对列特点:先进先出.后进后出 用列表insert.pop模拟进队出队: >>> l = [] >>> l.insert(0,'p1') >>> l ...