NCspider项目总结
下午就要答辩了,想把项目经历再总结一下。
项目分三个阶段。
第一阶段,是信息搜集整理阶段
要想法设法从各个门户网站上抓取到新闻和对应的评论数据。首先要分析网站结构。
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,一个中文自然语言处理三方库,它本身带有感情倾向分析,但是从结果上来看,并不能有效地分析出新闻评论的感情倾向。
总结:
学海无涯,处处留心皆学问,亲历之,更觉如此。
大问题需要团队合作,如果团队里各司其职,各尽其力,我想项目会好很多。
最后:
有的人划得一手好水。人各有志亦或是各有所长,不想再对团队里的其他成员做太多评论。
转载于:https://www.cnblogs.com/learn-to-rock/p/5952685.html
NCspider项目总结相关推荐
- 在k8s中使用gradle构建java web项目镜像Dockerfile
在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...
- Dockerfile springboot项目拿走即用,将yml配置文件从外部挂入容器
Dockerfile 将springboot项目jar包打成镜像,并将yml配置文件外挂. # 以一个镜像为基础,在其上进行定制.就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜 ...
- SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos
SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...
- Gradle 将项目publish到Nexus,Kotlin将项目发布到nexus,springboot项目发布到maven仓库
示例见:Gitte 公仓设置 在项目中添加maven-publish的插件 plugins {kotlin("jvm") version "1.3.72"kot ...
- springboot项目使用junit4进行单元测试,maven项目使用junit4进行单元测试
首先,maven项目中引入依赖 <dependency><groupId>junit</groupId><artifactId>junit</ar ...
- IDEA设置单个文件、单个包、单个项目的编码格式
IDEA设置单个文件.单个包.单个项目的编码格式 File-> Settings-> File Enclodings 选择编码格式,确定即可. 注意:此处的编码格式设定以后,该包已经存在的 ...
- spring boot项目 中止运行 最常用的几种方法
spring boot项目 中止运行 最常用的几种方法: 1. 调用接口,停止应用上下文 @RestController public class ShutdownController impleme ...
- 两步完成项目定时启动,java项目定时启动
两步完成项目定时设置: 在需要定时启动或运行的方法上面加上注解@Scheduled //当天只跑一次 @Scheduled(cron = "0 40 21 * * ?") 在启动类 ...
- Myeclipse中项目没有代码错误提示,jsp页面无编译迹象?如何解决
在使用Myeclipse开发项目时,发现jsp页面中嵌入的java代码没有编译的迹象,错误的get方法没有报错,没有报错信息我们如何知道我们开发的内容是正确的呢? 接下来就演示一下如何解决
最新文章
- IO设计模式:Reactor和Proactor对比
- 1.10 instanceof关键字
- Tomcat服务部署和优化
- 最简单的 SAP Cloud Application programming CDS 练习
- [Java基础]字符流中的编码解码问题
- pxe+kickstart 自动化部署linux操作系统
- camera (13)---智能手机双摄像头工作原理详解:RBG +RGB, RGB + Mono
- 26.Linux/Unix 系统编程手册(上) -- 监控子进程
- markdown引入代码_Markdown 插入代码
- FW: Why PUT and DELETE?铪铪
- Android网易云信无脑接入(IM+音视频)【网易云信】
- react native Animated 使用详解(基础)
- 2018 CCPC网络赛1004 HDU6441 Find Integer
- 浅析故障电弧探测器在电气防火中的作用与应用介绍
- onedrive手机客户端_OneDrive手机版
- 基于人体骨架检测的安全警戒线
- FpML to QuantLib 外滙歐式Barrier選擇權估值 fx-ex12-fx-barrier-option.xml
- 用css控制点击穿透
- 树莓派4B接4K60p显示器要点
- 基于jQuery经典扫雷游戏源码
热门文章
- Example: Communication between Activity and Service using Messaging
- Android SQLite Database的使用模板
- asp.net html table,在ASP.NET中利用HtmlTable动态创建表格 | 学步园
- java下载pdf6_疯狂java讲义第6版 电子版(pdf格式)
- postgresql 备份_在Kubernetes上使用PostgreSQL的正确姿势:第三部分
- http中的请求头各部分都是什么意思_小前端探索HTTP
- 一个中科院退学博士生的感想(zz)
- HDU 6155 Subsequence Count (DP、线性代数、线段树)
- Django restful framework之 rest接口设计规范
- day02.3-元组内置方法