中南大学电子商务实验.doc
实验3搜索引擎及SEO实验实验学时: 2 每组人数: 1 实验类型: 2 (1:基础性 2:综合性 3:设计性 4:研究性)实验要求: 1 (1:必修 2:选修 3:其它)实验类别: 3 (1:基础 2:专业基础 3:专业 4:其它)一、实验目的1研究并学习几种常见的搜索引擎算法,包括网络蜘蛛爬行策略、中文分词算法、网页正文提取算法、网页去重算法、PageRank和MapReduce算法,了解它们的基本实现原理; 2运用所学SEO技术对网页进行优化。二、实验内容1. 研究常用的网络蜘蛛爬行策略,如深度优先策略、广度优先策略、网页选择策略、重访策略和并行策略等,了解其实现原理;2. 研究至少两种中文分词算法,了解其实现原理;3. 研究至少两种网页正文提取算法,了解其实现原理;4. 研究至少两种网页去重算法,了解其实现原理;5. 研究Google的PageRank和MapReduce算法,了解它们的实现原理;6. 使用所学的SEO技术,对实验二所设计的网站静态首页实施SEO,在实施过程中需采用如下技术:(1) 网页标题(title)的优化;(2) 选取合适的关键词并对关键词进行优化;(3) 元标签的优化;(4) 网站结构和URL的优化;(5) 创建robots.txt文件,禁止蜘蛛抓取网站后台页面;(6) 网页内部链接的优化;(7) Heading标签的优化;(8) 图片优化;(9) 网页减肥技术。7. 使用C+、C#和Java等任意一种编程语言,设计并实现一个简单的网络蜘蛛爬行程序,要求在输入关键词、设置爬行深度和初始网页URL之后能够实现网页搜索,输出包含关键词的网页的URL和网页标题。【注:实验7为补充实验,不要求每个同学都完成,感兴趣者可自行实现该程序,不计入实验报告评分。】三、实验要求1. 研究几种常用的网络蜘蛛爬行策略,填写相应的表格,表格必须填写完整;2. 研究两种中文分词算法,填写相应的表格,表格必须填写完整;3. 研究两种网页正文提取算法,填写相应的表格,表格必须填写完整;4. 研究两种网页去重算法,填写相应的表格,表格必须填写完整;5. 研究PageRank算法和MapReduce算法,填写相应的表格,表格必须填写完整;6. 提供实施SEO之后的网站静态首页界面和HTML代码,尽量多地使用所学SEO技术;7. 严禁大面积拷贝互联网上已有文字资料,尽量用自己的理解来阐述算法原理,必要时可以通过图形来描述算法;8. 使用任意一种编程语言实现一个简单的网络蜘蛛程序,需提供网络蜘蛛程序完整源代码及实际运行结果。四、实验步骤1. 通过使用搜索引擎并查阅相关资料,研究并整理几种常用的网络蜘蛛爬行策略相关资料,填写相应的表格;2. 通过使用搜索引擎并查阅相关资料,研究并整理两种中文分词算法的基本原理,填写相应的表格;3. 通过使用搜索引擎并查阅相关资料,研究并整理两种网页正文提取算法的基本原理,填写相应的表格;4. 通过使用搜索引擎并查阅相关资料,研究并整理两种网页去重算法的基本原理,填写相应的表格;5. 通过使用搜索引擎并查阅相关资料,研究并整理PageRank算法和MapReduce算法的基本原理,填写相应的表格;6. 对实验二所设计的网站静态首页实施SEO;7. 使用任意一种编程语言,设计并实现一个简单的网络蜘蛛爬行程序。五、实验报告1完成本项目实验后,学生应提交实验报告。2实验报告格式与要求见附件。电子商务应用实验报告项目名称 电子商务第三次试验 专业班级 1206 学 号 姓 名 金初阳 实验成绩:批阅教师:年 月 日实验3搜索引擎及SEO实验实验学时: 2 实验地点: 二综 实验日期: 2014/12/26 一、实验目的研究并学习几种常见的搜索引擎算法,包括网络蜘蛛爬行策略、中文分词算法、网页正文提取算法、网页去重算法、PageRank和MapReduce算法,了解它们的基本实现原理;运用所学SEO技术对网页进行优化。二、实验内容和方法1. 研究常用的网络蜘蛛爬行策略,如深度优先策略、广度优先策略、网页选择策略、重访策略和并行策略等,了解其实现原理;2. 研究至少两种中文分词算法,了解其实现原理;3. 研究至少两种网页正文提取算法,了解其实现原理;4. 研究至少两种网页去重算法,了解其实现原理;5. 研究Google的PageRank和MapReduce算法,了解它们的实现原理;6. 使用所学的SEO技术,对实验二所设计的网站静态首页实施SEO,在实施过程中需采用如下技术:(1) 网页标题(title)的优化;(2) 选取合适的关键词并对关键词进行优化;(3) 元标签的优化;(4) 网站结构和URL的优化;(5) 创建robots.txt文件,禁止蜘蛛抓取网站后台页面;(6) 网页内部链接的优化;(7) Heading标签的优化;(8) 图片优化;(9) 网页减肥技术。7. 使用C+、C#和Java等任意一种编程语言,设计并实现一个简单的网络蜘蛛爬行程序,要求在输入关键词、设置爬行深度和初始网页URL之后能够实现网页搜索,输出包含关键词的网页的URL和网页标题。【注:实验7为补充实验,不要求每个同学都完成,感兴趣者可自行实现该程序,不计入实验报告评分。】三、实验要求1. 研究几种常用的网络蜘蛛爬行策略,填写相应的表格,表格必须填写完整;2. 研究两种中文分词算法,填写相应的表格,表格必须填写完整;3. 研究两种网页正文提取算法,填写相应的表格,表格必须填写完整;4. 研究两种网页去重算法,填写相应的表格,表格必须填写完整;5. 研究PageRank算法和MapReduce算法,填写相应的表格,表格必须填写完整;6. 提供实施SEO之后的网站静态首页界面和HTML代码,尽量多地使用所学SEO技术;7. 严禁大面积拷贝互联网上已有文字资料,尽量用自己的理解来阐述算法原理,必要时可以通过图形来描述算法;8. 使用任意一种编程语言实现一个简单的网络蜘蛛程序,需提供网络蜘蛛程序完整源代码及实际运行结果。四、实验步骤1. 通过使用搜索引擎并查阅相关资料,研究并整理几种常用的网络蜘蛛爬行策略相关资料,填写相应的表格;2. 通过使用搜索引擎并查阅相关资料,研究并整理两种中文分词算法的基本原理,填写相应的表格;3. 通过使用搜索引擎并查阅相关资料,研究并整理两种网页正文提取算法的基本原理,填写相应的表格;4. 通过使用搜索引擎并查阅相关资料,研究并整理两种网页去重算法的基本原理,填写相应的表格;5. 通过使用搜索引擎并查阅相关资料,研究并整理PageRank算法和MapReduce算法的基本原理,填写相应的表格;6. 对实验二所设计的网站静态首页实施SEO;7. 使用任意一种编程语言,设计并实现一个简单的网络蜘蛛爬行程序。五、实验结果1. 研究几种常用的网络蜘蛛爬行策略并填写如下表格:策略名称基本原理参考资料深度优先策略深度优先是指网络蜘蛛会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接此方法在设计的时候比较容易。1搜索引擎蜘蛛爬行网页的广度优先和深度优先解析.广度优先策略网络蜘蛛会先抓取起始网页中链接的所有网页,然后选择其中一个链接网页,继续抓取在此网页中的所有网页。此方式可以让网络蜘蛛并行处理,提高抓取速度。1搜索引擎蜘蛛爬行网页的广度优先和深度优先解析.网页选择策略一个页面的重要程度与其自身的质量有关,与链接数、访问数得出的受欢迎程度有关,甚至与他本身的网址(后来出现的垂直搜索引擎则限制在一级域名或者固定页面上)有关。最重要的页面会有很多主机连接到它们,并且那些链接会较早的发现,而不用考虑从哪一个主机或页面开始的。1 网络爬虫的选择策略.blog_70c0549d0100ppym.html重访策略决定了搜索引擎利用何种更新策略对网页进行重新抓取。具体策略分类:(以网站更新频率为主要参考标准,根据网页类型不同调整更新频率,针对时效性关键词进行重访策略依据网站权重判断)1搜索引擎网页重访策略.并行策略并行策略是用来协调多个网络蜘蛛在相同的网络空间内同时搜索资源。这个策略的目标是提高网络资源的下载速度以及避免多个网络蜘蛛在同一个时间下载相同的资源1June Huang 的blog 网络蜘蛛 - 搜索策略注:参考资料格式如下:1 developerWorks中国:Java 设计模式. 2 阎宏. Java与模式. 北京: 电子工业出版社, 2004.3 于满泉, 陈铁睿, 许洪波. 基于分块的网页信息解析器的研究与设计. 计算机应用, 2005, 25(4).2. 研究两种中文分词算法并填写如下表格:算法名称基本原理参考资料算法一 双向匹配法正向最大匹配算法和逆向最大匹配算法如果两个算法得到相同的分词结果,那就认为是切分成功,否则,就出现了歧义现象或者是未登录词问题双向最大匹配算法的缺点就是不能够处理歧义问题虽然歧义的解决最好是通过上下文语境,或者说是通过歧义字段的上下文之间的关系,将上下文中对歧义消解有指示作用的语法、语义等多方面的信息提取出来,并且将它们集成到一个统计模型中1麦范金,李东普,岳晓光.基于双向匹配法和特征选择算法的中文分词技术研究.算法二 特征法特征选择算法来解决歧义问题因为中文分词的难点在于歧义切分歧义字段主要包括交集型歧义字段和组合型歧义字段歧义的解决最好是通过上下文语境,将上下文中对歧义消解有指示作用的语法、语义等多方面的信息提取出来,作为消解歧义的特征并将它们集成到一个统计模版中,由选择函数选择具有区分度大的特征进行消歧1麦范金,李东普,岳晓光.基于双向匹配法和特征选择算法的中文分词技术研究.3. 研究两种网页正文提取算法并填写如下表格:算法名称基本原理参考资料算法一 基于相似度的中文网页正文提取算法算法分为两个步骤:首先取出网页中包含中文最多的行,然后利用鉴于此余弦相似度匹配和标签相似度来提取网页正文。可以避免传统的分块正文提取。1)首先进行网页规范化处理,在规范会之前,去掉诸如“style”、“script”等与网页正文毫不相关但是内容很多的标签信息,可以加快处理速度并能更好的规范网页的结构;2)标签相似度,提取标签中的内容并记录其出现位置,然后采用公式计算两个标签之间的相似度,标签中内容的位置越靠前,重要度越高;3)文本内容相似度,中利用余弦距离来计算网页中每行文本内容之间的相似度此算法旨在通过向量相似度的计算来提取正文型网页的正文内容。1 王利,刘宗田,王燕华,廖涛 WANG Li.LIU.Zong-tian.WANG Yan-hua.LIAO Tao. 基于内容相似度的网页正文提取期刊论文-计算机工程2010,36(6)2 熊子奇,张晖,林茂松. 基于相似度的中文网页正文提取算法 2010算法二 基于FFT的网页正文提取算法核心原理:正文是HTML中的一段频谱类似、位于中部、连续的文字。通过以下步骤,求解最佳正文区间。(1) 读入文件转换为Unicode(2) 窗口分段(3) 应用统计学原理,对字符进行强度编码转换(4) 对每一段窗口作FFT,对每一段窗口作快速傅立叶变换得到频域的F向量。Fi=FFT(Ii)(5) 各段频域互相求差(6) 依据权值排序(7) 加权平均1 李蕾,王劲林,白鹤,胡晶晶. 基于FFT的网页正文提取算法研究与实现 2007,43(30)2 常红要,朱征宇,陈烨,张鹏,曾丽芳. 基于HTML标记用途分析的网页正文提取技术期刊论文-计算机工程与设计2010(24)3 段晓丽,王宇,谷静,刘玮楠. 基于正文特征及网页结构的主题网页信息抽取期刊论文-计算机工程与应用2012(30)4. 研究两种网页去重算法并填写如下表格:算法名称基本原理参考资料I-Match算法 I-Match算法有一个基本的假设说:不经常出现的词和经常出现的词不会影响文档的语义,所以这些词是可以去掉的。 算法的基本思想是:将文档中有语义的单词用hash的办法表示成一个数字,数字的相似性既能表达文档的相似性1 网页去重-算法篇.SimHash算法 ocality sensitive hash算法博大精深。基本思想是,如果两个东西相似,我可以用一个hash函数把他们投影到相近的空间中LSH。用到near duplication detection上,算法框架是: 1. 将文档转换为特征的集合,每一个特征有一个权重 2. 利用LSH函数把特征向量转换为f位的fingerprint,如:64 3. 查找fingerprint的海明距离1 网页去重-算法篇.5. 研究PageRank算法和MapReduce算法并填写如下表格:算法名称基本原理参考资料PageRankPageRank5的简单定义:令u为一个网页,N(v)表示从网页v向外的链接数目,B(u)表示链接到网页u的网页集合,R(u)表示网页u的PageRank值,C为规范化因子,作用是保证所有网页的PageRank总和为常量。例如为保证总的PageRank值为1,可以通过网页PageRank总和的倒数求得(参见2.2)。R(u)=cR(v)/N(v)所以PageRank除了考虑网页得票数(即链接)的纯数量之外,还要分析为其投票的网页的重要性,重要的网页所投之票有助于增强其他网页的“重要性”。简单地说,PageRank就是要从链接结构中获取网页的重要性,而网页的重要性决定着同时也依赖于其他网页的重要性。1 曹军Google的PageRank技术剖析情报杂志2002年 第10期MapReduceMapReduce的处理过程可以构思如下:Hadoop中的Master节点先将HDFS中存储网页链接关系的文件划分为多个文件块,然后再交给每个Slave节点,而每个Slave节点上可能会进行Map函数处理,也可能会进行Reduce函数处理。先将划分好的网页链接关系文件的某一个文件块交给运行Map函数的节点,并按照一定格式的<key, value>键值对输出至Master节点,然后再由运行Reduce函数的节点读取Map函数输出的中间结果,进行汇总处理,形成最终结果,最后保存到HDFS中。在MapReduce计算模式中,并行化PageRank算法的每次迭代都是一个MapReduce的计算过程。1 江务学,张璟,王志明,等MapReduce并行编程架构模型研究J微电子学与计算机, 2010,27(6)6. 提供通过SEO优化之后的网站首页静态效果图和完整的HTML源代码。<% page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN"><html><head><title>睿健时代_最专业垂直健身网站</title><meta name="keywords" content="蛋白粉,增肌粉,肌酸,健身器材,胸肌,腹肌,快乐健身操,有氧健身操,健身计划" /> <meta name="description" content="睿健时代提供健身指导,健身房推荐,健身用品推荐,帮助您打造最完美的身材" /><meta name="robots" content="index,follow"><script src="js/common.js" type="text/javascript"></script><link rel="stylesheet" type="text/css" href="css/index.css"media="all" /><link rel="stylesheet" type="text/css" href="css/advertisement.css" media="all" /></head><body id="nv_portal" class="pg_index"><div id="newry_topnav" class="nav_box" style="position: fixed; top: 0px; width: 100%; z-index: 100; left: 0px; padding-bottom: 0px; margin-top: 0px;"> <div class="nav_min cl wp"> <div class="logo"> <a href="#" title="我爱健身网"><img src="image/logo.png" alt="睿健时代" border="0" /></a> </div> <div id="newry_menu_nav" class="newry_m_n"> <li class="active" id="mn_portal"><a href="#" hidefocus="true" title="Portal">门户</a></li> <li id="mn_forum"><a href="#" title="BBS">健身论坛</a></li><li id="mn_forum"><a href="#">健身视频</a></li><li id="mn_forum"><a href="#">健身问答</a></li> </div> <div id="scbar" class="cl"> </div> <div class="cl"></div> </div> <script src="js/scrolltop.js" type="text/javascript"></script></div><div id="wp" class="wp"> <script src="js/jquery-1.js" type="text/javascript"></script> <script src="js/jquery_pic.js" type="text/javascript"></script> <div class="blank20"></div> <div id="content" style="width:1200px; margin-left:0px;"> <div id="diy_f2" class="area"></div> <div class="headline"> <div class="dui_focus" style="margin:0 auto;"> <div id="diy_focus" class="area"> <div id="framehZgqaq" class="frame move-span cl frame-1"> <div id="framehZgqaq_left" class="column frame-1-c"> <div id="portal_block_3" class="block move-span"> <div id="portal_block_3_content" class="dxb_bc"> <div id="pic"> <div class="tempWrap" style="overflow:hidden; position:relative; width:880px"> <ul style="width: 4400px; position: relative; overflow: hidden; padding: 0px; margin: 0px; left: -880px;"> <li style="float: left; width: 880px;"><img src="image/summer.png" width="540" height="300" /></li> </ul> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div class="racemanage"> <div class="rac_box"> <h3> 专业健身风标、您的健身生活 </h3> <a target="_blank" href="#" class="btn_red">免费注册</a> </div> <div class="rac_box"> <a target="_blank" href="#" class="btn_quicklanche fa-pencil-square"> 发布帖子</a> <a target="_blank" href="#" class="btn_quicklanche fa-file-text"> 我的帖子</a> </div> </div> <div class="blank20"></div> <!- 主左开始-> <div class="main_box"> <div class="leftside"> <div id="diy_b2" class="area"> <div class="tagsbox"> <h1> 热门健身专题 </h1> <ul class="tags_list"> <li> <a href="#" target="_blank">胸肌专题</a> </li> <li> <a href="#" target="_blank">腹肌专题</a> </li> <li> <a href="#" title="二头专题" target="_blank">二头专题</a> </li> <li> <a href="#" title="三头专题" target="_blank">三头专题</a> </li> <li> <a href="#" title="三角专题" target="_blank">三角专题</a> </li> <li> <a href="#" title="背部专题" target="_blank">背部专题</a> </li> <li> <a href="#" title="腿部专题" target="_blank">腿部专题</a> </li> <li> <a href="#" title="俯卧撑" target="_blank">俯卧撑</a> </li> <li> <a href="#" title="健身计划" target="_blank">健身计划</a> </li> </ul> </div> <ul class="fCs-con" style="width: 180px; position: relative; overflow: hidden; padding: 0px; margin: 0px; left: 0px;"> <li style="float: left; width: 180px;"> <img src="image/AD1.png" width="200" height="300" /></li> </ul> <ul class="fCs-nav"> <!-<li class="fCs-nav1 on" style="width: 140px;"><a href="#" target="_blank">面朝大海请自拍</a><s></s></li>-> </ul> </div> </div> <div class="l_content"> <div id="indbbs" class="zj_youji lorBelly lorFace"> <div class="floorL"> <div id="article_classify_nav" class="article_classify_nav"> <a class="switchNavItem nav_item i_all" href="javascript:;" id="switchTab7_1" onclick="switchTabNew('switchTab7',1, 7 ,'current'); ">胸肌</a> <a class="nav_item i_mj switchNavItem" href="javascript:;" id="switchTab7_2" onclick="switchTabNew('switchTab7',2, 7 ,'current'); ">腹肌</a> <a class="nav_item i_mj switchNavItem" href="javascript:;" id="switchTab7_3" onclick="switchTabNew('switchTab7',3, 7 ,'current'); ">二头</a> <a class="nav_item i_ct switchNavItem" href="javascript:;" id="switchTab7_4" onclick="switchTabNew('switchTab7',4, 7 ,'current');">三头</a> <a class="nav_item i_sk switchNavItem" href="javascript:;" id="switchTab7_5" onclick="switchTabNew('switchTab7',5, 7 ,'current'); ">三角</a> <a class="nav_item i_tg switchNavItem" href="javascript:;" id="switchTab7_6" onclick="switchTabNew('switchTab7',6, 7 ,'current'); ">背部</a> <a class="nav_item i_hd switchNavItem" href="javascript:;" id="switchTab7_7" onclick="switchTabNew('switchTab7',7, 7 ,'current'); ">腿部</a> <script type="text/javascript" language="jscript"> var tabIndex = 1; window.onload = function () document.getElementById("switchTab7_" + 1).className = document.getElementById("switchTab7_" + 1).className + " current" function switchTabNew(id, current, total, activeclass) for (var i = 1; i <= total; i+) var className = document.getElementById(id + "_" + i).className; className = className.replace(" current", ""); document.getElementById(id + "_" + i).className = className; document.getElementById(id + "_c_" + i).style.display = "none" var className = document.getElementById(id + "_" + current).className; document.getElementById(id + "_" + current).className = className + " current" document.getElementById(id + "_c_" + current).style.display = ""