基于SVM的程序设计相关网页判别系统
源代码工程文件使用手册
目录
1项目简介及源文件说明
1.1 项目简介
1.2 源文件使用说明
1.2.1 前端工具
1.2.2 后端工具
2收集模块使用
3处理模块使用
4判别模块使用
1项目简介及源文件说明
1.1 项目简介
ACM/ICPC是一个有着重大影响力的国际大学生程序设计竞赛,互联网亦有大量的训练习题与解题报告。有些学校会建设自己的网站用于收集解题报告,供师生参考学习。该系统可服务于这样的网站,用于自动化评判网页。
该判别系统接受一个url(或本地网页)作为输入x,判别后输出结果,一个重要的参数为字符串y,用于阐明该网页的类别。记集合A={网页|它描述的是计算机数据结构编程的相关内容},那么y为“yes”或“no”,前者表示x∈A;后者表示x∉A。
该系统可分为三个模块。
收集模块用于网页收集与标注,实现网页到原始训练集的处理。
训练模块以上个模块的输出作为输入,先后进行中文分词处理、初始特征空间统计,并通过卡方检验得到抽取后的特征空间,由此可计算每篇文档的特征向量,归一化后送往SVM进行训练。这是一个机器学习过程,通过对径向基核函数较关键的参数gamma与C调优,得到训练好的模型。
判别模块通过web页面与用户交互,可接受url或本地网页文档作为输入,输出结果包括网页的标题、正文、分词结果、特征向量、判别结果、判别结果准确率估计这6个参数。除了与人交互外,判别模块同时也提供了web 服务,可以供其他代码跨平台批量调用。
1.2 源文件使用说明
它们都是使用eclipseIDE开发的java项目。可以使用eclipseIDE直接打开项目目录。该项目用到了以下工具。
1.2.1 前端工具
(1)bootstrap(css前端框架)
bootstrap是一个css(Cascading Style Sheets)前端框架,它简洁、直观、漂亮,特点之一是能够根据不同尺寸的设备(如手机、平板、笔记本与台式机的显示器尺寸不一)来响应式地布局,背后原理是css的媒体查询功能。有了响应式布局,就能够灵活地面对不同分辨率的设备,做到一次开发普遍使用。另一个特点是栅格化,把浏览器一行的宽度均分成十二等份,以方便对表单、按钮、表格等元素进行精致的网页排版。
(2)angularjs(MVC前端框架)
angularjs是一个前端MVC框架。MVC是一种流行的开发理念——M,Model,数据模型;V,View,视图,负责向用户展示的部分;C,Controller,业务逻辑和控制逻辑。它们的模块化有利于维护与复用。本系统中用的最多的是数据双向绑定功能和依赖注入。以数据收集模块的网页解析内容为例,当爬虫系统将网页解析结果以json格式返回给浏览器时,不需要调用$(‘#id’).val=jsonObj.theValue此类代码,angular框架会根据此前指定的绑定关系自动刷新。
1.2.2 后端工具
(1)jersey(RESTful Web Service框架)
jersey是一个RESTful Web Service框架。web service即远程函数调用,通过该特性,在互联网中跨机器调用其他服务器上的函数,就像调用本地代码一样简单又方便。原理是框架把请求对象序列化为json形式的字符串,发送http请求到指定的服务器上,服务器端把json字符串再反序列化为对象,找到函数代码入口后开始执行,得到返回对象后序列化为json字符串,作为客户端http请求的回应返回,客户端再将结果反序列化为对象。至此,完成一次远程调用。虽然细节上比较麻烦,但框架已经为我们封装好了这些细节。还有一个好处就是——把服务分布在不同的机器上有利于负载均衡,该请求还是无状态的,对于此次请求的处理不依赖于上一次的状态。
(2)jackson(实现json与java对象的转化)
jackson用于实现json与java对象的序列与反序列化。web service要实现跨机器传送对象那么就需要有一种技术能把对象转换为特定格式的信息。为了实现跨平台(比如把java对象转化为c#或c++对象),又考虑到方便人们阅读,所以基于字符串规则的转换是最理想的。json就是这样一个轻量级的数据交换格式,而jackson是一个实现该功能的很好用的框架。
(3)tomcat-jdbc-pool(数据库连接池)
连接池的基本思想是在程序第一次启动的时候,将数据库连接(通常为java.sql.connection)作为对象存储在内存中。当某段代码需要访问数据库时,不再建立一个新的连接,而是从预先准备好的连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也不必主动地将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。整个过程中,数据库访问者与数据库服务端之间连接的建立、断开都由连接池自身来管理。同时,数据库连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等都是可以通过文本文件来配置的,非常灵活。使用数据库连接池可以将负责与数据库连接的模块独立出来,方便维护。以此为中转,避免了对数据库服务端频繁的连接与断开操作,减少资源占用,获得更快的响应时间。
(4)spring(依赖注入)
spring的核心是依赖注入。本质就是通过配置xml文件或注解来自动生成你需要的对象,放在spring的大容器中。spring是一个独立的框架,既可以用在一般的java 本地代码中,也可以用在 Web网站模块中。程序先创建bean容器,再调用bean容器的getBean()方法来获取Spring容器中的bean。上面讲到该系统中需要使用数据库连接池,为了灵活地配置,我们通常把与数据库连接的参数写在在文本文件中而不是硬编码在代码里。该系统web模块的入口是web容器tomcat,所以在tomcat中配置spring,让spring读取数据库配置文件帮我们生成需要的jdbc datasource对象。
(5)maven(项目依赖管理工具)
它是一个项目构建管理工具,用于告诉编译器项目中各文件之间的依赖关系等。pom.xml文件是maven项目的入口,这个xml文件指定了要构建该项目的几乎所有配置信息。maven的仓库分为本地仓库和远程仓库。本地仓库是maven在我们本机设置的仓库目录,默认目录为当前用户目录/.m2/repository/。远程仓库即默认的远程中央仓库,为互联网中的某台专用服务器。maven的工作原理为读取我们在pom.xml中指定的依赖项目坐标(包含开发商,项目名称,版本号等),maven从远程中央仓库下载得到我们需要的文件并存放到本地仓库中,供本地的若干个项目共享,实现了一份依赖随意共用的灵活性。当多个项目具有共同的多个依赖时,可以配置一个依赖关系在父文件中,通过继承实现复用,该系统就用到了这一特性。
(6)commons-fileupload(文件上传的后台处理框架)
它用于文件上传的后台处理。文件上传涉及到大量的二进制流数据处理,使用该工具可显著减少代码量。
(7)jsoup(网页解析工具)
它是一个网页解析工具。
(8)ikanalyzer(中文分词工具)
它是一个中文分词工具。
(9)还有一些其他常用的tomcat网站容器、jsp/servlet技术、Junit单元测试、log4j日志记录等工具等不再介绍。
2收集模块使用
该模块对应目录GraduationProjectCollect。
该模块的说明页面,由bootstrap导航条和三个子页面组成。见图2-1。
图2-1 收集模块web首页
“收集统计”子页面用来读取数据库,点击“读取收集系统数据库的统计信息”,统计出总共样本的数目,还有更为详尽的细粒度的统计信息。见图2-2。
图2-2 收集模块统计页面
“收集添加”子页面用来添加新的网页,它通过web服务与爬虫模块相连。设定完初始url之后,下面就会展现Jsoup解析后的标题、正文内容。见图2-3。
图2-3 收集模块添加页面
如果它是正样例网页,就可以点击“是”按钮,存入到数据库存放正样例的表中。
如果它不是正样例网页,就可以点击“否”按钮,存入到数据库存放反样例的表中。
如果该网页内容偏少,无法确定,就可以点击“不清楚,跳过”按钮,忽略对该网页的处理。
当写入数据库成功时,会有对话框进行反馈,见图2-4。
图2-4 收集模块添加网页成功提示
可以注意到它有一个docId编号,它用于唯一标记一篇文档,在数据库不同处理阶段的多个表中,docId一样的文档就是同一篇文档。
由于以下三种原因造成的失败,该系统也会给出提示:
原因1:网络通讯失败;
原因2:该网站采取反爬虫策略,不能够爬取到有效的信息;
原因3:数据库中已经有同样的网址记录,因为重复所以拒绝添加。
3处理模块使用
该模块对应目录GraduationProjectTrain。
项目结构见图3-1。
图3-1 GraduationProjectTrain项目结构
运行com.likeyichu.doc.main()函数实现分词过程。
运行com.likeyichu.math.FeatureSelection.main()函数实现特征选择、特征向量计算过程。
运行com.likeyichu.train.Train.main()函数实现机器学习,得到model。
4判别模块使用
该模块对应目录GraduationProjectUse。
判别系统提供用户交互与程序交互两种使用模式。
用户通过网页与判别系统交互。用户界面见图4-1。
图4-1 使用模块人机交互界面
用户可以提交本地网页文件,也可以提交一个url。点击任何一个按钮,都会弹出一个模态对话框。以点击“判断本地网页文件”为例,效果见下图4-2。
图4-2 模态对话框-提交Url
以点击“判断本地网页文件”为例,效果见下图4-3。
图4-3 模态对话框-提交文件
点击“选择文件”按钮,可以选择文件。以上传一个名为“图论总述”的技术博客网页为例,上传成功后点击“查看结果”按钮,显示效果见图4-4。
图4-4 点击“查看结果”按钮,效果示意