当前位置: 首页 > news >正文

手机网站分类菜单二维码生成器加logo

手机网站分类菜单,二维码生成器加logo,网站建设代理加盟,asp.net网站本机访问慢目 录 1 绪论 1.1 论文研究背景与意义 1.2 论文研究内容 2 系统需求分析 2.1 系统需求概述 2.2 系统需求分析 2.2.1 系统功能要求 2.2.2 系统IPO图 2.2 系统非功能性需求分析 3系统概要设计 3.1 设计约束 3.1.1需求约束 3.1.2设计策略 3.1.3 技术实现 3.3 模块… 目  录 1  绪论 1.1 论文研究背景与意义 1.2 论文研究内容 2  系统需求分析 2.1 系统需求概述 2.2 系统需求分析 2.2.1 系统功能要求 2.2.2 系统IPO图 2.2 系统非功能性需求分析 3系统概要设计 3.1 设计约束 3.1.1需求约束 3.1.2设计策略 3.1.3 技术实现 3.3 模块结构 3.3.1 模块结构图 3.3.2 系统层次图 3.3.3 面向对象设计UML图 4 系统详细设计 4.1 系统模块设计 4.1.1 数据采集模块 4.1.2中文分词模块 4.1.3相似度匹配模块 4.1.4数据展示模块 4.2系统异常处理 4.2.1爬虫异常总体概况 4.2.2爬虫访问网页被拒绝 5 软件测试 5.1 白盒测试 5.1.1 爬虫系统测试结果 5.1.2 中文分词系统测试结果 5.1.3 中文文章相似度匹配系统测试结果 5.1.4 相似新闻趋势展示系统测试结果 5.2黑盒测试 5.2.1 爬虫系统测试结果 5.2.2 中文文章相似度匹配系统测试结果 5.2.3 相似新闻趋势展示系统测试结果 6  结  论 参考文献 致  谢 外文资料 中文翻译 1  绪论 论文研究背景与意义 时至2016年互联网大爆炸催生出了一系列新生的网络产物如微博、微信、网络新闻等这些产物逐渐演化成了互联网时代的新兴媒体以全新的方式承载了舆情与舆论。网络新闻是由于某一时刻发生的新闻首先被上传到互联网上然后经过广大网民的评论转发而广泛传播其中包含了很多的重要而且有价值的信息例如网民们的评价倾向人们对待某一事物的看法等等。时至今日互联网信息产业三足鼎立的局面显而易见主要网络媒体新闻来源新浪微博、微信公众号、网络媒体。 其中最开始显现这一势头的是新浪微博例如“郭美美事件”经由个人发博文然后通过一些网络推手或者微博大V使得相关信息传播如星星之火借助于微博的实时性很快会形成燎原之势。正是因为微博拥有这些特征很多正面或者负面新闻不能通过传统媒体报道却能通过微博途径大肆传播。随着新浪微博的发展与推广越来越多的人喜欢将自己的生活“曝光”在微博上例如心情状态、将来的计划、晒一晒生活、晒一晒人生等等无形中微博对舆论分析的潜在价值不断上升。微博拉近了人们与新闻、与热点的距离但是它也带来了不可忽视的负面影响。针对微博谣言恶性化、舆论暴力不断、侵权案件层见叠出等问题完全可以变废为宝提早掌握此类信息提早整改。然而近两年新浪微博对爬虫的预防愈来愈加严格以微博api为首的一批爬虫已经跌倒起因是新浪对相关微博SDK的api的封锁以及限制故在本文中暂且抛弃了新浪微博这一网络新闻诞生地。 再者就是微信公众号俗话说“十年河东十年河西”随着互联网传媒的进一步发展更具有效率与价值的“新媒体”不断推出在新浪微博如火如荼的情况下微信公众号平台悄悄地来临了其发展速度与推广力度甚至超过了新浪微博。微信的公众号与朋友圈功能深受广大媒体与网民们的欢迎所以说又有“新媒体”诞生了。横向对比微信公众号的效力如果其微信订阅人数超过一万那俨然就相当于一本杂志了如果其微信订阅人数超过十万那完全可以与地方性的报纸的影响力相媲美但是一旦其微信订阅用户数量达到了百万级其影响力绝对不会低于电视台令人震惊。如今微信订阅用户数量即粉丝数量达到百万级的公众号比比皆是由大粉丝量的公众号推送的文章影响力难以想象而且速度迅疾与传统媒体相比简直秒杀传统传媒行业。所以网络新闻的采集必然不可放过此领域然而现实很残酷微信公众号文章采集涉及跨平台跨应用以及相关权限token的获取相对来说非常繁琐且自动化效率不高故本文也放弃了此方式。 后者也就是网络媒体了各类门户网站借助自身的app可以迅速推送由各媒体记者收集到的一线新闻比较热的网络媒体平台有凤凰网新闻、新浪新闻、搜狐新闻、网易新闻等其专业程度要远胜于社交媒体如微博、微信等而且网络媒体信息的商用价值也要大于另外两家。 1.2 论文研究内容 若要实时监测网络新闻的发展与变化则必须使用相关工具人工的速度太慢这时候网络爬虫就应运而生了。爬虫需要定时爬取相关网络媒体页面获取页面源码并进行解析取出正文部分。这里面涉及到过滤算法或者是网页结构的解析算法同时还涉及到如何应对网站反爬虫策略主要分为以下几个部分 爬虫技术采用什么语言、什么框架来写爬虫现阶段有什么样的流行的java爬虫框架如何从松散、非结构化的网络新闻中得到结构化的、紧凑的网络新闻数据。 网页处理技术如何处理js、面对ajax加载的网站该使用什么样的策略以及如何从html语句中准确抽取出文章正文同时还要提防网站的反爬虫技术需要的时候爬虫请求头还可能需要带上cookie等等。 中文分词技术能够以相对较高的准确率将抽出出来的正文进行中午分词以便后续使用分词来确定文章的相似性。网络新词层出不穷所以分词是否能准确识别未知的新词很是重要。目前分词工具准备使用采用Lucene作为核心的IK分词、或者国产的Ansj中文分词等分词工具。 中文语料相似度匹配随着近几年的相关理论研究已经推出了一些半成熟的解决方案例如有计算余弦定理的方法、分析语义与词序的方法、计算编辑距离的方法。首先介绍下编辑距离语料相似度计算的算法具体是在给出任意两个汉字语句后计算将这两个语句中任意一个汉字语句变换成另一个汉字语句的变换过程中所需要的最少的编辑次数。最小编辑距离的算法是首先由俄国的科学家Levenshtein提出的故又叫做Levenshtein Dsitance。当然算法目前不能做到百分百相似匹配正确这个问题的解决算是世界上的一大难题了。 相似新闻趋势展示采用jfreechart或者百度的echarts将分析结果以曲线图方式展示出来。 2  系统需求分析 软件需求分析对软件系统提出了清楚、准确、全面而具体的要求是对软件使用者意图不断进行揭示与准确判断的过程它并不考虑系统的具体实现而是严密地、完整地描述了软件系统应该做些什么的一种过程。 2.1 系统需求概述 要求爬虫系统能完成对凤凰网新闻、网易新闻、新浪新闻、搜狐新闻等网站新闻数据的实时抓取并正确抽取出正文获取新闻的点击量实现每日定时抓取。能将抓取回来的新闻进行中文分词利用中文分词结果来计算新闻相似度将相似的新闻合并起来同时也合并点击率最后一点能将相似因为一段事件内的用户点击趋势以合适的形式展现出来。 基于网络爬虫技术的网络新闻分析由以下几个模块构成 网络爬虫模块。 中文分词模块。 中文相似度判定模块。 数据结构化存储模块。 数据可视化展示模块。 2.2 系统需求分析 2.2.1 系统功能要求 按照对系统需求调用的内容分析系统功能划分为了一下五个模块 数据采集模块 数据采集模块负责数据采集即热点网络新闻数据的定时采集以及数据的初步拆分处理。 1中文分词模块 中文分词模块能将数据采集模块采集到的热点网络新闻数据进行较为准确的中文分词。 2中文相似度判定模块 中文相似度判定模块通过将数据采集模块采集到的热点网络新闻数据结合中文分词模块的分词结果进行网络热点新闻的相似度分析并能够将相似新闻进行数据合并。 3数据结构化存储模块 数据结构化存储模块贯穿在其他模块之中在数据采集模块中负责存储采集拆分后的热点网络新闻数据在中文分词模块中负责从数据库读出需要分词处理的网络新闻数据在中文相似度判定模块中负责从将分析得到的相似新闻进行存储在数据可视化展示模块中负责将相似热点新闻数据从数据库读出其中涉及到大量关于数据库资源的处理。 4数据可视化展示模块 数据可视化展示模块负责将中文相似度判定模块判定为相似新闻的数据以可视化的形式展示出来展示形式可以自定义。 2.2.2 系统IPO图 整个系统的IPO图如图2-1。 图2-1 系统IPO图 爬虫输入新闻数据然后处理分析最后用可视化界面展示出来。 2.2 系统非功能性需求分析 本系统设计的非功能性需求涵盖了一下几个方面 性能需求 要求爬虫能并行爬取网络新闻并行分析数据库的并发处理能力要足够强。 可靠性需求 要求系统运行能保持稳定持久状态没有明显的BUG 易用性需求 要求爬虫系统能做到尽可能的自动化争取不需要人为操作。 维护性需求 要求系统出现BUG能比较容易的修复系统的后期拓展功能较强。 3  系统概要设计 系统概要设计的主要目的是能在此阶段将系统的主要功能逻辑设计和数据库系统的逻辑设计完全从需求分析中提取出来在提取的过程中不仅仅是奔着实现软件的功能而去还得考虑上下文环境例如系统最终的运行环境系统以后可能增加的需求等等相关约束在捋清楚系统约束之后在进行系统概要设计这样软件系统之后的二次开发也不会太难。 3.1 设计约束 3.1.1 需求约束 系统能稳定运行在最低为JDK1.7的平台上。 数据库向后兼容最低适配Mysql5.1。 要求程序有较好的跨平台性可以同时运行在Linux、windows、Unix系统上。 要求数据库连接方面设置的密码足够复杂数据库连接管理良好数据库系统能健壮运行。 禁止使用商业性软件在本系统中使用的算法或是类库必须是免费的。 系统对系统配置的要求要尽可能低。 程序具有良好的可移植性、兼容性、安全性。 3.1.2 设计策略 为了本系统能适应未来的需求与发展特制定如下策略 系统具有良好的接口扩展功能能非常容易地扩展新功能并将可能会经常调整的部分单独提取出来作为一个模块 系统代码具有非常良好的复用价值新功能的添加能基于现有功能进行派生 系统代码优化到位很少出现或者完全不会出现内存泄露的问题包括数据库连接池的泄露独享资源使用未关闭句柄的问题等 当优化问题与代码健壮性发生冲突时则以保证代码健壮性为首要目标可以适当调整优化。 3.1.3 技术实现 本系统设计与开发工具采用以下配置 开发语言java JDK版本1.7。 Java是一种具有非常棒的面向对象的设计思想的一门计算机语言语言。Java 技术具有很高的生产力原因是大量的程序员为其贡献了大量的代码目前Java程序广泛应用于Web、企业管理系统、云计算、大数据计算等方面同时Java目前在全球的编程语言的稳居第一。 开发环境Eclipse。 Eclipse 一开始是IBM旗下的一款开发工具知道后来被IBM贡献给了开源社区虽然开源但是其功能一点也不逊于专业收费类型的开发IDEEclipse有着强大的开源活力以及良好的扩展性很容易在论坛上下载到各种各样为Eclipse量身定制的插件所以开发本系统采用了Eclipse作为开发IDE。 3.3 模块结构 3.3.1 模块结构图 爬虫系统软件结构图 向爬虫系统输入网页URL爬虫打开网页解析处理抽出网页正文然后输出网页正文如图3-1所示。 图3-1 爬虫子系统结构图 将网页正文传入系统系统根据词库以及相关策略开始分词最后将分词结果以数据形式词组的形式输出出来如图3-2所示。 图3-2 分词子系统结构图 首先第一步输入数据网络爬虫系统采集到的数据作为相似度匹配系统的输入然后进入处理过程处理过程采用了改进了的余弦定理进行处理然后系统返回处理后的结果最终本系统将处理后的结果作为输出并传递给下一个子系统进行处理如图3-3所示。 图3-3 文章相似度匹配系统结构图 3.3.2 系统层次图 本系统设计为分别由三个子系统组成分别是网络爬虫系统即数据采集系统、新闻分析系统即中文语料相似度分析系统和最终结果展示系统如图3-4所示。 图3-4 系统层次图 3.3.3 面向对象设计UML图 1在这里首先介绍一下系统中使用的数据库连接池MF_DBCP自己写的一个数据库连接池UML类图如图3-5所示。 图3-5 系统类图 在DBCP连接池UML图中定义了数据库异常抛出类数据库配置的POJO类数据库连接池核心类 Pool 以及代理实现了Connection的close() 方法、setAutoCommit()等方法还有数据库连接池监视器类用来监视数据库的健康状况等等。 2爬虫核心是Web类凤凰网新闻、搜狐新闻、网易新闻分别集成了核心Web类然后各自实现各自的解析规则核心Web类负责一些基础操作例如打开网页获取网页源码还有一些正则表达式抽取分析算法其实Web类也包含了POJO类的作用也是作为爬虫爬取新闻后生成的结果的载体如图3-5所示。 图3-5 爬虫系统类图 4 系统详细设计 详细设计是在软件工程正式开始编码工作前的最后一个阶段。在系统详细设计阶段也就是本系统正式开始编码工作前在此简单介绍下在编码过程中所用到的一些工具包还有一些算法原理等等同时还有本系统模块比较细粒度的介绍与设计分析以及其他在软件详细设计阶段需要做的一些工作。 4.1 系统模块设计 系统结构逻辑上由四个部分组成第一个部分是数据采集模块负责原生网页文档数据采集与正文抽取第二个部分是采集数据固化模块将数据采集模块采集回来的原始网页文档进行入库固化第三个部分负责网页文档数据的处理与分析从数据库读取原始网页文档数据之后进行中文分词然后根据分词结果再进行相似度分析并将分析结果为同一相似新闻的结果进行存储第四层是数据展示模块负责将分析整理后的数据以图表的形式绘制出来。 4.1.1 数据采集模块 数据采集模块爬虫系统采集工具使用了HttpClient框架配合正则表达式解析抽取网页内容。HttpClient是Apache Jakarate Common下的一个子项目开源而且免费HttpClient起初的目的是为了做web测试用的后来其功能不断完善不断加强在功能上基本上可以以假乱真真的浏览器但它并不是一个浏览器仅仅是实现了浏览器的部分功能。HttpClient目前已经应用在很多的项目中比如Apache Jakarta上很有名的另外两个开源的项目Cactus和HTMLUnit都使用了HttpClient。HttpClient基于标准而且纯净的Java语言实现了Http1.0和Http2.0以可扩展的面向对象的机制实现了Http协议的全部方法(GET,POST,PUT,DELETE,HEAD,OPTIONS,TRACE)并且支持Https协议通过Http代理建立起透明的连接利用CONNECT方法通过Http代理隧道的Https连接支持NTLM2 Session,SNENPGO/KerberosBasic,Digest,NTLMv1,NTLMv2等认证方案而且自带插件式的自定义认证方案。HttpClient设计时候注重了可扩展性以及自定义性所以HttpClient能支持各种各样的不同的配置方案。同时在多线程的环境下HttpClient使用起来更加方便自如HttpClient中定义了网页连接管理器可以自动管理各种网页连接能发现处于非正常的连接并关闭起到了很好的防止内存泄漏的作用。HttpClient能自动处理Set-Cookie中的Cookie可以插件式的自定义Cookie策略Request的输出流可以有效地从Socket服务器中直接读取相关的内容。在Http1.0和Http1.1中利用Keep-Alive保持长久持久连接可以直接获取服务器发送的response code和headers。另外HttpClient可以设置连接超时实验性的支持Http1.1 response cahing。 使用HttpClient GetMethod来爬取一个URL对应的网页需要如下步骤 生成一个HttpClient对象并设置相应的参数。 生成一个GetMethod对象并设置相应的参数。 利用HttpClient生成的对象来执行GetMethod生成的Get方法。 处理返回的响应状态码。 如果响应正常则处理Http响应内容。 释放连接。 获取了响应内容后需要解析Html DOM对象这里选用了jsoup。Jsoup是一款Java的Html文档解析器可以直接解析某个URL地址但是这里选用了HttpClient代替了他去获取Html DOM对象因为jsoup自带的打开并解析URL的功能是一个比较基础的功能远不如HttpClient提供的丰富在这里本文采用别的工具来替代Jsoup来获取Html DOM对象比如上文介绍的HttpClient获取了网页文档数据之后可以把网页文档数据以字符串的形式传递给Jsoup来进行Html解析。在Html文档的解析方面Jsoup自带了很多非常非常方便的方法与API例如可以像jQuery那样来直接操作HTML网页元素此外还有其他提取HTML文档中需要的内容的方法读者可以自行阅读Jsoup的官方使用文档。最后一点也是很重要的一点使用Jsoup是完全免费的包括对其进行代码上的复制与克隆可以根据项目的不同需求来修改Jsoup的源码作为一个相当受欢迎的Html文档解析器Jsoup具有以下的优点 Jsoup能直接解析网页URL从中取出需要的内容也可以直接抽取Html文档字符串来进行解析工作; Jsoup是实现了CSS的选择器可以像jQuery那样直接操作元素 Jsoup 不仅能方便的处理Html文档正文内容还能处理Html文档元素的相关元素如获取Html标签的属性等功能 除此之后有一个很重要的特性目前很多网站采用了不同的后台环境有Java、PHP、Python、Node.js等作为开发工具Web开发框架更是五花八门所以很可能会出现一些纰漏如网页标签缺乏闭合的部分熟悉Html的人都知道Html语言是一种容错性极高的语言即使标签未能适时的闭合浏览器也是能正常显示网页的但是对于这些通过网站Html文档来获取网页信息的人来说这个特点是非常致命的会对最终的解析结果产生很大的负面影响。然而使用Jsoup完全可以避免这个问题Jsoup设计的时候已经想到了这些问题其对Html标签的闭合等特性也是具有容错性的例如下面几种状态 1.Html文档出现了没有关闭的html标签比如p陈晋豪的论文p论文写起来挺难p内容有了就好了/p pAB123/p 2.Html文档数据中的隐式标签比如它可以自动将 td表格/td包装成tabletrtd 3.能创建非常可靠的Html文档结构比如html标签包含head 和 body在head只出现恰当的元素 爬虫系统的爬取对象分别选择了凤凰网新闻、网易新闻、搜狐新闻因为这些新闻都开放了点击数量查询且这三大媒体无论是影响上还是覆盖面上都是非常巨大非常广泛的非常适合作为爬取对象爬取过程中也没有复杂的Ajax需要处理而且这些新闻的访问数据都是每天更新的。 爬虫程序需要以循环定时运行在响应的服务器上每天定时爬取以上网站的新闻内容并存入数据库数据库采用了Mysql因为Mysql比较轻量级有免费的学术研究的版本而且比较适合当前场景。Mysql数据库引擎采用了MyIASM按理来说MyIASM是比较古老的引擎但是MyIASM存储引擎在曲度方面的性能要好于INNODB虽然不支持事务但是爬虫存储暂时不涉及事务的使用再加上MyIASM优秀的插入查询速度使得爬虫数据的存取非常快捷、迅速所以这里选择了MyIASM作为Mysql的存储引擎。 数据采集系统的爬虫在爬取网站是采用多线程并发爬取的所以多线程的爬虫对数据库的并发操作会有很多很多在进行数据库操作的时候第一步是建立数据库连接在多线程的环境下这些操作会进行得非常频繁但是这些操作又非常的耗费网络、内存空间等这些操作会对系统资源、系统运行效率有很大的负面影响所以必须采用数据库连接池。网上有很多开源而且优秀的数据库连接池比如Apache开源的dbcp平时tomcat使用DateSource配置连接池的时候就是使用了tomcat内置的dbcp连接池此外还有c3p0数据库连接池也是非常优秀的连接池SSH三大框架之一的Hibernate就采用了c3p0作为其内置连接池其优秀性能可见一斑不过这些连接池相对来说都比较重量级所以自己在这里写了一个相对比较轻量级的连接池MF_DBCP下面会介绍下自定义连接池相关内容。 关系型数据库的连接池有几个基本原则 1. 池化数据库连接的目的就是实现对资源的重复使用使用数据库连接池可以很方便的复用数据库连接在复用资源的过程中还能辅之以相关的管理策略使得整个连接池具有自发性、智能性、低耗能、高效率等特征便于应对高并发等极其耗费计算机资源的操作。 2. 数据库连接池的设计过程中最重要的是能精确把握关系型数据库的事务原子性的原则保证事务在任何时候都不会被其他数据库操作干扰也就是事务会单独占用一个数据库连接反之在没有开始事务或者相关数据库操作不涉及事务的情况下多个数据库请求可以共用一条数据库连接数据库在处理同一个数据库连接具有的多个请求方面采用的是队列模式各个请求之间不会产生干扰同时处理速度也能保证高效。 3. 策略维护连接池以确保连接池的健壮性建立适当的策略创建一个数据库连接池监视器用来监视数据库的情况这里可以总结成一句话在任何时候连接池既要能扛得住来自业务调用方面的压力也要时刻能保证对数据库系统的负载最小在业务层与数据库系统之间建立了一个优化处理的环节。 ConfigurationException 用来抛出用户配置的异常DataSourceException 用来抛出连接池运行中的异常详见代码。内部类 Config 类似 JavaBean 类保存从配置文件读取到的最原始的数据。Configuraiton 继承 Config 并且提供了构造连接池的方法这里补充说明下应该将 Configuration 特有的功能抽象出一个功能接口这样 Configuration 扩充功能的时候会更加明晰。Pool 类是连接池核心对外提供 getInstance() 方法单例模式获取唯一连接池concs 为单个连接池容器队列(下面会介绍)busy 字段指出当前连接池正处于忙碌状态的连接(负载大于0)free 字段指出当前连接池正处于空闲状态的连接(负载等于0)sum 字段指出当前连接池的大小(busyfree)。ConnectionContainer 类当其中的连接未开启事务的状态下多个数据库请求是可以共享同一个连接的load 字段作为负载指标记录了连接当前被使用的次数。DataSource 对外提供 getInstance() 方法获取唯一的面向用户使用的数据库连接池单例模式。PoolSnapshot 类创建一个当前连接池在使用中的连接的一个快照以判断连接池是否需要收缩这是数据库的监视器策略中的一部分。MonitorControler接口可扩充监视器的功能被 ConnectionStatusMonitor 与 ConnectionNumMonitor 两个监视类实现。 监视器初始化后开启两个线程 1号线程根据配置文件中的 status_checktime 字段来周期性运行实现扫描连接池中的坏链接并修复 2号线程根据配置文件中的 num_checktime 字段来周期行创建连接池使用状态的快照当足够三个状态时根据三点画出的曲线来确定数据库连接池中到底需要保存多少连接并保证连接数不小于最小连接数。 以下用 表示当前快照连接数大于前一快照–表示当前快照连接数小于前一快照 监视器不做任何动作因为连接数在稳步增加 -- 监视器末尾保留最后两个连接快照的平均连接数剩下的多余连接回收 — 监视器保留三个快照平均连接数作为当前连接剩下的多余连接回收 自定义数据库连接池的相关API如下 addNew() 方法为连接池增加新的连接 addLast() 方法为未开启事务从而可以共享的连接提供”负载均衡”的策略(当一个连接被使用一次则将他放入队列末尾试想这样可以循环队列) deleteFirst() 方法循环调用可以清空连接池队列 delete() 方法提供了从连接池中移除某个连接的方法 getFirst() 方法提供了获取负载最轻即队首的连接 getLoad() 方法提供了获取指定连接负载大小的方法 getConnectionContainer() 方法提供了获取某个连接所在的连接容器从而操作连接池中的连接池容器队列 remove() 方法提供了从连接池中移除某个开启了事务的连接deleteLater() 方法提供了获取数据库中可以清除(负载等于0)的连接 getMinLoadConnection() 方法提供了获取连接池中负载最低的连接以便创造专用的事务连接 getConnectionContainers() 方法为外界提供了获取数据库连接池队列的方法 isFullFree() 方法判断当前连接池是否完全处于空闲状态(关闭连接池判断) size() 方法提供获取连接池除去事务连接剩余连接的数量 createConnection() 方法为连接池提供创造新连接的方法 destoryConnection() 方法指定关闭某个连接 repairPool() 方法提供了修复连接池中坏连接的方法并用新的可用的连接替换 releasePool() 方法提供了连接池收缩大小的方法确保保留的连接数是最合适的 revokeConnection() 方法提供了回收连接将其重新加入连接池队列的方法 getConnection() 当用户需要连接时调用 getPoolStatus() 返回当前连接池的使用情况 close() 关闭数据库连接池 4.1.2 中文分词模块 首先简单地介绍下中文分词的概念中文分词也就是经过相关的算法把原来的汉语句子或者更长的汉语语料正确分割成为一个一个的汉语词语的过程。 说到中文分词先来介绍下英文的分词计算机由欧美人发明所以他们很早就进行了有关英文分词的研究本文从简到繁进行介绍英文分词很简单人们平时阅读到的英文文章英文单词与单词之间都有一个空格利用这个特点程序可以非常迅速的将英文文章进行英文分词。这时候回过头来看看汉语发现问题来了除了语句中的标点符号基本上所有的汉语都是连续的并没有非常明显的分割的特征。这时候原来用于英文分词的那一套工具在汉语语料的分词方面完全没有一点作用了当然也不能要求在汉语写作中学习英文的方式在词语与词语之间用空格作为间隔所以需要专门研究下汉语的分词策略。 这时候再回到英文分词的思路上从小到大可没少学过英语短语是不是发现了什么英文短语与短语之间的分词也不能单纯的用空格作为判断了。但是英文单词之间的组合以及规律要明显比汉语强很多很多但是汉语拥有世界上最大的使用群体研究汉语中文分词技术还是非常非常有必要的。到底怎么进行汉语中文分词呢所以首先得研究研究汉语的语法。 在这里声明下汉语中文分词目前并不涉及到汉语古文的分词具体的原因是因为古文的分词难度泰国巨大基本上无规律可言。 经过这些年大量计算机爱好者和学术工作者的研究探索逐渐推出了一些半成熟的中文分词的算法中文分词的路上举步维艰还需要各位加油研究。在这里本文先介绍下几种比较常见中文分词的算法 1字符匹配的中文分词方法 字符匹配的中文分词方法时基于语料词典的分词算法分词结果的准确性很是依赖是否有一个好的分词词典算法的具体内容是首先将分词词典以某种数据结构的形式载入内存一般都是Hash散列存储的方式因为这个方式有极快的查找速度然后根据分词词典中的词语去匹配要分词的中文语料字符串经过一些比较细腻的匹配规则最终能够成功将该汉语语料字符串拆分成不重复的若干汉语词语即匹配完成。 再拆分要分词的汉语语料时候应该结合多种多样的拆分方法因为不同的拆分方法可能会带来完全不同的分词结果。面对一个随机的符合规范的汉语语料如果它具有足够的长度足够清晰而且不存在理解歧义的情况下从不同的拆分方法出发最终得到的分词结果一定是一致的。 利用计算机分词的话必定存在着很多奇奇怪怪的分词结果完全可以采用统计学的方法来提高最终的分词结果集的正确命中率。具体的做法是定制多个拆分汉语语料的算法然后分别计算其最终的分词结果然后统计最终的结果集哪一部分分词结果在最终分词的结果集中出现的次数最多则就取该分词作为最终的分词结果。 本文最终采用的分词方法即为本分词方法的改进版本结合了IK分词和Lucene的一些特性。字符匹配的中文分词算法对一个合适的分词词典依赖非常大那么如何得到这个分词词典呢最笨的办法就是人工审阅新闻资料或者下载汉语字典提取其中的词语作为分词词典其次分词词典还需要进行不断进化。层出不穷的网络新词对分词结果造成了巨大的挑战这里就不讨论程序自学习以及词典的自动扩展算法了。常用的中文分词算法有下面几种 2语义分析理解的中文分词方法 这种中文语料的分词方法时首先要分析得出汉语的语义、语法、句法等得出这些规律目标是能利用这些规律来让计算机能理解汉语语句的意义但是这种方法看似完美但是有很遥远。首先想要彻底能总结出这些规律本身就是非常复杂的因为汉语整个语法体系的复杂性还有就是汉语的灵活组合性不同的组合就是不同的意思例如“我还欠了他的钱”这句话如果把“还”念作“hai”整个句子的意思是“我现在还欠着他的钱”但如果把“还”念作“huai”那整个句子的意思就变成“我还钱了把欠他的钱都还给他了”这种情况识别就一定会出现问题。再者就是如果得出了这些规律也要把这些规律以编程的方式实现出来这个过程也是非常困难的。语义分析理解的中文分词方法是跟人工智能的发展息息相关的如果能实现基于语义分析的中文语料的分词那么人工智能也能获得长足的发展。 因为本算法的研制工程周期长且困难目前在国际上都还处于概念阶段。就算实现了对汉语的语义语法理解世界上还有其他语言英语、俄语、法语、阿拉伯语等等语言发展历程必然艰难。本文在此提及此方法仅作为一种思路目前没有实现的思路。 3统计的中文分词方法 如果从汉语词语的角度出发去研究词语的规律很快就可以得到一个结论那就是相互组成一个词语的两个汉字顺序出现在一起的频率会很高。可以利用这个特点来判定任意相邻的汉字是否组成了一个词但是很明显存在一个问题到底多高的频率才能证明这几个字组成了一个词从数学的角度来看这不是单一系数就能解决的问题也绝对不是单一的函数关系因为变量太多了可能不同的汉字本身达到可以判定它跟某个汉字组合成词的阈值是不同的比如一些生僻的字本文在这块献丑举个例子“好”这个字它可以组成“好人”“美好”“刚好”“恰好”“好运”“好奇”“合好”“友好”“问好”“讨好”……等等词语在百度上搜到的结果有7500条之多举另外一个字“驭”用“驭”组词有“驾驭”“驭风”……等词语仅仅只有120条左右明显“好”跟“驭”两个字不能用一样的判定标准它们出现的频率差异太大是不能共用一套判定方案来判断它们是否组字成词的。 其次还有一个问题有一些特殊的汉字他们也会对整个中文分词结果产生不可忽视的干扰作用例如“了”“的”“着”这些词语各自可以组字成词例如“了解”“目的”“着手”等等但是他们在整个中文语料中更多的形式是类似于这样的形式“走了”“累了”“掉了”“好的”“你的”“他的”“走着”“跑着”“着了”等等形式这样的形式明显不是词语这些字经常作为结束语出现可能对整个基于词频的汉语分词算法产生巨大的干扰作用而在中文语料中列举出来的这几个词还仅仅是冰山一角。所以这种方法仅仅单靠词频是完全不够的。 不过到目前人工智能越来越热发展也变得迅速起来不得不说这种方法是具有一定的前瞻性的如果事先能给出大量的汉语语料的训练集再辅以人工纠错与修正操作是这种统计的中文分词算法越来越准确相信这种方法在不久的未来会替代其他的分词算法。在处理自然语言上去理解语义、语法这才是正道。通过建立相关的语法模型不断地进行统计分词的训练后期算法一定会有非常不错的分词成果不过本文研究仅仅是借用中文分词的工具也不会在这方面进行太过深入的讨论。顺便提下作为训练集的语料完全可以采用类似本文的爬虫系统从网络上每天搜集到最新的新闻情报进行训练人工纠错因为没有比新闻更有实效性的汉语语料训练集了这样“网络新词”也能得到及时的补充与学习后期需要人工参与纠正的次数会越来越少分词结果也会越来越准确。 本文使用了IK Analyzer作为汉语分词的工具。IK Analyzer是一个完全免费开源的中文分词的工具基于Java开发的非常优秀、快速的中文分词的工具包。国内还有一个较为著名的中文分词工具Ansj号称能很好的识别人名与地名而且处理速度方面完全超越IK分词不过由于IK分词基于Lucene最近自己又在研究Lucene的原因况且对IK的分词结果也还算满意。 本系统使用的IK Analyzer的版本为2012u6作者林良益是一名自身的Java程序开发工程师。在IK Analyzer中能看到很多Lucene的影子比如IK分词的核心就是基于Lucene的其中大量的导包也能看出来源于Apache Lucene。现在有空也在研究IK分词的算法以及原理希望能给许久未更新的IK分词加入自己的贡献IK分词系统结构图如图4-1所示。 图4-1 IK分词的设计结构图 4.1.3 相似度匹配模块 利用中文分词工具将爬虫系统采集回来的数据进行中文分词之后则需要分析文章的相似度之后再将相似的文章的数据整合到一起为之后可视化展示同一条新闻的变化趋势打下基础其中计算文章相似度的算法有很多主要来说是有两种一种是余弦定理另一种是计算杰卡德距离的方法。 1.余弦定理相似度计算法 余弦定理是怎么能应用到计算文章的相似度呢先想想余弦定理的概念如果能将两篇文章转换为数学中的两条向量那么可以用过余弦定理来计算这两条向量之间的夹角。具体应该怎么能将文章转换为数学中的向量呢这里就用到了中文分词然后可以将带分析的汉语语料进行中文分词并保存各自的分词结果集AB。分词结束后再另外设置一个集合S令S A ∪ B那么分别计算AB两个集合中的词语在原始预料中的词频然后建立A、B到S的映射如果S中有而A或者B中没有那么记该词语的词频为0那么就能得到两条维度相同的向量这样就可以用余弦定理来计算相似度了。 第一步进行中文语料的分词。 句子A我/喜欢/看/电视不/喜欢/看/电影。 句子B我/不/喜欢/看/电视也/不/喜欢/看/电影。 第二步列出所有汉语词语的集合。 我喜欢看电视电影不也。 第三步计算集合中每个词语的词频。 句子A我 1喜欢 2看 2电视 1电影 1不 1也 0。 句子B我 1喜欢 2看 2电视 1电影 1不 2也 1。 第四步写出每句话的词频向量。 句子A[1, 2, 2, 1, 1, 1, 0]。 句子B[1, 2, 2, 1, 1, 2, 1]。 有了词频向量中文文章的相似度计算问题就简化了变成了如何去计算这两个词频向量的离合程度。首先可以把这两条词频向量想象成存在于空间中的两条任意线段这两条线段必然能组成类似于下图的夹角再计算夹角的余弦值。 在这里讨论下最简单的维度也就是二维空间下图的a和b是两个字母分别代表两个不同的向量需要计算它们夹角的余弦值COSθ如图4-2所示。 两个汉语词组的词频向量的余弦值可以作为这两篇汉语语料整体相似度的度量因为从数学上来讲当两向量的余弦值越接近或完全等于0则表明两个向量的夹角是两条方向完全垂直的在中文语法的角度来解释向量垂直就是两篇语料的分词结果是完全没有一样的这样有很大的可信度表明这两篇文章内容是完全不相干的反过来如果俩向量的夹角的余弦接近或完全等于1则表明这两条向量几乎可以看做成同一条向量从中文语法的角度来解释也就是两篇中文语料的分词结果基本上是一致的有很大的可信度表明这两篇文章的内容是完全类似的。 由此就得到了“找出相似文章”的一种算法 1使用中文分词算法首先需要找出这两篇带分析文章的重要关键词。 2从每篇文章分别取出所有的关键词将其合并成为一个集合然后来计算这两篇文章相对于关键词集合的词频这样就生成了这两篇文章两条待分析的词频向量。 3最后计算这两个词频向量的余弦值余弦值越接近于1则文章越相似。 “余弦相似度”是一种非常有用的算法凡事想要知道任意两个向量的相似程度都可以使用余弦定理。 4.1.4 数据展示模块 经过相似度匹配算法匹配为相似文章的算法则存储到同一条数据记录之中存入数据库然后将相似数据读取出来将数据以可视化的形式展示出来步骤如下 1将POJO对象转换为JSON JSON(JavaScript Object Notation) 是一种非常轻量级的类似而又超越可扩展标记语言的数据交换的格式。JSON是基于ECMAScript的一个子集。 JSON采用了完全独立于任何编程语言的书写格式但也使用了非常类似C语言家族的一些语法习惯包括C、C、C#、Java、JavaScript、Perl、Python等。 JSON一经推出直到现在在数据交换载体的选择上完全有替代XML的趋势。最近在公司写的一个金融项目是为财新网写的债券实时行情的金融项目项目中后台数据传送到前台用的是ServletServlet中是将从Service层中得到的数据对象一般都是List、Map、或者其他的POJO对象经过fastjson转换成为JSON字符串最终输出在Servlet上。然后前台js用ajax异步加载的方式调用Servlet可以很容易的将获取到的JSON字符串转化为相关的对象。 此外有大量的测试表明同样字节数同样大小的JSON可以装载的数据信息量要比XML多出很多这样就表明JSON的压缩性更好自身的负载效率高所以如今越来越多的网站数据交互、以及企业级的信息交互、经典的C-S模式都逐渐改用了JSON作为数据传递的载体。 从JavaScript语言层来看JSON俨然就是JavaScript中的数组类型与对象类型之间的组合体有点类似与C语言中结构体strut的语法定义模式很明显strut能通过对不同数据结构的组合再添加各种各样的数据嵌套可以表示世界上任意一种信息格式JSON非常类似于这种结构体正因为JSON作为一种高效的数据载体来说可谓是“无所不能”近些年有关JSON的发展飞速而且迅猛。下面分别简单介绍下JavaScript中的对象与数组 对象 JSON对象在js中表示为用“{}”括起来的内容其数据结构为 {keyvalue,keyvalue,...}的键值对的结构在绝大多数的面向对象的编程语言中key即键是对象属性的名字而value即值则是对象的属性值。在C语言、Java、Python等语言中通过Object.key来取得value的具体的值。 数组 数组在js中是中用括号“[]”符号包含起来的内容js数组的数据结构如 [“this”,“a”,“test”,...]使用数组的索引可以来获取数据相应位置的数值数值的数据类型包括各种各样的数据类型对象、字符串、数字、数组等等。实验证明经过对象、数组2种数据结构是可以组合成各种各样任意复杂度的数据结构。 现如今可以把POJO对象转换为JSON的工具有很多比如谷歌的Gson工具包比如阿里贡献的开源JSON转换工具fastjson本文使用了阿里巴巴的fastjson。Fastjson提供了包括JSON数据的“序列化”和“反序列化”两部分的JSON相关的功能其优势有号称对JSON数据的解析与反解析速度最快测试表明fastjson具有极快的性能超越任其他的Java Json parser包括自称最快的JackJson。FastJson功能强大完全支持Date、Enum、Java Bean、Set、Map、等常见的数据模式与类型并且原生能在所有Java能运行的地方运行。Java对象转换为JSON格式一般有以下几种情况 Java普通单节点对象转换为JSON的原理 通过对象的get()方法来获取对象的属性的值即JSON数据的值然后通过get()方法的函数名得出具体是get的哪个成员变量于是这样就能得出了JSON数据的键然后经过复合JSON语法的拼接与组合就成功将对象转换为了JSON。但如果对象没有提供响应的get()方法呢那么就需要通过Java的反射机制来拿出要转换成JSON的对象的字段然后判定哪些字段是必须的同时抛弃掉“垃圾数据”的字段最终将字段组合成JSON。组合成JSON的时候其字段名称作为String类型的key存在其属性值作为相对应数据类型的key存在如图4-6所示。 图4-6 对象转换为JSON原理图 Java普通单节点数组转换为JSON的原理 Java普通单节点数组转换为JSON可以由单节点转换JSON拓展而来如图4-7所示。 图4-7 对象数组转换为JSON原理 Java复合对象转换为JSON的原理 Java符合对象转换为JSON其实就是Java普通单节点对象转换为JSON的原理的拓展获取了字段名字之后获取字段对应的属性的时候需要判定该属性具体的数据类型如果该属性的具体数据类型是基本数据类型中的一种就必须使用该数据类型对应的JSON表示方法表示出来例如有没有引号之分就是区别字符串变量与其他变量之间的区别的如图4-8所示。 图4-8 复合对象转换为JSON原理 2将Json数据以可视化的形式展示出来 显示相似新闻数据使用了开放的图表绘制类库JfreeChartJfreeChart工具使用纯Java语言编写而来完全是为applications, applets, servlets 以及JSP等的使用而设计。JFreeChart可以生成例如散点图scatter plots、柱状图bar charts、饼图pie charts、甘特图Gantt charts、时序图time series等等多种图表此外还可以生成PNG和JPEG格式进行输出也可以和PDF和EXCEL等工具关联。 到目前为止在Java中JFreeChart是非常不错的统计图形解决方案JFreeChart基本上能够满足目前的Java在统计绘图方面的各种需求。 JFreeChart的优秀特性包括以下几点: 一致的和清晰明确的API,而且支持多种图表类型。 设计非常灵活,对各种应用程序来说非常容易扩展。 支持多种多样的输出类型,包括Swing组件、图像文件(PNG、JPEG)、矢量图形文件(PDF、EPS、SVG)。 JFreeChart是完全“开源”的,或者更具体地说, 自由软件。它是遵循GNU协议的。 JfreeChart优点如下 稳定、轻量级且功能非常强大。 免费开源但是开发手册和示例要花钱购买。 其API学习起来非常简单整个工具容易上手。 生成的图表运行非常地顺畅。 4.2 系统异常处理 系统在运行过程中因为复杂的运行环境可能会产生种种异常问题。 4.2.1 爬虫异常总体概况 爬虫异常总体概况就是能让爬虫的维护人员能及时了解爬虫的整体运行状态例如当前爬虫是否处于阻塞状态阻塞的原因是什么目前已经爬取了多少内容还有多少内容有待爬取当前爬虫正在爬取哪个页面爬虫在进行数据存储的过程中有哪些异常通过上面的数据可以得到下列结论  爬虫程序的健壮性。观察爬虫爬取的网页文档数据通过分析就能够得出爬虫在网页文档数据的时候出现的各种异常问题便于爬虫系统代码的优化。 爬虫程序的爬取效率。通过log系统记录爬虫爬取网页时打印的Log经过一些统计整合可以得出爬虫的数据采集能力究竟有多强如果采集速度太慢可以进行一些多线程方面的优化处理同时也要检查是否是代码某处出的BUG。 爬虫对客体网站的影响。如果发现爬虫运行一段时间后无法再从某个网站中采集到网页文档数据这时候就算考虑下是否是爬虫爬取网页文档数据过于频繁而被网站管理员封锁。 4.2.2 爬虫访问网页被拒绝 爬虫大量爬取网站时会对网站资源占用严重所以很多网站加入了反爬虫机制大量爬取网站数据时会出现Access Denied一类的错误网页服务器直接拒绝了访问这时候爬虫就得需要能伪装的像一个真正的浏览器一样有如下方法 1伪装User-Agent User-Agent标明了浏览器的类型以便Web网站服务器能识别不同类型的浏览器。为什么要识别不同类型的浏览器呢现在主流的优秀浏览器有windows10的Edge浏览器、微软的IE系列浏览器、谷歌的Chrome浏览器、Mozilla的FireFox浏览器还有来自挪威的Opera浏览器这些浏览器五花八门分别出自各自的厂家所以面对同样的html元素他们的解析效果有可能是非常不同的甚至会出现无法解析一些Html元素的情况正式因为如此所以Web网站服务器要判断不同的浏览器以便提供不同支持方案例如CSS中针对不同的浏览器可能需要不同的标注。 所以现在绝大部分的爬虫为了能够及时获取网站的数据通常会设置一个某种浏览器的User-Agent以此来“欺骗”网站告诉Web网站服务器自己是某一种浏览器然后网站Web服务器才会返回真实的网页数据一般比较常见几个浏览器的User-Agent如下 Chrome的User-AgentMozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36 火狐的User-AgentMozilla/5.0 (Windows NT 6.3; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0 IE的User-AgentMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; rv:11.0) like Gecko   HttpClient设置User Agent的方法如下 HttpGet getMethod new HttpGet(URL); getMethod.setHeader(User-Agent, user agent内容); 2需要登录后才能访问网页数据 虽然绝大部分网站不登陆就能访问各个页面的内容随着各个研究机构对互联网数据的需求越来越多的情况下各种各样的爬虫随之诞生但是一部分爬虫会无节制的爬取网站大大地消耗了网站的带宽导致正常的用户都无法访问网站所以现在的绝大部分网站都相应推出了一些防护“恶意爬虫”的策略例如网站一旦检测到某个IP的访问量有异常就会要求这个IP访问的时候必须登录后才能访问。不过这样也有解决方法可以直接在该IP所在主机上用浏览器登录登录成功之后如果浏览器是Chrome或者firefox那么可以直接查看浏览器的cookie用HttpClient设置cookie即可访问即可。不过还有一些检测机制特别严格的网站登录网站的时候必须填写随机验证码这类网站的爬取难度可就大了需要能识别网站随机扭曲的验证码这些问题在本文不做讨论。 3使用代理IP访问 如果网站服务器维护人员用某段时间内某IP的访问次数来判定爬虫然后将这些爬虫的IP都封掉的话以上伪装就失效了。为了解决爬虫的IP被相关网站封停仔细一想如果爬虫能模拟出一批用户来访问该网站不就能解决这个问题吗具体应该如何模拟呢首先需要模拟出一个一个分散而又独立的用户这就需要随机而又分散到全国各地的IP代理爬虫运行的时候从这些IP代理中随机选取一部分IP作为代理使用这样就能比较完美地解决单IP高频率高流量访问网站的问题了。 拥有了这些IP代理之后应该如何去管理这些代理IP呢这里可以做一个类似于数据库连接池的东西当然这里存放的不是数据库连接而是一个一个的代理IP然后指定相关的代理IP分配策略。代理IP池做好之后要做一个负载均衡每次轮流使用代理IP池中可以正常使用的IP做循环访问这样单一IP对网页服务器会迅速下降非常明显。 5 软件测试 软件测试是软件系统开发的一系列流程与活动中的最后一个部分也是最重要的一个部分是一种为了能保证软件的逻辑上的严密性、严谨性、高可用性的解决方案。通过对软件的逻辑分支的校验来确定软件是否能达到需求分析中的要求并且在最大程度上能保证软件不会带来其他的BUG。只有通过了软件测试整个软件工程的最终产物才能交付给用户使用。 5.1 白盒测试 白盒测试是一种基于软件逻辑结构设计的测试在整个测试过程中测试的参与者是完全熟知整个系统的逻辑分支的。白盒测试的盒子是指被测试的软件系统白盒指的是程序结构与逻辑代码是已知的非常清楚盒子内部的逻辑结构以及运行逻辑的。“白盒”法全面了解程序内部逻辑结构、对所有逻辑路径都进行相关测试。“白盒测试”会争取能够测试完软件系统中所有的可能的逻辑路径。使用白盒测试的方式时一定要先画出软件所有的逻辑顺序结构与设计然后再分别设计出合适而又全面的测试用例最终完成白盒测试。 5.1.1 爬虫系统测试结果 因为爬虫系统逻辑设计相对来说是比较简单的不涉及到基本路径法因为整个正序只需要定时运行就行不像其他软件系统那样有较深的用户需求根基需要相关人员配合使用。本次开发的爬虫系统是全自动的所以百合测试结果与黑盒测试结果一致。 下图为爬虫系统的百合测试结果截图测试方法即定时运行爬虫即可下图中的条目为爬虫此次执行所爬取到结果中的一部分爬取结果如图5-1所示。 图5-1 爬虫爬取结果 5.1.2 中文分词系统测试结果 中文分词系统测试也比较简单没有复杂的业务逻辑结果基本呈线程顺序且执行路径唯一下图为中文分词系统的白盒测试结果首先是测试的语料的截图如图5-2所示。 图5-2 中文分词原文 最终的分词结果如下目前想要提高分词结果非常困难需要加大词库的准确性白盒测试结果如图5-3所示 图5-3 中文分词结果 5.1.3 中文文章相似度匹配系统测试结果 中文文章相似度计算方法采用了余弦定理计算两篇文章所对应的汉语词语的词频向量的夹角的余弦值在经过大量的试验后发现其准确率还是非常非常高的测试结果如图5-4所示。 图5-4 余弦定理相似度匹配 可以看出“国家专项计划引苏鄂家长担忧教育部回应”这篇新闻与“向中西部调剂生源致高考减招数万湖北江苏连夜回应”两条新闻均是有关高考的完美匹配到了一起其次不排除有些极端的情况导致匹配结果不正确这个也会继续研究提高准确率。 5.1.4 相似新闻趋势展示系统测试结果 相似新闻的展示采用了JfreeChart作为白盒测试的测试对象测试结果如下图所示精确显示了每一条新闻的关注度走势如图5-5所示。 图5-5  JfreeChart测试图 5.2 黑盒测试 黑盒测试与白盒测试恰好相反从名字就能看出一黑一白白盒测试者熟悉盒子中的内容而黑盒测试者是完全不知道盒子中的内容的。黑盒测试主要是面向程序的功能实现而进行的测试例如检验程序是否具有某一功能而完全不必关心程序的逻辑设计。也就是说整个黑盒测试关注的是软件系统的功能完整性而不考虑程序逻辑上的BUG等问题。 5.2.1 爬虫系统测试结果 上面已经提到本爬虫系统逻辑较为简单白盒测试结果与黑盒测试结果一致结果如图5-6所示。 图5-6 爬虫系统黑盒测试 5.2.2 中文文章相似度匹配系统测试结果 总体来说黑盒测试的结果也是比较令人满意的同样瑕疵还是有的这也是编程的挑战与乐趣所在之处黑盒测试结果如图5-7所示。 图5-7 中文匹配黑盒测试 5.2.3 相似新闻趋势展示系统测试结果 黑盒测试相似新闻趋势展示系统测试了Echarts的效果以便能跟白盒测试JfreeChart区别开来测试结果如图5-8所示。 图5-8 黑盒测试新闻排行 点击上面的相关新闻会出现单个新闻的趋势发展图如图5-9所示。 图5-9 echarts黑盒测试 6  结  论 终于完成了历时三个月我终于完成了《基于网络爬虫的网络新闻分析》论文与程序的设计。整个历程中我真是感触颇深不过成就感是最大的我可以高兴地对全世界说“我做到了”虽然在系统的实现过程中还有在论文的写作过程中困难重重不过最终都被我一一解决克服了。 首先来谈一谈收获吧之前有很多与本系统和论文相关的内容仅仅是略知一二自己真正要使用这些知识的时候才发现自己了解的太片面了知识面也太窄了从对网络爬虫一无所知对HttpClient中文分词等相关技术很不了解的状态到现在能非常熟练的使用HttpClient来编写具有我想要的功能的爬虫而且对现在的中文分词理论有了很多自己的看法同时也能非常熟练的调用IK分词来进行中文分词。不过这么一段时间的充电与学习我也发现认识到了基于网络新闻分析的网络新闻挖掘所蕴含的巨大的潜力非常具有商业价值。 在这回论文的写作与探究中我接触到了舆情分析这一门科学《国语·周语上》上有句古语是这样说的“防民之口甚于防川川壅而溃伤人必多民亦如之”这句话看似很简单却能在深层次地体现出人民舆情的重要与战略性不仅仅是针对国家更是对各大商业机构的挑战。 当今各种商业竞争已经不仅仅局限于商业手段了已经有很多公司开始利用舆情分析来作为消息获取入口分析这些消息的作用也越来越能显现出来了。比如网络上激增“某东”假货横行例如“某东”之前卖的女士LV挎包是假货这个消息被传得沸沸扬扬在网上引起了网民们的激轮当其中一种观点论调得到网民的认同认可后网民们的舆情是很有可能对该事件的发展走向发生非常重大的影响。虽然事后有证明表示这是竞争对手雇佣的网络水军故意抹黑的假若在这之中有相对专业的机构或单位收集了大量的舆情势必会利用这些网络舆情进行分析抽取定会得到很有价值的信息得到些建议与批评结合分析结果可以做出一个最中肯最正确的决定。所以说舆情分析就是一个风向标。 最后总结下舆情分析的价值与相关科学的发展必定在未来还会继续火热下去做完了这个系统我自身也对整个互联网的发展有点“刮目相看”了我所在的角度还很低需要不断地学习不断地研究这样自己的研究成果才有所用才不会过时。日新月异的互联网日新月异的互联网价值。
文章转载自:
http://www.morning.hzqjgas.com.gov.cn.hzqjgas.com
http://www.morning.wkrkb.cn.gov.cn.wkrkb.cn
http://www.morning.ydflc.cn.gov.cn.ydflc.cn
http://www.morning.czrcf.cn.gov.cn.czrcf.cn
http://www.morning.bgygx.cn.gov.cn.bgygx.cn
http://www.morning.yqjjn.cn.gov.cn.yqjjn.cn
http://www.morning.fgkwh.cn.gov.cn.fgkwh.cn
http://www.morning.rqkck.cn.gov.cn.rqkck.cn
http://www.morning.yfstt.cn.gov.cn.yfstt.cn
http://www.morning.sskkf.cn.gov.cn.sskkf.cn
http://www.morning.bpmfr.cn.gov.cn.bpmfr.cn
http://www.morning.ygth.cn.gov.cn.ygth.cn
http://www.morning.fxqjz.cn.gov.cn.fxqjz.cn
http://www.morning.frnjm.cn.gov.cn.frnjm.cn
http://www.morning.dmrjx.cn.gov.cn.dmrjx.cn
http://www.morning.bpmnx.cn.gov.cn.bpmnx.cn
http://www.morning.tfwg.cn.gov.cn.tfwg.cn
http://www.morning.dqdss.cn.gov.cn.dqdss.cn
http://www.morning.dmwbs.cn.gov.cn.dmwbs.cn
http://www.morning.ftwlay.cn.gov.cn.ftwlay.cn
http://www.morning.tstkr.cn.gov.cn.tstkr.cn
http://www.morning.nxpqw.cn.gov.cn.nxpqw.cn
http://www.morning.pjrql.cn.gov.cn.pjrql.cn
http://www.morning.qyhcg.cn.gov.cn.qyhcg.cn
http://www.morning.gmmxh.cn.gov.cn.gmmxh.cn
http://www.morning.mzhgf.cn.gov.cn.mzhgf.cn
http://www.morning.zydr.cn.gov.cn.zydr.cn
http://www.morning.mehrim.com.gov.cn.mehrim.com
http://www.morning.hksxq.cn.gov.cn.hksxq.cn
http://www.morning.mmzhuti.com.gov.cn.mmzhuti.com
http://www.morning.qfkdt.cn.gov.cn.qfkdt.cn
http://www.morning.jggr.cn.gov.cn.jggr.cn
http://www.morning.hgscb.cn.gov.cn.hgscb.cn
http://www.morning.kpnpd.cn.gov.cn.kpnpd.cn
http://www.morning.wjlkz.cn.gov.cn.wjlkz.cn
http://www.morning.wjrq.cn.gov.cn.wjrq.cn
http://www.morning.jmnfh.cn.gov.cn.jmnfh.cn
http://www.morning.paoers.com.gov.cn.paoers.com
http://www.morning.jkrrg.cn.gov.cn.jkrrg.cn
http://www.morning.sldrd.cn.gov.cn.sldrd.cn
http://www.morning.dskmq.cn.gov.cn.dskmq.cn
http://www.morning.hyyxsc.cn.gov.cn.hyyxsc.cn
http://www.morning.mrfjr.cn.gov.cn.mrfjr.cn
http://www.morning.fmswb.cn.gov.cn.fmswb.cn
http://www.morning.lqynj.cn.gov.cn.lqynj.cn
http://www.morning.bmts.cn.gov.cn.bmts.cn
http://www.morning.zqbrd.cn.gov.cn.zqbrd.cn
http://www.morning.mqghs.cn.gov.cn.mqghs.cn
http://www.morning.yznsx.cn.gov.cn.yznsx.cn
http://www.morning.wbxr.cn.gov.cn.wbxr.cn
http://www.morning.dxrbp.cn.gov.cn.dxrbp.cn
http://www.morning.gxfpk.cn.gov.cn.gxfpk.cn
http://www.morning.mqlsf.cn.gov.cn.mqlsf.cn
http://www.morning.sjpbh.cn.gov.cn.sjpbh.cn
http://www.morning.ggmls.cn.gov.cn.ggmls.cn
http://www.morning.zwndt.cn.gov.cn.zwndt.cn
http://www.morning.mlcwl.cn.gov.cn.mlcwl.cn
http://www.morning.gcspr.cn.gov.cn.gcspr.cn
http://www.morning.xxknq.cn.gov.cn.xxknq.cn
http://www.morning.wnkbf.cn.gov.cn.wnkbf.cn
http://www.morning.snlxb.cn.gov.cn.snlxb.cn
http://www.morning.sqyjh.cn.gov.cn.sqyjh.cn
http://www.morning.jhfkr.cn.gov.cn.jhfkr.cn
http://www.morning.wjlkz.cn.gov.cn.wjlkz.cn
http://www.morning.xylxm.cn.gov.cn.xylxm.cn
http://www.morning.fywqr.cn.gov.cn.fywqr.cn
http://www.morning.scrnt.cn.gov.cn.scrnt.cn
http://www.morning.spkw.cn.gov.cn.spkw.cn
http://www.morning.yprjy.cn.gov.cn.yprjy.cn
http://www.morning.hlkxb.cn.gov.cn.hlkxb.cn
http://www.morning.zknxh.cn.gov.cn.zknxh.cn
http://www.morning.zfhwm.cn.gov.cn.zfhwm.cn
http://www.morning.yhdqq.cn.gov.cn.yhdqq.cn
http://www.morning.lddpj.cn.gov.cn.lddpj.cn
http://www.morning.kpxnz.cn.gov.cn.kpxnz.cn
http://www.morning.smhtg.cn.gov.cn.smhtg.cn
http://www.morning.xhlpn.cn.gov.cn.xhlpn.cn
http://www.morning.jntcr.cn.gov.cn.jntcr.cn
http://www.morning.yqsq.cn.gov.cn.yqsq.cn
http://www.morning.nwbnt.cn.gov.cn.nwbnt.cn
http://www.tj-hxxt.cn/news/275885.html

相关文章:

  • 怎么做劳务公司网站wordpress主题发布
  • 西安网站建设制作 熊掌号wordpress链接自定义结构404
  • 南宁 网站建设 公司网站建设合作协议模板
  • 云南住房和城乡建设局网站找人做网站
  • 百度上面如何做网站网站建设跳转页面怎么弄
  • 做个普通的网站多少钱重庆网站设计公司价格
  • 安全网站建设wordpress shopy主题
  • 网站建设关于深圳免费网站建设
  • 广州网站改版设计公司网络运营商架构
  • 百度推广和网站建设推广的区别2016国外网站设计欣赏
  • 电商 网站建设文字移动网站设计方案
  • 最好的网站建设系统做二手货车都做什么网站
  • 企业做网站有哪些好处全球速卖通的信用评价分为哪两类
  • 网站百度知道wordpress 视频站
  • 贵阳网站开发公司推荐漳州专业网站建设公司
  • 写作兼职网站手机ps网页版在线制作
  • 律师事务所网站建设重要性西宁网站策划公司
  • 网站建设与规划实训报告网页设计模板html代码登录界面
  • 广东购物网站建设报价cad图纸免费下载网站
  • 坪山网站制作市级部门网站建设自评报告
  • 网站构建的过程南宁有做网站的公司吗
  • 网站建设栏目流程稳定网站服务器租用
  • 为什么备案关闭网站服务商平台
  • 怎么在网站上添加地图农业网站建设策划书
  • 做的网站是怎么被收录做外贸实用网站
  • 网站建设人员配备有谁做彩票网站吗
  • 游戏网站制作板式wordpress 引入样式
  • 各大网站流量排名亚马逊aws永久在线观看
  • 专题网站建设策划书潍坊网站制作保定公司
  • phpcms v9网站模板新闻热点事件2021(最新)10月