<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[博客 --- 北京线点科技有限公司 - 搜索引擎]]></title>
<link>http://www.xd-tech.com/blog/</link>
<description><![CDATA[我见青山多妩媚，料青山，见我应如是！jaddy0302@126.com]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog2 v2.4]]></copyright>
<webMaster><![CDATA[jaddy0302@126.com(jaddy0302)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>博客 --- 北京线点科技有限公司</title> 
	<url>http://www.xd-tech.com/blog/images/logos.gif</url> 
	<link>http://www.xd-tech.com/blog/</link> 
	<description>博客 --- 北京线点科技有限公司</description> 
</image>

			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=109</link>
			<title><![CDATA[如何做好垂直搜索？(二）]]></title>
			<author>jaddy0302@126.com(baijl)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,26 May 2010 16:05:03 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=109</guid>	
		<description><![CDATA[如何做好垂直搜索？（二）<br/>搜索引擎是一个产品，给用户提供服务的产品，需要长期的不断的改进升级调整才能持续不断的提用户体验，需要满足用户不断增长并且变化的需求、需要不断适应网络的变化。这是因为网络环境是不断变化的、网民的需求也是不断变化的。千万不要把搜索当成项目来做，做完了撂那让用户去用那你肯定没戏。在搜索引擎领域是讲体验的、新的引擎如果用户体验一旦整体上有领先一年以上的差距并且持续2年，那前期的领先者的优势就荡然无存，因为搜索引擎的用户转移成本相对而言是比较低的而且口碑是最佳的传播方式。如果一个搜索引擎不能持续不断的技术创新理念创新，那对于这个搜索引擎来说就等于死亡。我们一般形容搜索引擎的领先是以时间计算的。在用户体验面前，任何的炒作都显得很渺小。&nbsp;<br/><br/>作垂直搜索引擎，麻雀虽小，但是五脏俱全。无论理念文化、产品管理、应用、技术都和搜索引擎的楔形理论没有什么区别。所以要做好一垂直搜索必须解决这几个方面。&nbsp;<br/><br/>楔形的尖:垂直搜索技术。&nbsp;&nbsp;<br/>垂直搜索技术主要分为两个层次:模板级和网页库级。模板级是针对网页进行模板设定或者自动生成模板的方式抽取数据，对网页的采集也是针对性的采集，适合规模比较小、信息源少且稳定的需求，优点是快速实施、成本低、灵活性强，缺点是后期维护成本高，信息源和信息量小。网页库级就是在信息源数量上、数据容量上检索容量上、稳定性可*性上都是网页库搜索引擎级别的要求，和模板方式最大的区别是对具体网页不依赖，可针对任意正常的网页进信息采集信息抽取……。这就导致这种方式数据容量上和模板方式有质的区别，但是其灵活性差、成本高。当然模板方式和网页库级的方式不是对立的，这两者对于垂直搜索引擎来说是相互补充的，因为技术只是手段，目的是切反用户之需。本文谈及的技术主要是指网页库级别垂直搜索引擎技术。&nbsp;<br/><br/>搜索引擎的确是一项对技术要求比较高的应用，几年前相关的人才也比较少。现在搜索技术人才多了，相关的技术和技术的应用得相对以前而言更加成熟，但是竞争也更加激烈了。垂直搜索大致需要以下技术：<br/><br/>1.&nbsp;信息采集技术<br/>2.&nbsp;网页信息抽取技术&nbsp;<br/>3.&nbsp;信息的处理技术，包括:重复识别、重复识别、聚类、比较、分析、语料分析等&nbsp;<br/>4.&nbsp;语意相关性分析&nbsp;<br/>5.&nbsp;分词&nbsp;<br/>6.&nbsp;索引&nbsp;<br/>信息采集技术，垂直搜索引擎spider和网页库的spider相比应该是更加专业，可定制化。可定向性的采集和垂直搜索范围相关的网页忽略不相关的网页和不必要的网页，选择内容相关的以及适合做进一步处理的网页深度优先采集、对页面有选择的调整更新频率……，采集可通过人工设定网址和网页分析url方式共同进行。垂直搜索对信息的更新有着特别的要求，根据这些特点可以从以下几点考虑1.信息源的稳定性(不能让信息源网站感觉到spider的压力)2.抓取的成本问题3.对用户体验改善程度。根据以上几点制定一种比较好的策略，要做到恰到好处。策略上可以评估网站/网页更新的系数、网站/网页的重要系数、用户点击系数(或曝光系数)、网站稳定系数……，根据这些系数来确定对这些网站/网页更新的频率。再由于新信息和更新了的信息list页面前面或者首页，所以对网页进行很好的分级可以以低成本很好的解决更新问题，系数比较低的网页一月up&#100;ate一次，稍微高点的一周up&#100;ate一次、中等的几天到一天一次、高的几小时到几分钟一次。类似搜索引擎的大库、周库、日库，小时库……&nbsp;<br/><br/>基于视觉网页块分析技术，模拟IE浏览器的显示方式，对网页进行解析。根据人类视觉原理，把网页解析处理的结果，进行分块，再根据需要，对这些块进行处理，如:采集定向、介绍抽取和一些必要的内容的抽取正文抽取……&nbsp;<br/><br/>结构化信息抽取技术，将网页中的非结构化数据按照一定的需求抽取成结构化数据。有两种方式，简单的就是模板方式，另外就是对网页不依赖web结构化信息抽取方式，这两种方式可以互取长处，以最简单最有效的办法满足需求。垂直搜索引擎和通用搜索引擎最大的区别就是对网页信息结构化抽取后再结构化数据进行深度的处理，提供专业的搜索服务。所以web结构化信息抽取的技术水平是决定垂直搜索引擎质量的重要技术指标。其实web结构化信息抽取在百度、google早已经广泛应用了，如:MP3、图片搜索、google的本地搜索就是从网页库抽取出企业信息，添加到其地图搜索中的，google通过这种技术正在颠覆做内容的方式。同样的技术应用还在qihoo、sogou购物、shopping等各种应用中体现。&nbsp;<br/><br/>简单的语法分析，简单的语法分析在搜索引擎中非常重要，可以通过简单的语法分析来改善数据的质量，低成本的获得某类信息，改善排序，寻找需要的内容……&nbsp;<br/><br/>信息处理技术，信息处理包括的范围比较广，主要包括去重、聚类、分析……，这根据需要相关的技术就非常多。&nbsp;<br/><br/>数据挖掘，找出您的信息的关联性对于垂直搜索来说非常重要，有效，可以在这些相关性上为用户提供更细致的服务。&nbsp;<br/><br/>分词技术，面向搜索的分词技术，建立和您的行业相关的词库。注意这是面向搜索的分词，不是面向识别和准确的分词。就这个工作安排十几个人不停的维护也不会嫌多。&nbsp;<br/><br/>索引技术，索引技术对于垂直搜索非常关键，一个网页库级的搜索引擎必须要支持分布索引、分层建库、分布检索、灵活的更新、灵活的权值调整、灵活的索引和灵活的升级扩展、高可*性稳定性冗余性。还需要支持各种技术的扩展，如偏移量计算等。&nbsp;<br/><br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=108</link>
			<title><![CDATA[如何做好垂直搜索？（一)]]></title>
			<author>jaddy0302@126.com(baijl)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Tue,18 May 2010 16:52:45 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=108</guid>	
		<description><![CDATA[<br/>垂直搜索技术主要分为两个层次:模板级和网页库级。模板级是针对网页进行模板设定或者自动生成模板的方式抽取数据，对网页的采集也是针对性的采集，适合规模比较小、信息源少且稳定的需求，优点是快速实施、成本低、灵活性强，缺点是后期维护成本高，信息源和信息量小。网页库级就是在信息源数量上、数据容量上检索容量上、稳定性可*性上都是网页库搜索引擎级别的要求，和模板方式最大的区别是对具体网页不依赖，可针对任意正常的网页进信息采集信息抽取。这就导致这种方式数据容量上和模板方式有质的区别，但是其灵活性差、成本高。当然模板方式和网页库级的方式不是对立的，这两者对于垂直搜索引擎来说是相互补充的，因为技术只是手段，目的是切返用户之需。本文谈及的技术主要是指网页库级别垂直搜索引擎技术。&nbsp;<br/><br/>搜索引擎的确是一项对技术要求比较高的应用，几年前相关的人才也比较少。现在搜索技术人才多了，相关的技术和技术的应用得相对以前而言更加成熟，但是竞争也更加激烈了。垂直搜索大致需要以下技术:&nbsp;<br/><br/>1.&nbsp;信息采集技术&nbsp;<br/>2.&nbsp;网页信息抽取技术&nbsp;<br/>3.&nbsp;信息的处理技术，包括:重复识别、重复识别、聚类、比较、分析、语料分析等&nbsp;<br/>4.&nbsp;语意相关性分析&nbsp;<br/>5.&nbsp;分词&nbsp;<br/>6.&nbsp;索引&nbsp;本文先引用几句话:&nbsp;&nbsp;<br/>“确解用户之意，切返用户之需。”&nbsp;<br/>“门户网站都想着是怎样省钱，而不是怎样花钱来买技术。”&nbsp;<br/>“搜索引擎不是人人都能做的领域，进入的门槛比较高。”&nbsp;<br/>“只是优秀还不够，最好的方式是将一件事情做到极致。”(google十大真理)&nbsp;<br/>“做搜索引擎需要专注”&nbsp;“对于一项排到第四的业务，门户很难做到专注。”<br/>“用户无法描述道他要找什么，除非让他看到想找的东西。”&nbsp;<br/><br/>“所谓楔形，其实就是个倒三角，倒三角的尖端部分代表搜索技术，中部是基于技术的产品应用平台，最上端是对整个搜索引擎用户人群文化的认识和理解，以及现代公司竞争最关键也最捉摸不定的所谓品牌。”&nbsp;<br/><br/>“楔形”蕴涵的另一个意义是:楔子要打到墙里，尖端是否锐利很重要，但楔子的破坏性有多强，究竟能在墙面挤压出多大的空间，其中端、后端的沉稳与厚重才是关键。&nbsp;<br/><br/>搜索引擎的技术和理念都是需要时间和经验的积累的，更是需要长期不断的完善进步的，绝对不要认为可以一蹴而就，要达到一个相对成熟领先的搜索引擎从开始到领先的周期一般需要是四年。着急不得。原因是因为搜索引擎太复杂，而且“用户无法描述他要找什么，除非让他看到想找的东西。”&nbsp;一切都需要摸索，尝试，问题需要一个一个解决，用户的需要得一点点的挖掘。&nbsp;<br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=99</link>
			<title><![CDATA[中文搜索引擎技术揭密:系统架构（一）]]></title>
			<author>jaddy0302@126.com(baijl)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,28 Apr 2010 10:49:03 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=99</guid>	
		<description><![CDATA[<br/>互联网发展的今天，一方面离不开其开放、共享的特性带给人们的全新体验，另一方面也离不开数以亿计的为其提供各类丰富内容的网络节点。互联网被普及前，人们查阅资料第一想到的便是拥有大量书籍资料的图书馆，到了今天你怎么想？或许今天的很多人都会选择一种更方便、快捷、全面、准确的方式——互联网。你可以坐在家里轻点几下鼠标就查到想要的各类信息，这在互联网没有被普及之前，还都仅是一个梦而已，但如今这一切已成为了现实。<br/>而帮助你通过整个互联网快速查找到目标信息的就是越来越被重视的搜索引擎。有关搜索引擎的技术资料网络上已经很多，关于搜索引擎经济的多方面报道各大媒体也都已经铺天盖地。下面谈一些我对搜索引擎的理解：<br/>搜索引擎技术和分类<br/>搜索引擎的技术基础是全文检索技术，从20世纪60年代，国外对全文检索技术就开始有研究。全文检索通常指文本全文检索，包括信息的存储、组织、表现、查询、存取等各个方面，其核心为文本信息的索引和检索，一般用于企事业单位。随着互联网信息的发展，搜索引擎在全文检索技术上逐渐发展起来，并得到广泛的应用，但搜索引擎还是不同于全文检索。搜索引擎和常规意义上的全文检索主要区别有以下几点：<br/>1.&#160;&#160;&#160;&#160;数据量<br/>传统全文检索系统面向的是企业本身的数据或者和企业相关的数据，一般索引库规模多在GB级，数据量大的也只有几百万条；但互联网网页搜索需要处理几十亿的网页，搜索引擎的策略都是采用服务器群集和分布式计算技术。<br/>2.&#160;&#160;&#160;&#160;内容相关性<br/>信息太多，查准和排序就特别重要，Google等搜索引擎采用网页链接分析技术，根据互联网上网页被链接次数作为重要性评判的依据；但全文检索的数据源中相互链接的程度并不高，不能作为判别重要性的依据，只能基于内容的相关性排序。<br/>3.&#160;&#160;&#160;&#160;安全性<br/>互联网搜索引擎的数据来源都是互联网上公开的信息，而且除了文本正文以外，其它信息都不太重要；但企业全文检索的数据源都是企业内部的信息，有等级、权限等限制，对查询方式也有更严格的要求，因此其数据一般会安全和集中地存放在数据仓库中以保证数据安全和管理的要求。<br/>4.&#160;&#160;&#160;&#160;个性化和智能化<br/>搜索引擎面向的是互联网访问者，由于其数据量和客户数量的限制，自然语言处理技术、知识检索、知识挖掘等计算密集的智能计算技术很难应用，这也是目前搜索引擎技术努力的方向；而全文检索数据量小，检索需求明确，客户量少，在智能化和个性可走得更远。<br/><br/><br/>&nbsp;&#160;&#160;&#160;&#160;<br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=96</link>
			<title><![CDATA[中文搜索引擎技术揭密:中文分词（一）]]></title>
			<author>jaddy0302@126.com(baijl)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,31 Mar 2010 13:16:55 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=96</guid>	
		<description><![CDATA[<br/>什么是中文分词？<br/>众所周知，英文是以词为单位的，词和词之间是靠空格隔开，而中文是以字为单位，句子中所有的字连起来才能描述一个意思。例如，英文句子I&nbsp;am&nbsp;a&nbsp;student，用中文则为：“我是一个学生”。计算机可以很简单通过空格知道student是一个单词，但是不能很容易明白“学”、“生”两个字合起来才表示一个词。把中文的汉字序列切分成有意义的词，就是中文分词，有些人也称为切词。我是一个学生，分词的结果是：我&nbsp;是&nbsp;一个&nbsp;学生。<br/>中文分词和搜索引擎<br/>中文分词到底对搜索引擎有多大影响？对于搜索引擎来说，最重要的并不是找到所有结果，因为在上百亿的网页中找到所有结果没有太多的意义，没有人能看得完，最重要的是把最相关的结果排在最前面，这也称为相关度排序。中文分词的准确与否，常常直接影响到对搜索结果的相关度排序。笔者最近替朋友找一些关于日本和服的资料，在搜索引擎上输入“和服”，得到的结果就发现了很多问题。下面就以这个例子来说明分词对搜索结果的影响，在现有两个中文搜索引擎上做测试，测试方法是直接在Google（<a href="http://www.google.com" target="_blank">http://www.google.com</a>）、百度（<a href="http://www.baidu.com" target="_blank">http://www.baidu.com</a>）上以“和服”为关键词进行搜索：<br/>&nbsp;&nbsp;&nbsp;&nbsp;在Google上输入“和服”搜索所有中文简体网页，总共结果507,000条，前20条结果中有14条与和服一点关系都没有。在第一页就有以下错误：<br/>&nbsp;在Google上输入“和服”搜索所有中文简体网页，总共结果507,000条，前20条结果中有14条与和服一点关系都没有。在第一页就有以下错误：<br/>&nbsp;&nbsp;&nbsp;&nbsp;“通信信息报：瑞星以技术和服务开拓网络安全市场”<br/>&nbsp;&nbsp;&nbsp;&nbsp;“使用纯HTML的通用数据管理和服务-&nbsp;开发者-&nbsp;ZDNet&nbsp;...”<br/>&nbsp;&nbsp;&nbsp;“陈慧琳《心口不一》化妆和服装自己包办”<br/>&nbsp;&nbsp;&nbsp;&nbsp;“外交部：中国境外领事保护和服务指南(2003年版)&nbsp;...”<br/>&nbsp;&nbsp;&nbsp;&nbsp;“产品和服务”<br/>&nbsp;&nbsp;&nbsp;&nbsp;等等。第一页只有三篇是真正在讲“和服”的结果。<br/>&nbsp;&nbsp;&nbsp;&nbsp;在百度上输入“和服”搜索网页，总共结果为287,000条，前20条结果中有6条与和服一点关系都没有。在第一页有以下错误：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“福建省晋江市恒和服装有限公司系独资企业”<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“关于商品和服务实行明码标价的规定”<br/>&nbsp;&nbsp;&nbsp;&nbsp;“青岛东和服装设备”<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这次搜索引擎结果中的错误，就是由于分词的不准确所造成的。通过笔者的了解，Google的中文分词技术采用的是美国一家名叫Basis&nbsp;Technology（<a href="http://www.basistech.com" target="_blank">http://www.basistech.com</a>）的公司提供的中文分词技术，百度使用的是自己公司开发的分词技术。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=76</link>
			<title><![CDATA[搜索引擎之排序技术分析]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,15 Oct 2008 17:25:38 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=76</guid>	
		<description><![CDATA[什么是排序技术<br/><br/>所谓的排序技术，我们可以简单的理解为曝光率，谁出现的次数最多，谁排在前面。要谈到排序技术，就不得不说Google的PageRank，而提到PageRank，则我们需要先来了解一下一种称为HillTop的排序算法。<br/><br/><br/>PageRank技术：通过对由超过&nbsp;50,000&nbsp;万个变量和&nbsp;20&nbsp;亿个词汇组成的方程进行计算，PageRank能够对网页的重要性做出客观的评价。PageRank&nbsp;并不计算直接链接的数量，而是将从网页&nbsp;A&nbsp;指向网页&nbsp;B&nbsp;的链接解释为由网页&nbsp;A&nbsp;对网页B&nbsp;所投的一票。这样，PageRank&nbsp;会根据网页&nbsp;B&nbsp;所收到的投票数量来评估该页的重要性。&nbsp;<br/><br/>PageRank的思想，链接的重要度整体加重了网站的权重，而网站的权重又反过来影响内部链接的排名。而HillTop算法（也被称为“专家系统”，由Krishna&nbsp;Bharat和George&nbsp;A.&nbsp;Mihaila提出），则是以Dan&nbsp;Thiesw为首的TSPR(Topic-Sensitive-PageRank：主题性页面级别技术)理论。相比PageRank算法，HillTop更强调了内容的相关性，也就是我们常说的“粘性”，“黏度”，而非网站权重，这样避免了可能转贴的权重较高的站点（比如门户站点）比原创作者站点排名还要靠前的问题。那么，到底<br/><br/>什么是Hilltop算法&nbsp;<br/><br/>Bharat提出：在利用”页面等级”来寻找”权威”网页时，不应单纯依赖于值的大小来定夺，而应将重点放在它与查询主题的相关性上；即不但需要考虑网页的页面等级，还要考虑该网页的页面等级与查询主题的相关性是否相称。若一个网页只与查询主题只沾点边，那么即使其页面等级非常之高，对用户来说也是没有意义的。如此一来，于网页而言，那些来自于”相关主题”的文档的链接就更有意义了&nbsp;(Bharat称这种”相关主题”文档为”专家文档”)，一个网页的所有外部”专家文档”链接构成了该网页的”权威性值”。Hilltop算法的意义在于：相同主题网站之间的链接应比非相关网站的链接具有更高的价值。&nbsp;<br/><br/>其实GOOLE早在几年前已经开始混合使用HiilTop和PageRank算法共同确定搜索结果排名了，通过HiilTop的方法，计算来自描述相同主题的相关文档的链接对于搜索者的价值会更大（即相同主题网站之间的链接比不相关网站的链接价值要更大），正是由于HiilTop的影响，这也是我们看到即使各项指标（被收录链接数量，反向链接，访问量等）都非常不错的门户类网站PR很难达到7以上，而专业性的站点却非常容易就达到7，甚至有一大批的都达到了9（注：这里的PR指的是Google综合结果通过Google&nbsp;工具条显示的结果，而并非上面的PageRank值）。<br/><br/>Hilltop算法的不足&nbsp;<br/><br/>●Hilltop的前提是每个专家文件都是完全公正的，且无欺骗和人工操纵成分。专家文件的一个小小污点就可以对排名产生极大的负面影响。&nbsp;<br/><br/>●运行Hilltop算法需要大量的计算机处理能力，像Google的成千上万台服务器集群可以轻松的实现，但是对于一般的企业级用户，服务器就未必具有这样的处理能力。&nbsp;<br/><br/>排名所采用的相关技术&nbsp;<br/><br/>●词干技术(stemming)&nbsp;<br/><br/>Google等各搜索引擎中，目前都已经采用了词干技术(stemming)&nbsp;。最早的搜索引擎，如果搜索一个单数查询条件如”live”，则搜索结果中不会出现如”lives”，”living”这样的关键词变化形式，反之亦然。对于搜索引擎的用户来说，这种特性是一件好事情，因为搜索提供的结果更多了，但站在搜索引擎商业用户来说，那就意味着需要多购买一些关键词，这个也体现了技术的进步在商业中的价值。&nbsp;<br/><br/>●拼写纠错&nbsp;<br/><br/>拼写检查和上面的词干技术一样，也已经被应用于搜索结果中。例如，当输入查询条件为”Search&nbsp;Engine&nbsp;Optimisation”后，以往Google只会提示你是否是要找”Search&nbsp;Engine&nbsp;Optimization”，但显示的还是符合”Optimisation”的搜索结果。不过现在则能看到”Optimization”的搜索结果。&nbsp;<br/><br/>这两项处理其实都是在分词阶段完成的。&nbsp;&nbsp;<br/><br/>排名的商业价值<br/><br/>排名在商业中的价值，在互联网蓬勃发展的今天，已经得到了充分的体现。2003年Google大规模调整算法的时候就引来了种种传言和猜测&nbsp;：&nbsp;<br/><br/>开始使用词典对号入座；&nbsp;<br/>意图施压使商业站点使用Adwords广告服务；&nbsp;<br/>开始使用”基于贝叶斯定理的SPAM过滤系统”&nbsp;；&nbsp;<br/>开始处罚互惠链接，”优化”网页，或”链接文本”&nbsp;；&nbsp;<br/>众多猜测中，”Google意图施压使商业站点使用Adwords广告服务”显然占了上风。许多搜索引擎优化分析家都认为：Google通过一个保密的过滤系统”黑名单”来对商业网站进行筛选，从而达到上述目的。虽然这都紧紧是一些猜测，但是这样的传言和猜测，恰恰反应了排名的重要商业价值。<br/>参考资料：<br/>・The&nbsp;Google&nbsp;Hilltop&nbsp;Algorithm<br/><a href="http://www.rankforsales.com/search-engine-algorithms/google-hilltop-algorithm.html" target="_blank">http://www.rankforsales.com/search-engine-algorithms/google-hilltop-algorithm.html</a><br/>・Hilltop:&nbsp;A&nbsp;Search&nbsp;Engine&nbsp;based&nbsp;on&nbsp;Expert&nbsp;Documents<br/><a href="ftp://ftp.cs.toronto.edu/pub/reports/csri/405/hilltop.html" target="_blank">ftp://ftp.cs.toronto.edu/pub/reports/csri/405/hilltop.html</a>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=66</link>
			<title><![CDATA[Oracle9i的全文检索技术]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,15 Oct 2008 14:52:20 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=66</guid>	
		<description><![CDATA[Oracle9i的全文检索技术<br/><br/>　　4&nbsp;为文本建立索引<br/><br/>　　文本装入文本列后，就可以创建Oracle&nbsp;Text索引。文档以许多不同方案、格式和语言存储。因此，每个&nbsp;o&#114;acle&nbsp;Text&nbsp;索引有许多需要设置的选项，以针对特定情况配置索引。创建索引时，Oracle&nbsp;Text可使用若干个默认值，但在大多数情况下要求用户通过指定首选项来配置索引。<br/><br/>　　每个索引的许多选项组成功能组，称为&#34;类&#34;，每个类集中体现配置的某一方面，可以认为这些类就是与文档数据库有关的一些问题。例如：数据存储、过滤器、词法分析器、相关词表、存储等。<br/><br/>　　每个类具有许多预定义的行为，称之为对象。每个对象是类问题可能具有的答案，并且大多数对象都包含有属性。通过属性来定制对象，从而使对索引的配置更加多变以适应于不同的应用。<br/><br/>　　（1）存储（Storage）类<br/><br/>　　存储类指定构成Oracle&nbsp;Text索引的数据库表和索引的表空间参数和创建参数。它仅有一个基本对象：BASIC_STORAGE，其属性包括：I_Index_Clause、I_Table_Clause、K_Table_Clause、N_Table_Clause、P_Table_Clause、R_Table_Clause。<br/><br/>　　（2）数据存储（Datastore）类<br/><br/>　　数据存储：关于列中存储文本的位置和其他信息。默认情况下，文本直接存储到列中，表中的每行都表示一个单独的完整文档。其他数据存储位置包括存储在单独文件中或以其&nbsp;URL&nbsp;标识的&nbsp;Web&nbsp;页上。七个基本对象包括：Default_Datastore、Detail_Datastore、Direct_Datastore、File_Datastore、Multi_Column_Datastore&nbsp;、URL_Datastore、User_Datastore，。<br/><br/>　　（3）文档段组（Section&nbsp;Group）类<br/><br/>　　文档段组是用于指定一组文档段的对象。必须先定义文档段，然后才能使用索引通过&nbsp;WITHIN&nbsp;运算符在文档段内进行查询。文档段定义为文档段组的一部分。包含七个基本对象：AUTO_SECTION_GROUP、BASIC_SECTION_GROUP、HTML_SECTION_GROUP、NEWS_SECTION_GROUP、NULL_SECTION_GROUP、XML_SECTION_GROUP、PATH_SECTION_GROUP。<br/><br/>　　（4）相关词表（Wordlist）类<br/><br/>　　相关词表标识用于索引的词干和模糊匹配查询选项的语言，只有一个基本对象BASIC_WORDLIST，其属性有：Fuzzy_Match、Fuzzy_Numresults、Fuzzy_Score、Stemmer、Substring_Index、Wildcard_Maxterms、Prefix_Index、Prefix_Max_Length、Prefix_Min_Length。<br/><br/>　　（5）索引集（Index&nbsp;Set）<br/><br/>　　索引集是一个或多个Oracle&nbsp;索引&nbsp;(不是Oracle&nbsp;Text索引)&nbsp;的集合，用于创建&nbsp;CTXCAT类型的Oracle&nbsp;Text索引，只有一个基本对象BASIC_INDEX_SET。<br/><br/>　　（6）词法分析器（Lexer）类<br/><br/>　　词法分析器类标识文本使用的语言，还确定在文本中如何标识标记。默认的词法分析器是英语或其他西欧语言，用空格、标准标点和非字母数字字符标识标记，同时禁用大小写。包含8个基本对象：BASIC_LEXER、CHINESE_LEXER、CHINESE_VGRAM_LEXER、JAPANESE_LEXER、JAPANESE_VGRAM_LEXER、KOREAN_LEXER、KOREAN__MORPH_&nbsp;LEXER、MULTI_LEXER。<br/><br/>　　（7）过滤器（Filter）类<br/><br/>　　过滤器确定如何过滤文本以建立索引。可以使用过滤器对文字处理器处理的文档、格式化的文档、纯文本和&nbsp;HTML&nbsp;文档建立索引，包括5个基本对象：CHARSET_FILTER、INSO_FILTER&nbsp;INSO、NULL_FILTER、PROCEDURE_FILTER、USER_FILTER。<br/><br/>　　（8）非索引字表（Stoplist）类<br/><br/>　　非索引字表类是用以指定一组不编入索引的单词&nbsp;(称为非索引字)。有两个基本对象：BASIC_STOPLIST&nbsp;(一种语言中的所有非索引字)&nbsp;、&nbsp;MULTI_STOPLIST&nbsp;(包含多种语言中的非索引字的多语言非索引字表)。<br/><br/>　　5&nbsp;查询<br/><br/>　　建立了索引，就可以使用&nbsp;Sel&#101;ct&nbsp;语句中的&nbsp;CONTAINS&nbsp;运算符发出文本查询。使用&nbsp;CONTAINS&nbsp;可以进行两种查询：单词查询和ABOUT查询。<br/><br/>　　5．1&nbsp;词查询示例<br/><br/>　　词查询是对输入到&nbsp;CONTAINS&nbsp;运算符中单引号间的精确单词或短语的查询。在以下示例中，我们将查找文本列中包含&nbsp;o&#114;acle&nbsp;一词的所有文档。每行的分值由使用标签&nbsp;1&nbsp;的&nbsp;SCORE&nbsp;运算符选定：<br/><br/>Sel&#101;ct&nbsp;SCORE(1)&nbsp;title&nbsp;from&nbsp;news&nbsp;Wh&#101;re&nbsp;CONTAINS(text,&nbsp;’oracle’,&nbsp;1)&nbsp;&gt;0;<br/><br/>　　在查询表达式中，可以使用&nbsp;AND&nbsp;和&nbsp;o&#114;&nbsp;等文本运算符来获取不同结果。还可以将结构性谓词添加到&nbsp;Wh&#101;re&nbsp;子句中。可以使用&nbsp;count(*)、CTX_QUERY.COUNT_HITS&nbsp;或&nbsp;CTX_QUERY.EXPLAIN&nbsp;来计算查询的命中&nbsp;(匹配)&nbsp;数目。<br/><br/>　　5．2&nbsp;ABOUT查询示例<br/><br/>　　在所有语言中，ABOUT查询增加了某查询所返回的相关文档的数目。在英语中，ABOUT&nbsp;查询可以使用索引的主题词组件，该组件在默认情况下创建。这样，运算符将根据查询的概念返回文档，而不是仅依据所指定的精确单词或短语。例如，以下查询将查找文本列中关于主题&nbsp;politics&nbsp;的所有文档，而不是仅包含&nbsp;politics&nbsp;一词的文档：<br/><br/>Sel&#101;ct&nbsp;SCORE(1)&nbsp;title&nbsp;from&nbsp;news&nbsp;Wh&#101;re&nbsp;CONTAINS(text,&nbsp;’about(politics)’,&nbsp;1)&nbsp;&gt;0;]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=64</link>
			<title><![CDATA[完美解决Discuz 论坛大数据量的全文检索问题]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,15 Oct 2008 14:45:46 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=64</guid>	
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用Discuz的朋友一定有这样的经历,&nbsp;那就是在数据量达到一定规模时(100W以上),检索速度往往力不从心；mysqld-nt.exe这个进程占用CPU资源很大&nbsp;,经常在50以上；多人同时请求,会导致系统的瓶颈,甚至宕机。使用本身PHP&nbsp;LIKE&nbsp;MYSQL的效率实在不敢恭维；然而Discuz本身就加入了QIHOO搜索来解决这些问题，大多数用户对搜索的结果也不是很满意，靠QIHOO收录大约也得需要2-6小时，关键是自己辛苦建站流量却成QIHOO的。很多朋友希望有一个完美的解决方案，但是事实的真相是残酷的，这个完美的方案可能让你绞尽脑汁还是两手空空。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今天我给大家带来的引擎构建于J2EE平台，继承了它跨平台和安全的特性，内置的中文语言处理引擎支持从抓取的数据中自动提取关键字与自动生成摘要、采用增量采集方式，对于已经采集过的数据不会重复抓取，通过后台的配置，可以自动对于已经变动过的数据内容进行再次抓取，这并不需要太多的人工干预。然后建立系统独立的索引供用户检索；下面是我们单台服务器检索性能.<br/><br/>原文&nbsp;地址：<a href="http://hi.baidu.com/xd%5Ftech/blog/item/e614a2f8aa43ad0ad9f9fd02.html" target="_blank">http://hi.baidu.com/xd%5Ftech/blog/item/e614a2f8aa43ad0ad9f9fd02.html</a>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=62</link>
			<title><![CDATA[使用站内检索的五大理由]]></title>
			<author>jaddy0302@126.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,07 Dec 2007 13:35:03 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=62</guid>	
		<description><![CDATA[<font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本文主要介绍站内检索对internet网站的五大作用：所寻即所得；了解访问者的意图；符合网民的习惯；提升网站信息的价值；身份的象征。最后介绍目前的网际搜索引擎不能替代站内检索的原因。<br /></font>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times=""></span>&nbsp;</p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">自从有了计算机以后，人类开始用计算机保存信息，有保存，就有查找，于是检索技术诞生了。文本检索技术的发展从最初的</span><span lang="EN-US"><font face="Times New Roman">SMART</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">文档检索系统</span><span lang="EN-US"><font face="Times New Roman">[1]</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">到</span><span lang="EN-US"><font face="Times New Roman">Altavista</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">搜索引擎，到现在的搜索巨头</span><span lang="EN-US"><font face="Times New Roman">Google[2]</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">，其发展可谓日新月异、与时具进，人们开始习惯互联网的搜索时代，站内检索的需求也逐渐显露出来。下面列举需要站内检索的五大理由：</span></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times=""></span>&nbsp;</p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"><span lang="EN-US" style="mso-bidi-font-family: 宋体"><span style="mso-list: Ignore"><font face="Times New Roman">一、</font></span></span><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 11.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">所寻即所得</span></b><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">。</span></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">信息量总在不断增长，而访问者的耐心却逐渐下降。据统计，每需要多点击一次鼠标，就有三分之一的用户选择放弃。这意味着</span><span lang="EN-US"><font face="Times New Roman">100</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">个访问者进入我们的网站，如果需要点击</span><span lang="EN-US"><font face="Times New Roman">三</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">次鼠标才能找到所需要的东西，那么就只剩下不到</span><span lang="EN-US"><font face="Times New Roman">4</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">个人了。根据第十一次中国互联网信息调查表明，</span><span lang="EN-US"><font face="Times New Roman">53.1%</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">的人上网是为了获取信息</span><span lang="EN-US"><font face="Times New Roman">[3]</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">，大部分网站的目的是让外界了解自己，了解的人越多，效果就越好。把访问者最想要的返回给用户，就可让更多的用户了解自己，这样站内检索成为必然选择。</span></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times=""></span>&nbsp;</p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 11.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">二、了解访问者的意图。</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 11.5pt; mso-bidi-font-size: 12.0pt">
<p>&nbsp;</p>
</span></b></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">管理大师彼得</span><span lang="EN-US"><font face="Times New Roman">.</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">德鲁克说：&ldquo;一定要知道你的客户想要什么？&rdquo;客户的需求永远都是最重要的，因此我们总在分析我们的客户在哪里及他们需要什么。所有访问我们网站的人都可能是我们的潜在客户，了解他们的意图对于我们做决策很重要。站内检索技术可以实现这个功能，站内检索的日志功能可以记录每个访问者的检索词和检索结果，这是访问者意图的最直接的表现。通过分析这些信息，我们还可以调整网站结构，把访问者最想要的放在明显的位置（了解我们的人就多啦）。这个理由经常被人忽视，我在这里放在第二位也是希望引起大家重视，特别是那些已经使用站内检索的网站所有者。</span></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times=""></span>&nbsp;</p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 23.25pt; TEXT-INDENT: -23.25pt; mso-list: l1 level1 lfo2; tab-stops: list 23.25pt"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 11.5pt; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt"><span style="mso-list: Ignore"><font face="Times New Roman">三、<span style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal" new="" times="">&nbsp; </span></font></span></span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 11.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">符合网民习惯。</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 11.5pt; mso-bidi-font-size: 12.0pt">
<p>&nbsp;</p>
</span></b></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">根据调查表明，</span><span lang="EN-US"><font face="Times New Roman">68.3</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">％的上网者经常使用搜索引擎[3]。大部分人已经习惯通过检索来找到他们想要的东西，而不是按照某个栏目一级一级往下找(我就很少用yahoo的分类目录）。在网站内访问者要是没看见那熟悉的按钮会多少有些不习惯（我们千万不要让上帝感到不习惯）。在心理学角度讲，人们如果对某个事物不习惯很容易产生厌烦情绪，这也就是为什么你第一次去某个地方会觉得特别远，要是路熟了这种感觉就消失了。看来，为了上帝我们也需要使用站内检索。</span></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times=""></span>&nbsp;</p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 23.25pt; TEXT-INDENT: -23.25pt; mso-list: l1 level1 lfo2; tab-stops: list 23.25pt"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 11.5pt; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt"><span style="mso-list: Ignore"><font face="Times New Roman">四、<span style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal" new="" times="">&nbsp; </span></font></span></span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 11.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">提升网站信息价值。</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 11.5pt; mso-bidi-font-size: 12.0pt">
<p>&nbsp;</p>
</span></b></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">我们经常会发生这样的事情：明明记得有一篇写关于吃香辣虾的文件，就是想不起存放在什么地方了。访问者也有类似困扰，只记得某个网站上说了关于张国荣跳楼的消息，但不知道具体的链接在哪里。另外，要是隐藏在目录很深的</span><span lang="EN-US"><font face="Times New Roman">html</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">文档可能自从网站建立到整个网站关闭也没有一个人看过，这些都不是我们所想要的。站内检索毫无疑问可以解决上述问题。同时，按照一个主题把所有相关文档提供给访问者，可以让访问者更全面的了解他所想要的东西，这增加了网站信息间的组织性和逻辑性，方便了访问者的使用，提升用户体验度（用户体验度：一个让我们忐忑不安的名词）。</span></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times=""></span>&nbsp;</p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 23.25pt; TEXT-INDENT: -23.25pt; mso-list: l1 level1 lfo2; tab-stops: list 23.25pt"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 11.5pt; mso-bidi-font-family: 宋体; mso-bidi-font-size: 12.0pt"><span style="mso-list: Ignore"><font face="Times New Roman">五、<span style="FONT-WEIGHT: normal; FONT-SIZE: 7pt; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal" new="" times=""> </span></font></span></span></b><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 11.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">身份的象征。</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 11.5pt; mso-bidi-font-size: 12.0pt">
<p>&nbsp;</p>
</span></b></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">有没有站内检索其实已经不只是用户体验度的问题了，还是一个网站专业身份的象征。浏览国外公司的网站，会发现几乎所有网站都在首页最明显的区域放置了一个搜索框，这传达的信息是：专业的网站都有站内检索（呵呵，我没说国外网站就是专业网站）。网民的心态是：我用不用，你管不着，你要是没有就说明你不够专业。为了树立形象，也需要使用站内检索。</span></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 21pt"><span lang="EN-US">
<p><font face="Times New Roman">&nbsp;</font></p>
</span></p>
<br />
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">最后还得解释一个问题：为什么有了搜索引擎还需要站内检索？用网际搜索引擎不是直接可以查到吗？这其中有两个问题：</span><span lang="EN-US"><font face="Times New Roman">1 </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">搜索羽毛球，你会搜索到</span><span lang="EN-US"><font face="Times New Roman">235,000</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">个网页</span><span lang="EN-US"><font face="Times New Roman">[4]</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">，也不知道我公司的排在第</span><span lang="EN-US"><font face="Times New Roman">10,000</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">页还是</span><span lang="EN-US"><font face="Times New Roman">10,001</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">页，搜索者可能永远也不会去看。</span><span lang="EN-US"><font face="Times New Roman">2 </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">搜索引擎通过网络</span><span lang="EN-US"><font face="Times New Roman">Spider</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: " new="" times="">收集网页，对于网站内隐藏很深的网页很难索引到的。</span></p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=61</link>
			<title><![CDATA[站内搜索引擎之比较〔转〕]]></title>
			<author>jaddy0302@126.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,07 Dec 2007 12:02:43 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=61</guid>	
		<description><![CDATA[<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td style="PADDING-LEFT: 15px; HEIGHT: 25px">关键词：<a href="http://www.xd-tech.com.cn/insitesepro.html">站内搜索</a> </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 20px; PADDING-LEFT: 15px; LINE-HEIGHT: 17px" valign="top" height="300">
            <p><br />&nbsp;&nbsp;&nbsp;&nbsp; 有很多网站都在网页上加个&ldquo;站内搜索引擎&rdquo;、&ldquo;搜索引擎&rdquo;、&ldquo;全文检索&rdquo;等等相关字样。<br />&nbsp;&nbsp;&nbsp;&nbsp; 用户一用，结果发现，既不能多关键组合查询，也不能支持国际语法，甚至不能支持全文检索，就更别谈不支持相关性排序等真正的搜索引擎具备的功能了。这些搜索和真正的站内搜索引擎有和区别呢？<br />&nbsp;&nbsp;&nbsp;&nbsp; 真正的全文检索应具备 相关性排序技术 和 分词索引功能。 如果需要进行互联网的信息抓取和采集那么还需要网络蜘蛛模块。 分词、索引、排序这是全文检索的基本和核心，缺一不可。全文检索至少需要具备中文分词、索引、相关性排序功能。<br />&nbsp;&nbsp;&nbsp;&nbsp; 所以简单考查一个站内搜索引擎的真伪只需要知道：能否实现相关性排序、国际标准的搜索语法、动态摘要、飘红、支持海量数据多并快速发查询、搜索耗时极短。<br />（当然这只是全文检索的基本内容，一个全文检索的搜索引擎的品质好坏还和相关的技术水平、各种技术的结合、产品的管理有很大关系。 评价全文检索的标准是用户体验度，今后我们会提供相关方面的内容）</p>
            <br />
            <p><strong>常用的站内搜索技术比较： </strong></p>
            <br />
            <table style="BORDER-COLLAPSE: collapse" bordercolor="#999999" cellpadding="2" width="700" border="1">
                <tbody>
                    <tr>
                        <td width="89">　</td>
                        <td width="145"><b>基于数据库的搜索</b></td>
                        <td width="218"><b>基于spider抓取的站内搜索</b></td>
                        <td width="243"><b>全文检索者站内搜索软件系统</b></td>
                    </tr>
                    <tr>
                        <td width="89"><b>原理 </b></td>
                        <td width="145">数据库搜索</td>
                        <td width="218">通过Spider抓取网页，经html解析，分词，索引实现网页式站内搜索。</td>
                        <td width="243">对数据库数据进行html解析、图片缩略，分词，索引，实现站内搜索。</td>
                    </tr>
                    <tr>
                        <td width="89"><b>检索效率</b></td>
                        <td width="145">非常低下 消耗大量硬件资源</td>
                        <td width="218">高效</td>
                        <td width="243">高效</td>
                    </tr>
                    <tr>
                        <td width="89"><b>检索范围</b></td>
                        <td width="145">无法完成全文检索（可以用sql的单字索引功能最简单的完成索引功能实现最低级的全文检索），只能进行标题检索。 数据库效率太低，无法开展各种附加功能。</td>
                        <td width="218">网页检索 优点：不需要做各种工作，直接即可使用 缺点： 1.有大量的不必要的信息影响搜索结果的排序和显示的效果。严重影响精确度。 2.部分页面无法抓取到。 3.用户对搜索范围和内容以及体现的结果无法精确控制</td>
                        <td width="243">标题＋内容 基于内容分析的排序方法。基于内容分析排序是最佳的排序方法。 标题和内容可控制，搜索结果准确到位。 内容可控，用户可对搜索的内容范围和体现的结果进行精确的控制</td>
                    </tr>
                    <tr>
                        <td width="89"><b>检索语法</b></td>
                        <td width="145">无</td>
                        <td width="218">支持标准的国际搜索语法。</td>
                        <td width="243">支持标准的国际搜索语法。</td>
                    </tr>
                    <tr>
                        <td width="89"><b>动态摘要</b></td>
                        <td width="145">无</td>
                        <td width="218">摘要内容不清晰各种垃圾信息过多</td>
                        <td width="243">提供动态摘要，摘要清晰精确，便于用户快速寻找到需要的信息。</td>
                    </tr>
                    <tr>
                        <td width="89"><b>关键词飘红</b></td>
                        <td width="145">无</td>
                        <td width="218">有</td>
                        <td width="243">有</td>
                    </tr>
                    <tr>
                        <td width="89"><b>内容的范围</b></td>
                        <td width="145">可控制</td>
                        <td width="218">不可有效控制，动态网页抓取效果不佳，没有链接的网页无法抓取，页面出现杂乱信息影响搜索结果。对于时间控制也无法做到精准，对于栏目的归属无法做到准确。</td>
                        <td width="243">可有效控制，您可以把多个字段拆分合并，可以确定那些需要，哪些不需要。所有动态网页和没有链接的网页均可有效收入。 栏目控制精准。</td>
                    </tr>
                    <tr>
                        <td width="89"><b>图片缩略</b></td>
                        <td width="145">无</td>
                        <td width="218">无</td>
                        <td width="243">有</td>
                    </tr>
                    <tr>
                        <td width="89"><b>同义词</b></td>
                        <td width="145">无</td>
                        <td width="218">无</td>
                        <td width="243">有</td>
                    </tr>
                    <tr>
                        <td width="89"><b>相关性排序</b></td>
                        <td width="145">无</td>
                        <td width="218">有</td>
                        <td width="243">有</td>
                    </tr>
                    <tr>
                        <td width="89"><b>其他</b></td>
                        <td width="145">低效率低质量的平台无法开展增值服务</td>
                        <td width="218">二次研发成本高</td>
                        <td width="243">具有持续不断的升级能力和良好的售后服务。</td>
                    </tr>
                    <tr>
                        <td width="89"><b>成本</b></td>
                        <td width="145">低</td>
                        <td width="218">价格高 </td>
                        <td width="243">以产品形式运作，多家客户分摊成本，成本相对低廉。运维成本低。 </td>
                    </tr>
                    <tr>
                        <td width="89"><b>维护成本</b></td>
                        <td width="145">&nbsp;不大 </td>
                        <td width="218">维护量不大。</td>
                        <td width="243">程序维护无须投入，但是需要进行一定量的内容维护。 经过简单培训即可胜任。</td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=60</link>
			<title><![CDATA[Windows 下运行Hadoop的脚本]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,10 Oct 2007 22:22:27 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=60</guid>	
		<description><![CDATA[<p>将以下文本内容存放入HADOOP_HOME\bin 目录下 ， 命名为hadoop.bat，将set HADOOP_HOME=C:\work\hadoop 修改为HADOOP存放的目录，设置一下JAVA_HOME，然后命令行进入 HADOOP_HOME\bin 目录下 ，运行 hadoop 就可以看到效果了。<br />需要注意的是 Hadoop 运行datanode 的时候，它使用了 Runtime 执行操作系统命令 df -k 来获得存储空间信息，而windows 下是不支持这个命令的，所以需要修改一下org.apache.hadoop.fs.DF.java 的 141 行左右如下：</p>
<p>&nbsp; private String[] getExecString() {<br />&nbsp;&nbsp;&nbsp; return new String[] {&quot;df&quot;,&quot;-k&quot;, dirPath};<br />&nbsp; }</p>
<p>把这个命令改掉后编译打包就OK了</p>
<p>@echo off<br />set JAVA_HEAP_MAX=&quot;-Xmx1000m&quot;<br />set JAVA=$JAVA_HOME/bin/java</p>
<p>if not &quot;%1&quot;==&quot;&quot; goto INIT else goto echoMSG<br />:echoMSG&nbsp; <br />&nbsp; echo Title:欢迎使用北京线点科技&nbsp;Hadoop 运行脚本<br />&nbsp; echo Author:jaddy0302 mail:jaddy0302@126.com QQ:5622928<br />&nbsp; echo Site:http://www.xd-tech.com.cn 线点科技 专业垂直搜索引擎产品<br />&nbsp; echo Usage: hadoop [--config confdir] COMMAND<br />&nbsp; echo where COMMAND is one of:<br />&nbsp; echo&nbsp;&nbsp; namenode -format&nbsp;&nbsp;&nbsp;&nbsp; format the DFS filesystem<br />&nbsp; echo&nbsp;&nbsp; secondarynamenode&nbsp;&nbsp;&nbsp; run the DFS secondary namenode<br />&nbsp; echo&nbsp;&nbsp; namenode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run the DFS namenode<br />&nbsp; echo&nbsp;&nbsp; datanode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run a DFS datanode<br />&nbsp; echo&nbsp;&nbsp; dfsadmin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run a DFS admin client<br />&nbsp; echo&nbsp;&nbsp; fsck&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run a DFS filesystem checking utility<br />&nbsp; echo&nbsp;&nbsp; fs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run a generic filesystem user client<br />&nbsp; echo&nbsp;&nbsp; jobtracker&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run the MapReduce job Tracker node <br />&nbsp; echo&nbsp;&nbsp; pipes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run a Pipes job<br />&nbsp; echo&nbsp;&nbsp; tasktracker&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run a MapReduce task Tracker node <br />&nbsp; echo&nbsp;&nbsp; job&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; manipulate MapReduce jobs <br />&nbsp; echo&nbsp;&nbsp; version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print the version<br />&nbsp; echo&nbsp;&nbsp; jar jar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run a jar file<br />&nbsp; echo&nbsp;&nbsp; distcp srcurl desturl copy file or directories recursively<br />&nbsp; echo&nbsp; or<br />&nbsp; echo&nbsp;&nbsp; CLASSNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run the class named CLASSNAME<br />&nbsp; echo Most commands print help when invoked w/o parameters.<br />&nbsp; goto end;<br />:INIT&nbsp; <br />&nbsp; set HADOOP_HOME=C:\work\hadoop<br />&nbsp; if &quot;%HADOOP_HOME%&quot;==&quot;&quot; set HADOOP_HOME=..&nbsp; <br />&nbsp; set CLASSPATH=%HADOOP_HOME%;%HADOOP_HOME%\conf;%JAVA_HOME%/lib/tools.jar;<br />&nbsp; set HADOOP_LOG_DIR=%HADOOP_HOME%/logs<br />&nbsp; set HADOOP_LOGFILE=hadoop.log<br />&nbsp; @echo @echo off&gt;setclasspath.bat<br />&nbsp; for %%i in (%HADOOP_HOME%\hadoop-*.jar) do @echo set CLASSPATH=%%CLASSPATH%%%%i&gt;&gt;setclasspath.bat;<br />&nbsp; for %%i in (%HADOOP_HOME%\lib\*.jar) do @echo set CLASSPATH=%%CLASSPATH%%%%i&gt;&gt;setclasspath.bat;<br />&nbsp; for %%i in (%HADOOP_HOME%\lib\jetty-ext\*.jar) do @echo set CLASSPATH=%%CLASSPATH%%%%i&gt;&gt;setclasspath.bat;<br />&nbsp; goto EXEC<br />:EXEC<br />&nbsp; call setclasspath.bat<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;namenode&quot; set CLASS=org.apache.hadoop.dfs.NameNode<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;secondarynamenode&quot; set CLASS=org.apache.hadoop.dfs.SecondaryNameNode<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;datanode&quot; set&nbsp; CLASS=org.apache.hadoop.dfs.DataNode<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;fs&quot; set&nbsp; CLASS=org.apache.hadoop.fs.FsShell<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;dfs&quot; set&nbsp; CLASS=org.apache.hadoop.fs.FsShell<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;dfsadmin&quot; set&nbsp; CLASS=org.apache.hadoop.dfs.DFSAdmin<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;fsck&quot; set&nbsp; CLASS=org.apache.hadoop.dfs.DFSck<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;jobtracker&quot; set&nbsp; CLASS=org.apache.hadoop.mapred.JobTracker<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;tasktracker&quot; set&nbsp; CLASS=org.apache.hadoop.mapred.TaskTracker<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;job&quot; set&nbsp; CLASS=org.apache.hadoop.mapred.JobClient<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;pipes&quot; set&nbsp; CLASS=org.apache.hadoop.mapred.pipes.Submitter<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;version&quot; set&nbsp; CLASS=org.apache.hadoop.util.VersionInfo<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;jar&quot; set&nbsp; CLASS=org.apache.hadoop.util.RunJar<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;distcp&quot; set&nbsp; CLASS=org.apache.hadoop.util.CopyFiles<br />goto SPLI<br />:SPLI<br />&nbsp; set HADOOP_OPTS=<br />&nbsp; set HADOOP_OPTS=%HADOOP_OPTS% -Dhadoop.log.dir=%HADOOP_LOG_DIR%<br />&nbsp; set HADOOP_OPTS=%HADOOP_OPTS% -Dhadoop.log.file=%HADOOP_LOGFILE%<br />&nbsp; set HADOOP_OPTS=%HADOOP_OPTS% -Dhadoop.home.dir=%HADOOP_HOME%<br />&nbsp; set HADOOP_OPTS=%HADOOP_OPTS% -Dhadoop.id.str=%HADOOP_IDENT_STRING%<br />&nbsp; call &quot;%JAVA_HOME%\bin\java&quot; %JAVA_HEAP_MAX% %HADOOP_OPTS% -classpath &quot;%CLASSPATH%&quot; %CLASS% %2 %3 %4 %5 %6 %7 %8 %9<br />&nbsp; rem if &quot;%ERRORLEVEL%&quot; == &quot;1&quot; goto SPLI else goto end&nbsp; <br />:end<br /></p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=59</link>
			<title><![CDATA[网络语料正文的识别/抽取规则 标签密度判定法]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,08 Aug 2007 16:57:05 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=59</guid>	
		<description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在确定了对不同的</span><span lang="EN-US"><font face="Times New Roman">URL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行的不同的操作之后，自然就进入到了本软件的核心部分：如何判定</span><span lang="EN-US"><font face="Times New Roman">HTML</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">源码中，哪一部分是正文。只有确定了正文部分，才能够确定操作集中的对象，才能够进行抽取。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在各种网络文本中，最容易获得的，就是网络新闻之类。这类文章，甚至包括很多的非新闻类的网上文章，特点都是具有一个标题，这个标题一般会放在正文开头在</span><span lang="EN-US"><font face="Times New Roman">&lt;h1&gt; &lt;/h1&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签中，有些网站也会放在</span><span lang="EN-US"><font face="Times New Roman">&lt;title&gt; &lt;/title&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签中；另外，在一般的网上文章中，正文往往都是用</span><span lang="EN-US"><font face="Times New Roman">&lt;p&gt; &lt;/p&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来进行段落划分。同时，正文成分在网页源代码中，分布往往较为集中。因此，本文提出一种正文判定法则，即标签密度判定法，即，首先判断一个</span><span lang="EN-US"><font face="Times New Roman">&lt;p&gt; &lt;/p&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码块中的标签密度，如果低于某一阈值，就认为其标签含量很低，是正文的可能性就比较大。下面举两个例子来论证标签密度是否能成为判定正文的标准：代码片段</span><span lang="EN-US"><font face="Times New Roman">A</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是一篇新闻网页的源码中，正文部分的</span><span lang="EN-US"><font face="Times New Roman">Fragment</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，而代码片段</span><span lang="EN-US"><font face="Times New Roman">B</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则是非正文部分的</span><span lang="EN-US"><font face="Times New Roman">Fragment</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。这两段网页源代码，是随机地从某一搜索引擎结果集中抽取的，因而具有相当的代表性：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><span lang="EN-US">
<p><font face="Times New Roman" size="3">&nbsp;</font></p>
</span></p>
<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="568">
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman">&lt;P&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　对于吉林石化爆炸污染松花江水源的说法，吉林省委宣传部表示目前还没有听说这个情况。吉林市市委宣传处一位人士更是表示，由于哈尔滨处于松花江下游，哈尔滨多年来一直抓住水指标的问题，作水污染的文章，这次停水是否因为吉林石化爆炸所导致还不好说。他告诉记者，自</span><chsdate w:st="on" isrocdate="False" islunardate="False" day="14" month="11" year="2006"><chsdate w:st="on" isrocdate="False" islunardate="False" day="14" month="11" year="2006"><span lang="EN-US"><font face="Times New Roman">11</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">月</span><span lang="EN-US"><font face="Times New Roman">14</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">日</span></chsdate><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下午</span></chsdate><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开始，吉林市松花江江北在恢复供水后一直保持正常。</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font face="Times New Roman" size="3">&lt;/P&gt;</font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman">&lt;P&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">　　吉林石化方面人士强调，爆炸产生的是二氧化碳和水，绝对不会污染到水源，而吉林石化也有自己的污水处理厂，不合格的污水是不会排放到松花江的。本报记者翟宇许</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">金晶王婷婷</span><font face="Times New Roman"> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发自哈尔滨</span><font face="Times New Roman"> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">北京</span><span lang="EN-US"><font face="Times New Roman">&lt;A href=&quot;http://weather.qq.com/preend.htm?dc80.htm&quot; </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman">target=_blank&gt; &lt;IMG alt=</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">点击查看北京及更多城市天气预报</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font face="Times New Roman" size="3">src=&quot;http://weather.qq.com/images/endnew/weather_icon.gif&quot; </font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font face="Times New Roman" size="3">border=0&gt; &lt;/A&gt; &lt;/P&gt;</font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
            <p><font face="Times New Roman" size="3">&nbsp;</font></p>
            </span></p>
            </td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图</span><span lang="EN-US" style="FONT-SIZE: 9pt"><font face="Times New Roman">3-1 </font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码片段</span><span lang="EN-US" style="FONT-SIZE: 9pt"><font face="Times New Roman">A</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，从某</span><span lang="EN-US" style="FONT-SIZE: 9pt"><font face="Times New Roman">HTML</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">页面源文件中摘取的片断</span><span lang="EN-US" style="FONT-SIZE: 9pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span lang="EN-US" style="FONT-SIZE: 9pt">
<p><font face="Times New Roman">&nbsp;</font></p>
</span></p>
<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="568">
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt; TEXT-ALIGN: left; mso-char-indent-count: 1.0; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman">&lt;DD class=&quot;nadlinkB<span style="mso-spacerun: yes">&nbsp; </span>marginupdown&quot;&gt; &lt;!--</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">广告</span><span lang="EN-US"><font face="Times New Roman"> --&gt;</font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>&lt;DD class=focus&gt;</font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>&lt;DIV class=&quot;focustit px14&quot;&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">焦点关注</span><span lang="EN-US"><font face="Times New Roman"> &lt;/DIV&gt;</font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>&lt;DD class=foucscnt&gt;</font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>&lt;DIV class=foucscnt1&gt; &lt;A href=&quot;http://news.qq.com/a/20051124/000309.htm&quot; </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>target=new&gt; &lt;IMG class=marginupdown height=88 alt=&quot;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">交友广告在高校派发</span><font face="Times New Roman"> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">寻伊启事专盯单身美女</span><span lang="EN-US"><font face="Times New Roman">&quot; </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>src=&quot;http://img1.qq.com/news/20051124/2719358.jpg&quot; width=130 </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>border=1&gt; &lt;/A&gt; &lt;BR&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">交友广告专盯单身美女</span><span lang="EN-US"><font face="Times New Roman">&lt;BR&gt; &lt;BR&gt; &lt;A </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>href=&quot;http://ent.qq.com/a/20051124/000048.htm&quot; target=new&gt; &lt;IMG </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>class=<span style="Z-INDEX: 1; POSITION: absolute; mso-ignore: vglayout">&nbsp;</span>marginupdown height=88 src=&quot;http://img1.qq.com/ent/20051124/2720851.jpg&quot; </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>width=130 border=0&gt; &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">怀孕王菲遭媒体&ldquo;围堵&rdquo;</span><span lang="EN-US"><font face="Times New Roman">&lt;BR&gt; &lt;/DIV&gt;</font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>&lt;DIV class=foucscnt2&gt; &middot; &lt;A href=&quot;http://news.qq.com/a/20051120/000704.htm&quot; </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><shapetype id="_x0000_t202" path="m,l,21600r21600,l21600,xe" o:spt="202" coordsize="21600,21600"><stroke joinstyle="miter"></stroke>
            <path o:connecttype="rect" gradientshapeok="t"></path>
            </shapetype><shape id="_x0000_s1026" style="MARGIN-TOP: -16.1pt; Z-INDEX: 1; MARGIN-LEFT: 1in; WIDTH: 4in; POSITION: absolute; HEIGHT: 23.35pt" type="#_x0000_t202" stroked="f" filled="f"><textbox style="mso-next-textbox: #_x0000_s1026"><font face="Times New Roman" size="3"></font></textbox></shape><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>target=_blank&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">小泉谈中日关系</span><font face="Times New Roman"> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">称不担心中日交恶</span><span lang="EN-US"><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图</span><span lang="EN-US"><font face="Times New Roman">) &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>href=&quot;http://news.qq.com/a/20051119/000757.htm&quot; target=_blank&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">戒毒所警察强奸女生被判</span><span lang="EN-US"><font face="Times New Roman">10</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">年</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不服判决</span><span lang="EN-US"><font face="Times New Roman"> &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A href=&quot;http://news.qq.com/a/20051118/001595.htm&quot; </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>target=_blank&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">甘肃省委宣传部原副部长石星光遇害</span><span lang="EN-US"><font face="Times New Roman">&lt; /A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>href=&quot;http://news.qq.com/a/20051116/001154.htm&quot; target=_blank&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">按下劫警键五分钟获救</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">新版</span><span lang="EN-US"><font face="Times New Roman">GPS</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">救下的姐命</span><span lang="EN-US"><font face="Times New Roman"> &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A href=&quot;http://news.qq.com/a/20051110/001447.htm&quot; </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>target=new&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">全国中小学后勤工作论坛上鼾声一片</span><span lang="EN-US"><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">组图</span><span lang="EN-US"><font face="Times New Roman">) &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>href=&quot;http://news.qq.com/a/20051110/000472.htm&quot; target=_blank&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">孕妇被打流产索赔</span><span lang="EN-US"><font face="Times New Roman">81</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">万</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">被告提异议</span><span lang="EN-US"><font face="Times New Roman"> &lt;/A&gt; &lt;BR&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A href=&quot;http://news.qq.com/a/20051124/000469.htm&quot; </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>target=new&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">女子结婚</span><span lang="EN-US"><font face="Times New Roman">3</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">年未孕</span><font face="Times New Roman"> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">医院检查才知是男儿身</span><span lang="EN-US"><font face="Times New Roman"> &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>href=&quot;http://news.qq.com/a/20051124/000540.htm&quot; target=new&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">变性美女返家</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>3</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">万乡亲敲锣打鼓迎接</span><span lang="EN-US"><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图</span><span lang="EN-US"><font face="Times New Roman">) &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A href=&quot;http://news.qq.com/a/20051124/000833.htm&quot; </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>target=new&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">女教师多次性骚扰</span><span lang="EN-US"><font face="Times New Roman">14</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">岁男生被判软禁</span><span lang="EN-US"><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图</span><span lang="EN-US"><font face="Times New Roman">) &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>href=&quot;http://news.qq.com/a/20051119/000154.htm&quot; </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>target=new&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网络工程师网上散发前女友裸照</span><span lang="EN-US"><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图</span><span lang="EN-US"><font face="Times New Roman">) &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&middot;</span><span lang="EN-US"><font face="Times New Roman"> &lt;A </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>href=&quot;http://news.qq.com/a/20051110/001756.htm&quot; </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>target=new&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">丈夫迷网络色情与老婆演淫秽真人秀</span><span lang="EN-US"><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图</span><span lang="EN-US"><font face="Times New Roman">) &lt;/A&gt; &lt;BR&gt; &lt;/DIV&gt;</font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>&lt;DIV class=foucscnt3&gt; &lt;A href=&quot;http://sports.qq.com/a/20051124/000243.htm&quot; </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>target=new&gt; &lt;IMG class=marginupdown height=88 alt=</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">鲁尼偷腥事件女主角裸照</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>src=&quot;http://img1.qq.com/sports/20051124/2720121.jpg&quot; </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>width=130&gt; &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">鲁尼偷腥事件女主角裸照</span><span lang="EN-US"><font face="Times New Roman"> &lt;BR&gt; &lt;BR&gt; &lt;A </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>href=&quot;http://news.qq.com/a/20051124/001281.htm&quot; target=new&gt; &lt;IMG </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>class=marginupdown height=88 alt=&quot;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千万富豪驾宝马高校征婚</span><font face="Times New Roman"> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">传单散</span><span lang="EN-US"><font face="Times New Roman">10</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所高校</span><span lang="EN-US"><font face="Times New Roman">&quot; </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US"><font size="3"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp; </span>src=&quot;http://img1.qq.com/news/20051124/2723345.jpg&quot; width=130 </font></font></span></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 11.25pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><font size="3"><span lang="EN-US"><font face="Times New Roman">border=1&gt; &lt;/A&gt; &lt;BR&gt; </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千万富豪驾宝马高校征婚</span><span lang="EN-US"><font face="Times New Roman"> &lt;BR&gt; &lt;/DIV&gt; </font></span></font></p>
            <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><span lang="EN-US">
            <p><font face="Times New Roman" size="3">&nbsp;</font></p>
            </span></p>
            </td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">图</span><span lang="EN-US" style="FONT-SIZE: 9pt"><font face="Times New Roman">3-2 </font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码片段</span><span lang="EN-US" style="FONT-SIZE: 9pt"><font face="Times New Roman">B</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，从同一</span><span lang="EN-US" style="FONT-SIZE: 9pt"><font face="Times New Roman">HTML</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">页面源文件中摘取的片断</span><span lang="EN-US" style="FONT-SIZE: 9pt">
<p>&nbsp;</p>
</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center"><span lang="EN-US" style="FONT-SIZE: 9pt">
<p><font face="Times New Roman">&nbsp;</font></p>
</span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这代码片段</span><span lang="EN-US"><font face="Times New Roman">A</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指示的就是我们要提取的正文。如何把这样的代码，与代码段</span><span lang="EN-US"><font face="Times New Roman">B</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样的代码区分开呢？首先从语言内容角度是行不通的，目前电脑很难理解自然语言；也不能从是否是超级链接入手，前面已经说了，正文中有时也会出现不能随意整个去除的超级链接，必须判断出哪里是正文，才能对正文中的超级链接进行处理。笔者在这个问题上也曾徘徊很久，最后的突破在于寻找到了这样一个规律：正文部分的</span><span lang="EN-US"><font face="Times New Roman">HTML</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签密度，远远大于非正文部分。为了验证这个规律，我们统计分析一下上面的两个例子（</span><span lang="EN-US"><font face="Times New Roman">HTML</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签：这里指所有在</span><span lang="EN-US"><font face="Times New Roman">HTML</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">源代码中出现的，尖括号（</span><span lang="EN-US"><font face="Times New Roman">&lt;&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）中的内容，每对尖括号，连同其内容，算作一个标签，每个类似于</span><span lang="EN-US"><font face="Times New Roman">&lt;html&gt; &lt;/html&gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的两个标签，其中一个标示标签内容开始，另一个标志标签内容结束的，称为一个标签对。）：</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><em style="mso-bidi-font-style: normal"><u><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码片段</span></u></em><em style="mso-bidi-font-style: normal"><u><span lang="EN-US" style="FONT-SIZE: 14pt"><font face="Times New Roman">A</font></span></u></em><em style="mso-bidi-font-style: normal"><u><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的统计分析：</span></u></em><em style="mso-bidi-font-style: normal"><u><span lang="EN-US" style="FONT-SIZE: 14pt">
<p>&nbsp;</p>
</span></u></em></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">正文字数：</span><span lang="EN-US"><font face="Times New Roman">242</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字（正文字数：</span><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman"> </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指的是非标签的文本字数，标点符号计在内。）</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签数：</span><span lang="EN-US"><font face="Times New Roman">7</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个（标签数：只计算标签的个数，忽略标签内文本的多少。）</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 126pt; TEXT-INDENT: -126pt; mso-char-indent-count: -12.0"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签密度：</span><span lang="EN-US"><font face="Times New Roman">28.93</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千字（标签密度：指的是前面定义的标签数与正文数的商，单位规定为&ldquo;个</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千字&rdquo;，计算公式为&ldquo;标签密度</span><span lang="EN-US"><font face="Times New Roman">=1000*</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签数</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字数&rdquo;。）</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><em style="mso-bidi-font-style: normal"><u><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码片段</span></u></em><em style="mso-bidi-font-style: normal"><u><span lang="EN-US" style="FONT-SIZE: 14pt"><font face="Times New Roman">B</font></span></u></em><em style="mso-bidi-font-style: normal"><u><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的统计分析：</span></u></em><em style="mso-bidi-font-style: normal"><u><span lang="EN-US" style="FONT-SIZE: 14pt">
<p>&nbsp;</p>
</span></u></em></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">正文字数（非标签文本）：</span><span lang="EN-US"><font face="Times New Roman">221</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">字</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签数：</span><span lang="EN-US"><font face="Times New Roman">69</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签密度：</span><span lang="EN-US"><font face="Times New Roman">312.22</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千字</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">从上面的两组统计数据可以看出，网络文本源代码中，正文部分的</span><span lang="EN-US"><font face="Times New Roman">HTML</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签密度远远小于非正文部分，同时，对于更多的网络文本的统计数据分析可以知道，按照上文的方法所算出的标签密度，正文部分与非正文部分，存在着极大的差异。从而我们可以得出初步结论：可以依据对</span><span lang="EN-US"><font face="Times New Roman">HTML</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签密度的统计分析来指出在一份</span><span lang="EN-US"><font face="Times New Roman">HTML</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">源代码中，文章正文的位置。</span></font></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">于是，在对更多的文本进行类似的统计后，笔者得出一个正式的统计的结论，正文部分的</span><span lang="EN-US"><font face="Times New Roman">HTML</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标签密度大于</span><span lang="EN-US"><font face="Times New Roman">50</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千字的概率接近于零，而非正文部分的标签密度小于</span><span lang="EN-US"><font face="Times New Roman">200</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千字的机率也几乎为零。所以，理论上，在</span><span lang="EN-US"><font face="Times New Roman">50</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千字和</span><span lang="EN-US"><font face="Times New Roman">200</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千字这个统计得出标签密度数据的&ldquo;真空区&rdquo;中选择任何一个数值作为正文与非正文部分的分界线都是可以的。但是，为了保证不遗漏正文（不遗漏正文：对于标注对象来说，正文的缺失是难以接受的，而少量的冗余资料则被认为是对工作无害的。所以，在提取正文时，宁可放行一些无用的资料，也不能把丝毫的正文过滤掉），笔者建议选择的分界值是</span><span lang="EN-US"><font face="Times New Roman">150</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千字（</span><span lang="EN-US"><font face="Times New Roman">150</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span><span lang="EN-US"><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">千字：这是针对网络新闻资料得出的建议分界值，可能并不适用于其他类型的资料）。当然，在其后的设计分析中，我们可以知道，对于不同网站的文本语料，存在不同的设计风格差异，体现在源码上，就是正文部分与非正文部分的标签密度存在一定的波动。我们可以通过对这个阈值进行调整，来达到最适合的抽取精度。当然，在软件中，会存在一个</span><span lang="EN-US"><font face="Times New Roman">Scroll Bar</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，对这个阈值进行调整。</span></font></p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=58</link>
			<title><![CDATA[Windows 下运行Nutch批处理脚本]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,25 Jul 2007 22:00:55 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=58</guid>	
		<description><![CDATA[<p>将以下文本内容存放入NUTCH_HOME\bin 目录下 ， 命名为nutch.bat，设置以下JAVA_HOME 和 NUTCH_HOME，然后在命令行运行 %NUTCH_HOME%\bin\nutch</p>
<p>&nbsp;@echo off<br />set JAVA_HEAP_MAX=&quot;-Xmx512M&quot;<br />if not &quot;%1&quot;==&quot;&quot; goto INIT else goto echoMSG<br />:echoMSG<br />&nbsp; echo Title:欢迎使用北京线点科技 Nutch 运行脚本<br />&nbsp; echo Author:jaddy0302 mail:jaddy0302@126.com QQ:5622928<br />&nbsp; echo Site:http://www.xd-tech.com.cn 线点科技 专业垂直搜索引擎产品<br />&nbsp; echo Nutch Version: 0.7.2<br />&nbsp; echo Usage: nutch COMMAND <br />&nbsp; echo where COMMAND is one of:<br />&nbsp; echo&nbsp;&nbsp; crawl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; one-step crawler for intranets<br />&nbsp; echo&nbsp;&nbsp; admin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; database administration, including creation<br />&nbsp; echo&nbsp;&nbsp; inject&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inject new urls into the database<br />&nbsp; echo&nbsp;&nbsp; generate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; generate new segments to fetch<br />&nbsp; echo&nbsp;&nbsp; fetchlist&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print the fetchlist of a segment<br />&nbsp; echo&nbsp;&nbsp; fetch&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fetch a segment's pages<br />&nbsp; echo&nbsp;&nbsp; parse&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parse a segment's pages<br />&nbsp; echo&nbsp;&nbsp; index&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run the indexer on a segment's fetcher output<br />&nbsp; echo&nbsp;&nbsp; merge&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; merge several segment indexes<br />&nbsp; echo&nbsp;&nbsp; dedup&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; remove duplicates from a set of segment indexes<br />&nbsp; echo&nbsp;&nbsp; updatedb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update db from segments after fetching<br />&nbsp; echo&nbsp;&nbsp; updatesegs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update segments with link data from the db<br />&nbsp; echo&nbsp;&nbsp; mergesegs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; merge multiple segments into a single segment<br />&nbsp; echo&nbsp;&nbsp; readdb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; examine arbitrary fields of the database<br />&nbsp; echo&nbsp;&nbsp; analyze&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adjust database link-analysis scoring<br />&nbsp; echo&nbsp;&nbsp; prune&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prune segment index(es) of unwanted content<br />&nbsp; echo&nbsp;&nbsp; segread&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; read, fix and dump segment data<br />&nbsp; echo&nbsp;&nbsp; segslice&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; append, join and slice segment data<br />&nbsp; echo&nbsp;&nbsp; server&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run a search server<br />&nbsp; echo&nbsp;&nbsp; namenode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run the NDFS namenode<br />&nbsp; echo&nbsp;&nbsp; datanode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run an NDFS datanode<br />&nbsp; echo&nbsp;&nbsp; ndfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run an NDFS admin client<br />&nbsp; echo&nbsp;&nbsp; jobtracker&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run the MapReduce job Tracker node <br />&nbsp; echo&nbsp;&nbsp; tasktracker&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run a MapReduce task Tracker node <br />&nbsp; echo&nbsp; or<br />&nbsp; echo&nbsp;&nbsp; CLASSNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; run the class named CLASSNAME<br />&nbsp; echo Most commands print help when invoked w/o parameters.<br />&nbsp; goto end;<br />:INIT&nbsp; <br />&nbsp; set NUTCH_HOME=C:\work\nutch-0.7.2<br />&nbsp; if &quot;%NUTCH_HOME%&quot;==&quot;&quot; set NUTCH_HOME=..&nbsp; <br />&nbsp; set CLASSPATH=%NUTCH_HOME%;%NUTCH_HOME%\conf;%NUTCH_HOME%\plugin<br />&nbsp; @echo @echo off&gt;setclasspath.bat<br />&nbsp; for %%i in (%NUTCH_HOME%\nutch-*.jar) do @echo set CLASSPATH=%%CLASSPATH%%;%%i&gt;&gt;setclasspath.bat;&amp; for %%i in (%NUTCH_HOME%\lib\*.jar) do @echo set CLASSPATH=%%CLASSPATH%%;%%i&gt;&gt;setclasspath.bat;<br />&nbsp; goto EXEC<br />:EXEC<br />&nbsp; call setclasspath<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;crawl&quot; set CLASS=org.apache.nutch.tools.CrawlTool<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;admin&quot; set CLASS=org.apache.nutch.tools.WebDBAdminTool<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;inject&quot; set CLASS=org.apache.nutch.db.WebDBInjector<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;generate&quot; set CLASS=org.apache.nutch.tools.FetchListTool<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;fetchlist&quot; set CLASS=org.apache.nutch.pagedb.FetchListEntry<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;fetch&quot; set CLASS=org.apache.nutch.fetcher.Fetcher<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;parse&quot; set CLASS=org.apache.nutch.tools.ParseSegment<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;index&quot; set CLASS=org.apache.nutch.indexer.IndexSegment<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;merge&quot; set CLASS=org.apache.nutch.indexer.IndexMerger<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;dedup&quot; set CLASS=org.apache.nutch.indexer.DeleteDuplicates<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;updatedb&quot; set CLASS=org.apache.nutch.tools.UpdateDatabaseTool<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;updatesegs&quot; set CLASS=org.apache.nutch.tools.UpdateSegmentsFromDb<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;mergesegs&quot; set CLASS=org.apache.nutch.tools.SegmentMergeTool<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;readdb&quot; set CLASS=org.apache.nutch.db.WebDBReader<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;prune&quot; set CLASS=org.apache.nutch.tools.PruneIndexTool<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;segread&quot; set CLASS=org.apache.nutch.segment.SegmentReader<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;segslice&quot; set CLASS=org.apache.nutch.segment.SegmentSlicer<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;analyze&quot; set CLASS=org.apache.nutch.tools.LinkAnalysisTool<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;server&quot; set CLASS=org.apache.nutch.searcher.DistributedSearch$Server<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;namenode&quot; set CLASS=org.apache.nutch.ndfs.NDFS$NameNode<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;datanode&quot; set CLASS=org.apache.nutch.ndfs.NDFS$DataNode<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;ndfs&quot; set CLASS=org.apache.nutch.fs.TestClient<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;jobtracker&quot; set CLASS=org.apache.nutch.mapReduce.JobTracker<br />&nbsp; if&nbsp; &quot;%1&quot; == &quot;tasktracker&quot; set CLASS=org.apache.nutch.mapReduce.TaskTracker<br />&nbsp; call &quot;%JAVA_HOME%\bin\java&quot; %JAVA_HEAP_MAX% -classpath &quot;%CLASSPATH%&quot; %CLASS% %2 %3 %4 %5 %6 %7 %8 %9<br />:end<br /></p>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=57</link>
			<title><![CDATA[搜索引擎重复网页发现技术分析]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Tue,10 Jul 2007 17:55:58 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=57</guid>	
		<description><![CDATA[一. 介绍<br /><br />统计结果表明，近似镜像网页数占总网页数的比例高达全部页面的29%,而完全相同的页面大约占全部页面的22%。这些重复网页有的是没有一点改动的拷贝，有的在内容上稍作修改，比如同一文章的不同版本，一个新一点，一个老一点，有的则仅仅是网页的格式不同（如 HTML, Postscript）,文献[Models and Algorithms for Duplicate Document Detection 1999年]将内容重复归结为以下四个类型:<br /><br />1.如果2篇文档内容和格式上毫无差别，则这种重复叫做full-layout duplicate。<br /><br />2.如果2篇文档内容相同，但是格式不同，则叫做full-content duplicates<br /><br />3.如果2篇文档有部分重要的内容相同，并且格式相同，则称为partial-layout duplicates<br /><br />4.如果2篇文档有部分重要的内容相同，但是格式不同，则称为partial-content duplicates<br /><br />近似重复网页发现技术就是通过技术手段快速全面发现这些重复信息的手段.如何快速准确地发现这些内容上相似的网页已经成为提高搜索引擎服务质量的关键技术之一。发现重复或者近似网页对于搜索引擎有很多好处:<br /><br />1. &nbsp; &nbsp; &nbsp; 首先，如果我们能够找出这些重复网页并从数据库中去掉，就能够节省一部分存储空间，进而可以利用这部分空间来存放更多的有效网页内容，同时也提高了web检索的质量。<br /><br />2. &nbsp; &nbsp; &nbsp; 其次，如果我们能够通过对以往搜集信息的分析，预先发现重复网页，在今后的网页搜集过程中就可以避开这些网页，从而提高有效网页的搜集速度。有研究表明重复网页随着时间级别不发生太大变化,所以这种从重复页面集合中选择部分页面进行索引是有效的.<br /><br />3. &nbsp; &nbsp; &nbsp; 另外，如果某个网页的镜像度较高，也就预示着该网页相对重要，在搜集网页时应赋予它较高的优先级，而当搜索引擎系统在响应用户的检索请求并对输出结果排序时，应该赋予它较高的权值。<br /><br />4. &nbsp; &nbsp; &nbsp; 从另外一个角度看,如果用户点击了一个死链接,那么可以将用户引导到一个相同页面,这样可以有效的增加用户的检索体验.因而近似镜像网页的及时发现有利于改善搜索引擎系统的服务质量。<br /><br /><br /><br />二. 基本处理流程<br /><br />通过分析现有技术,可以归纳出以下几个解决该问题的核心技术点,每个不同的技术基本上是由这几个技术点构成,无非是具体采纳的技术不同而已:<br /><br /><br /><br />1. &nbsp; 文档对象的特征抽取:将文档内容分解,由若干组成文档的特征集合表示,这一步是为了方面后面的特征比较计算相似度.<br /><br />2. &nbsp; 特征的压缩编码:通过HASH编码等文本向数字串映射方式以方便后续的特征存储以及特征比较.起到减少存储空间,加快比较速度的作用.<br /><br />3. &nbsp; 文档相似度计算:根据文档特征重合比例来确定是否重复文档.<br /><br />4. &nbsp; 聚类算法:通过叠代计算算出哪些文档集合是根据相似度计算是相近的;<br /><br />5. &nbsp; 工程化问题:出于海量数据计算速度的考虑,提出一些速度优化算法以使得算法实用化.<br /><br /><br /><br />我们可以从几个不同的角度对于现有的方法进行分类:<br /><br />l &nbsp; 按照利用的信息，现有方法可以分为以下三类<br /><br />1．只是利用内容计算相似<br /><br />2．结合内容和链接关系计算相似<br /><br />3．结合内容，链接关系以及url文字进行相似计算<br /><br />评价:现有绝大部分方法还是利用文本内容进行相似识别,其它两种利用链接关系以及URL文字的方法还不是很成熟,而且从效果看引入其它特征收效并不明显,所以从实际出发还是选择利用内容进行相似计算的算法. <br /><br /><br /><br />l &nbsp; 按照特征提取的粒度现有方法可以分为以下三类<br /><br />1. &nbsp; 按照单词这个级别的粒度进行特征提取.<br /><br />2. &nbsp; 按照SHINGLE这个级别的粒度进行特征提取.SHNGLE是若干个连续出现的单词,级别处于文档和单词之间,比文档粒度小,比单词粒度大.<br /><br />3. &nbsp; 按照整个文档这个级别的粒度进行特征提取<br /><br />评价:<br /><br />目前这个领域里面很多工作借鉴类似于信息检索的方法来识别相似文档,其本质和SHINGLE等是相同的，都是比较两个文档的重合程度，但是区别是SHINGLE是将若干单词组成片断，粒度比较大，而信息检索类方法其实是用单词作为比较粒度，粒度比较小，粒度越大计算速度越快，而粒度越小计算速度越慢，所以信息检索类方法是不实用的，而且对SHINGLE的改进以及新提出的方法的发展趋势也是粒度越来越大，这样才能解决实际使用中速度的问题。粒度最大的极端情况是每个文档用一个HASH函数编码（比如MD5），这样只要编码相同就说明文档完全相同，但是粒度太大带来的问题是对于细微的变化文档无法判别，只能判断是否完全相同，至于部分相同以及相同的程度无法判断.<br /><br />所以，现有方法也可以从以下角度分类：粒度。最小粒度：单词；中等粒度：SHINGLE；最大粒度：整个文档；可见SHINGLE类方法其实是在速度和精确程度上的一种折中方法。可以探讨不同粒度的效果，比如以句子为单位进行编码，以段落为单位编码等不同粒度的编码单位，还可以考虑动态的编码：首先以自然段落编码进行判别，如果发现部分相似，然后针对不同的部分再以细小粒度比如句子甚至单词级别的比较 所谓SUPER SHINGLE就是将粒度放大得到的。粒度越大，好处是计算速度越快（对于MD5整个文档来说，每个文档一个HASH编码，然后排序，将相同的找出，是速度最快的），缺点是会遗漏很多部分相似的文档；粒度越小，好处是招回率比较高，缺点是计算速度减慢。<br /><br /><br /><br />l &nbsp; 按照去处重复的级别进行分类,去处重复三个级别:<br /><br />1. &nbsp; 镜像站点:根据站点内相似页面多少进行判断.实现相对简单.<br /><br />2. &nbsp; 完全相同网页:实现相对简单并且速度比较块,可以根据页面MD5整个文档来说，每个文档一个HASH编码，然后排序，将相同的找出.<br /><br />3. &nbsp; 部分相同页面:实现相对负责,目前大多工作在这个部分.<br /><br /><br /><br />评价:<br /><br />三个级别应该从最高级别到较低级别分别进行,因为有很大比例(22%)的内容是完全相同的,这个部分实现起来相对简单,而且如果这个部分已经识别,那么针对部分相同页面的计算量会大量减少,这样应该可以减少总体的计算时间..<br /><br /><br /><br />l &nbsp; 按照去重的时机,可以分为以下三类<br /><br />（1） &nbsp; 抓取页面的时候去重，这样可以减少带宽以及减少存储数量；<br /><br />（2） &nbsp; 索引之后进行去重；<br /><br />（3） &nbsp; 用户检索时候进行再次去重；增加准确性，耗费时间；<br /><br /><br /><br />评价:<br /><br />可以结合三个时机某个或者所有都结合,对于GOOGLE来说,很可能是结合了2和3两种方法, GOOGLE的很多思路建立在后台计算和实时计算联合，比如相关度计算，后台计算重要性得分，在用户输入查询后得到初始数据集合，然后根据这个数据集合之间文档的关系重新调整顺序；比如去处重复，首先在后台进行重复发现，为了增加精确度，在返回查询结果后，在返回文档集合内，又根据&ldquo;描述&rdquo;部分重新计算哪些文档是重复的，这样增加了准确性，估计其它很多相关算法也采取这种联合策略，为了加快速度，实时计算部分可以和CACHE部分结合进行计算。<br /><br /><br /><br />l &nbsp; 按照不同的特征选择方法,有几种方式:<br /><br />1. &nbsp; 完全保留特征<br /><br />2. &nbsp; 特征选择,设置不同的选择策略来保留部分特征,抛弃其它特征<br /><br />a. &nbsp; 比如对于单词级别的抛弃权重小的单词(I-MATCH)<br /><br />b. &nbsp; 对于SHINGLE方法,可以保留部分SHINGLE抛弃其它SHINGLE<br /><br />(1) &nbsp; 一种是保留FINGERPRINT第I个位置为0的SHINGLE,其它抛弃;<br /><br />(2) &nbsp; 一种是每隔I个SHINGLE进行抽样保留,其它抛弃;这两种得到的文档SHINGLE数目是变长的;<br /><br />(3) &nbsp; 一种是选择最小的K个SHINGLE,这种得到定长的SHINGLE数目;<br /><br />(4) &nbsp; 用84个RABIN FINGERPRINT函数对于每个SHINGLE进行计算,保留数值最小的84个FINGERPRINT,这个方法是定长的.<br /><br /><br /><br />对于SHINGLE类方法来说,还可以区分为:定长的和变长的block切分算法<br /><br />定长算法：速度快，但是如果内容有稍微变化（比如插入或者删除一个字符或者单词），其影响会比较大。比如Shingle及其改进方法（Super-Shingle），CSC及其改进方法（CSC-SS）。<br /><br />变长算法：速度相对慢，但是内容变化只是造成局部影响。比如CDC,TTTD等算法。<br /><br /><br /><br />评价: 为了提高计算速度,一种策略是在特征提取的时候,抛弃部分特征,保留部分特征,通过减少特征数目来加快计算速度.另外一个策略是粒度尽可能加大,比如SUPER-SHINGLE,MEGA-SHINGLE甚至是文档基本;为了提高算法效果,策略是采取变长的内容切割算法比如CSC算法等;这三种策略是方法加快速度和准确性的发展方向.<br /><br /><br /><br /><br /><br />一些初步的结论:<br /><br />1. &nbsp; 对于信息检索类型的方法来说,由于其特征选择是基于单词的,所以计算速度是个根本的问题,所以基本上是不实用的;<br /><br />2. &nbsp; 从利用的信息来看,实用的系统还是应该立足于只是利用文本内容来判别相似性,排除掉利用链接信息等方法;<br /><br />3. &nbsp; 从算法特征抽取粒度来看,应该立足于SHINLGE类的粒度甚至是文档级别的粒度算法;而SHINGLE类别的算法又应该优先选择抛弃部分特征的算法以及变长的算法;<br /><br />4. &nbsp; 从去重级别角度考虑,应该将完全相同的文档和部分相同的文档识别分开进行,而且首先进行完全相同文档的识别,这样会有效加快计算速度;<br /><br />5. &nbsp; 从去重时机考虑,可以考虑结合后台去重以及实时去重,这样增加去重的效果;<br /><br />6. &nbsp; 从压缩编码方法来看,最有效的方式可能是RABIN FINGERPRINT变体算法;<br /><br />7. &nbsp; 从聚类方法来看,最有效的方式可能是UNION FIND算法,目前比较快的算法基本上都采用这个方法;<br /><br />8. &nbsp; 从整体方法选择来看,应该选择改进的SHINLGE方法,在此基础上进行进一步的改进;<br /><br /><br /><br /><br /><br />三. 方法效率比较<br /><br />1. &nbsp; SHINGLING 方法:时间效率O((mn)2) ,其中 m是SHINGLE的大小,n是文档数目.计算时间为:3千万文档,10台机器算一天,或者一台机器算10天;<br /><br />2. &nbsp; 改进的SHINGLE方法(On the Evolution of Clusters of Near-Duplicate Web Pages.):时间效率接近于线性的O(n),计算时间为:1亿5千万网页计算3个小时;<br /><br />3. &nbsp; IMACH方法: 最坏的情况下时间复杂度是(O(d log d))，速度比较快<br /><br />4. &nbsp; BLOOM FILTER方法:10k数据花费大约66ms;<br /><br /><br /><br />从计算效率考虑,速度排序为:<br /><br />1. &nbsp; 改进的SHINGLE方法;<br /><br />2. &nbsp; IMATCH方法;<br /><br />3. &nbsp; BLOOM FILTER方法;<br /><br />4. &nbsp; SHINGLE方法;<br /><br /><br /><br /><br /><br />四. 目前代表性解决方法分析<br /><br />1. &nbsp; Shingle方法(1997年)<br /><br />a. &nbsp; 特征抽取<br /><br />Shingle方法:所谓Shingle类似于自然语言处理中常用的N-GRAM方法,就是将相互连续出现窗口大小为N的单词串作为一个Shingle,两者的不同点在于Shingle是这些串的集合,相同的串会合并为一个,而N-GRAM则由于考虑的是文本线性结构,所以没有相同合并步骤.每个Shingle就是文档的一个特征,一篇文档就是由所有这些Shingle构成的.<br /><br /><br /><br />b. &nbsp; 压缩编码<br /><br />40 bit长度 Rabin FingerPrint方法;至于存储方式则类似于传统信息检索领域的倒排文档技术,存储&lt;Shingle,ID&gt;信息以记录某个特征在哪些文档中出现过,然后进一步计算文档的相似性;<br /><br /><br /><br />c. &nbsp; 文档相似度计算<br /><br />(1) &nbsp; 相似度:任意两个文档A和B,相似度指的是两者相同的Shingle数目占两者Shingle数目总和的比例;<br /><br />(2) &nbsp; 包含度:指的是两者相同的Shingle数目占某篇文档Shingle数目的比例;<br /><br /><br /><br />d. &nbsp; 优化措施:<br /><br />(1) &nbsp; 分布计算然后合并;<br /><br />(2) &nbsp; 抛弃超高频出现Shingle,分析发现这些Shingle是无意义的片断;<br /><br />(3) &nbsp; 完全相同文档保留一份进行聚类;(文档是否完全相同根据压缩编码后数值是否相同判断)<br /><br />(4) &nbsp; Super Shingle:关于Shingle的Shingle,从更大结构上计算相似性以节省存储空间;<br /><br /><br /><br /><br /><br />2. &nbsp; Google可能采取的方法<br /><br />a. &nbsp; 特征抽取<br /><br />类似于Shingle方法,不同点在于:对于每个单词根据HASH函数决定属于哪个LIST,这样每个文档由若干个这样的LIST构成;<br /><br /><br /><br />b. &nbsp; 压缩编码<br /><br />FingerPrint方法;对于组成文档的LIST进行FingerPrint方法计算; <br /><br /><br /><br />c. &nbsp; 文档相似度计算<br /><br />&nbsp; &nbsp; 编辑距离(Edit Distance):如果两个文档有任何一个FingerPrint相似就判断为内容接近.<br /><br /><br /><br />d. &nbsp; 聚类方法<br /><br />首先对&lt;FingerPrint,Doc ID&gt;按照Doc ID进行排序;然后采取Union Find聚类方法,聚类结果就是相似文档集合;<br /><br /><br /><br />e. &nbsp; 优化措施<br /><br /><br /><br />3. &nbsp; HP实验室方法(2005年)<br /><br />a. &nbsp; 特征抽取<br /><br />基于内容的Chunk方法:变长而非定长的Chunk算法(TTTD算法);将一篇文档分解为若干个长度不同的Chunk,每个Chunk作为文本的一个特征.与shingle方法相比这种变长Chunk方法能够增加系统招回率;<br /><br /><br /><br />b. &nbsp; 压缩编码<br /><br />128bit MD5 HASH方法;每篇文章压缩编码后由若干 &lt;Chunk 长度, 定长HASH编码&gt;二元组构成;<br /><br /><br /><br />c. &nbsp; 文档相似度计算<br /><br />(1) &nbsp; 构建所有文档和Chunk构成的二分图;<br /><br />(2) &nbsp; 找到文档A包含的所有CHUNK,计算这些CHUNK还被哪些其它文档包含;<br /><br />(3) &nbsp; 计算这些文档和A的相似性;<br /><br /><br /><br />d. &nbsp; 聚类方法:Union Find 算法<br /><br />e. &nbsp; 优化措施:Bipartite 划分,本质上是将大规模数据分成小规模数据进行识别然后再合并结果.相当于分布计算;<br /><br /><br /><br />4．bloom filter(2005年)<br /><br />(1).特征抽取方法<br /><br />基于内容的语块（Content-defined chunking CDC）：CDC将文档切分为变长的内容片断，切分边界由rabin fringerprint和预先制定的maker数值匹配来进行判断。<br /><br />(2)编码（构造 bloom filter集合元素）<br /><br />对于切分的片断进行编码。bloom filter的编码方式如下：整个文档是由片断构成的，文档由长为m的二值数组表示。在将一个元素（内容片断）进行编码插入集合的时候，利用k个不同的hash函数进行编码，每个hash函数设置m个位置的某个位置为1。这种技术以前主要用来进行判断某个元素是否被集合包含。<br /><br />（3）相似度计算方法<br /><br />bloom filter方法：对于两个已经编码的文档（两个长度为m的二值数组），通过bit逻辑运算AND计算，如果两者很多位置都同时为1，那么两个文档被认为是近似的。<br /><br />（4）优势<br /><br />1．文档编码形式简洁，便于存储。<br /><br />2．由于计算相似性是BIT逻辑运算，所以速度快。<br /><br />3．相对Shingling 方式来说便于判断文档包含关系。（某个文档包含另外一个短小的文档）<br /><br /><br /><br />5．内容+链接关系（2003年）<br /><br />1．特征抽取方法<br /><br />&nbsp; 这个方法在抽取特征的时候同时考虑了文档的内容因素以及链接关系因素。<br /><br />&nbsp; 内容因素：通过Random Projection技术将文档内容从高维空间映射到低维空间，并且由实数表示，如果两个文档映射后的数字越接近则表明两者内容越相似。<br /><br />&nbsp; 链接因素：通过考虑类似于PAGERANK的连接关系，将某个网页的内容因素计算获得的分值通过链接传播到其他网页（传播关系见下列公式），多次叠代计算后得到每个页面的链接得分。<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; <br /><br /><br /><br /><br /><br /><br />2．相似度计算方法<br /><br />&nbsp; 每个文档由二元组&lt;RP,HM&gt;构成，RP代表内容部分的数值，HM代表链接关系代表的数值。如果两个文档每个项之间的差值都小于指定值，则判断两个文档是相似的。<br /><br />3．效果<br /><br />只采取内容精度达到90%，两者结合精度达到93%。从中看出，链接的作用并不明显。这可能跟这个方法的链接使用方法有关，因为通过链接计算的还是内容的情况。<br /><br /><br /><br />6．I-Match方法（2002年）<br /><br />（1）I-Match不依赖于完全的信息分析，而是使用数据集合的统计特征来抽取文档的主要特征，将非主要特征抛弃。输入一篇文档，根据词汇的IDF值过滤出一些关键特征，并且计算出这篇文档的唯一的Hash值，那些Hash值相同的文档就是重复的。<br /><br />（2）使用SHA1作为Hash函数，因为它的速度很快而且适用于任何长度。SHA-1生成一个20-byte 或者160-bit 的hash值并且使用一个安全的冲突消解算法，使得不同的标志串(token streams)生成相同的hash值的概率非常低。.把&lt;docid, hashvalue&gt;元组插入树结构的时间复杂度是(O(d log d))，其他的如检索数据结构（hash表）需要(O(d))。对重复(duplicate)的识别是在将数据插入hash数组或是树结构中进行的，任何的hash值的冲突就表示检测到一个重复内容。<br /><br />（3）最坏的情况下时间复杂度是(O(d log d))，速度比较快。<br />]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=56</link>
			<title><![CDATA[如何才能做好一个垂直搜索引擎 ]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,20 Jun 2007 17:40:14 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=56</guid>	
		<description><![CDATA[本文先引用几句话:&nbsp; <br /><br />&ldquo;确解用户之意，切返用户之需。&rdquo; <br /><br />&ldquo;门户网站都想着是怎样省钱，而不是怎样花钱来买技术。&rdquo; <br /><br />&ldquo;搜索引擎不是人人都能做的领域，进入的门槛比较高。&rdquo; <br /><br />&ldquo;只是优秀还不够，最好的方式是将一件事情做到极致。&rdquo;(google十大真理) <br /><br />&ldquo;做搜索引擎需要专注&rdquo;&nbsp;&ldquo;对于一项排到第四的业务，门户很难做到专注。&rdquo; <br /><br />&ldquo;用户无法描述道他要找什么，除非让他看到想找的东西。&rdquo; <br /><br />&ldquo;所谓楔形，其实就是个倒三角，倒三角的尖端部分代表搜索技术，中部是基于技术的产品应用平台，最上端是对整个搜索引擎用户人群文化的认识和理解，以及现代公司竞争最关键也最捉摸不定的所谓品牌。&rdquo; <br /><br />&ldquo;楔形&rdquo;蕴涵的另一个意义是:楔子要打到墙里，尖端是否锐利很重要，但楔子的破坏性有多强，究竟能在墙面挤压出多大的空间，其中端、后端的沉稳与厚重才是关键。 <br /><br />搜索引擎的技术和理念都是需要时间和经验的积累的，更是需要长期不断的完善进步的，绝对不要认为可以一蹴而就，要达到一个相对成熟领先的搜索引擎从开始到领先的周期一般需要是四年。着急不得。原因是因为搜索引擎太复杂，而且&ldquo;用户无法描述他要找什么，除非让他看到想找的东西。&rdquo;&nbsp;一切都需要摸索，尝试，问题需要一个一个解决，用户的需要得一点点的挖掘。 <br /><br />搜索引擎是一个产品，给用户提供服务的产品，需要长期的不断的改进升级调整才能持续不断的提用户体验，需要满足用户不断增长并且变化的需求、需要不断适应网络的变化。这是因为网络环境是不断变化的、网民的需求也是不断变化的。千万不要把搜索当成项目来做，做完了撂那让用户去用那你肯定没戏。在搜索引擎领域是讲体验的、新的引擎如果用户体验一旦整体上有领先一年以上的差距并且持续2年，那前期的领先者的优势就荡然无存，因为搜索引擎的用户转移成本相对而言是比较低的而且口碑是最佳的传播方式。如果一个搜索引擎不能持续不断的技术创新理念创新，那对于这个搜索引擎来说就等于死亡。我们一般形容搜索引擎的领先是以时间计算的。比如:中搜离百度整体差距&times;年，百度离google的整体差距&times;年，&hellip;&hellip;只要你能在用户体验上保持一年的领先优势持续2年，不需要炒作，一切纷至沓来。在用户体验面前，任何的炒作都显得很渺小。 <br /><br />作垂直搜索引擎，麻雀虽小，但是五脏俱全。无论理念文化、产品管理、应用、技术都和搜索引擎的楔形理论没有什么区别。所以要做好一垂直搜索必须解决这几个方面。 <br /><br />楔形的尖:垂直搜索技术。&nbsp; <br /><br /><br />垂直搜索技术主要分为两个层次:模板级和网页库级。模板级是针对网页进行模板设定或者自动生成模板的方式抽取数据，对网页的采集也是针对性的采集，适合规模比较小、信息源少且稳定的需求，优点是快速实施、成本低、灵活性强，缺点是后期维护成本高，信息源和信息量小。网页库级就是在信息源数量上、数据容量上检索容量上、稳定性可*性上都是网页库搜索引擎级别的要求，和模板方式最大的区别是对具体网页不依赖，可针对任意正常的网页进信息采集信息抽取&hellip;&hellip;。这就导致这种方式数据容量上和模板方式有质的区别，但是其灵活性差、成本高。当然模板方式和网页库级的方式不是对立的，这两者对于垂直搜索引擎来说是相互补充的，因为技术只是手段，目的是切反用户之需。本文谈及的技术主要是指网页库级别垂直搜索引擎技术。 <br /><br />搜索引擎的确是一项对技术要求比较高的应用，几年前相关的人才也比较少。现在搜索技术人才多了，相关的技术和技术的应用得相对以前而言更加成熟，但是竞争也更加激烈了。垂直搜索大致需要以下技术: <br /><br />1.&nbsp;信息采集技术 <br /><br />2.&nbsp;网页信息抽取技术 <br /><br />3.&nbsp;信息的处理技术，包括:重复识别、重复识别、聚类、比较、分析、语料分析等 <br /><br />4.&nbsp;语意相关性分析 <br /><br />5.&nbsp;分词 <br /><br />6.&nbsp;索引 <br /><br />信息采集技术，垂直搜索引擎spider和网页库的spider相比应该是更加专业，可定制化。可定向性的采集和垂直搜索范围相关的网页忽略不相关的网页和不必要的网页，选择内容相关的以及适合做进一步处理的网页深度优先采集、对页面有选择的调整更新频率&hellip;&hellip;，采集可通过人工设定网址和网页分析url方式共同进行。垂直搜索对信息的更新有着特别的要求，根据这些特点可以从以下几点考虑1.信息源的稳定性(不能让信息源网站感觉到spider的压力)2.抓取的成本问题3.对用户体验改善程度。根据以上几点制定一种比较好的策略，要做到恰到好处。策略上可以评估网站/网页更新的系数、网站/网页的重要系数、用户点击系数(或曝光系数)、网站稳定系数&hellip;&hellip;，根据这些系数来确定对这些网站/网页更新的频率。再由于新信息和更新了的信息list页面前面或者首页，所以对网页进行很好的分级可以以低成本很好的解决更新问题，系数比较低的网页一月update一次，稍微高点的一周update一次、中等的几天到一天一次、高的几小时到几分钟一次。类似搜索引擎的大库、周库、日库，小时库&hellip;&hellip; <br /><br />基于视觉网页块分析技术，模拟IE浏览器的显示方式，对网页进行解析。根据人类视觉原理，把网页解析处理的结果，进行分块，再根据需要，对这些块进行处理，如:采集定向、介绍抽取和一些必要的内容的抽取正文抽取&hellip;&hellip; <br /><br />结构化信息抽取技术，将网页中的非结构化数据按照一定的需求抽取成结构化数据。有两种方式，简单的就是模板方式，另外就是对网页不依赖web结构化信息抽取方式，这两种方式可以互取长处，以最简单最有效的办法满足需求。垂直搜索引擎和通用搜索引擎最大的区别就是对网页信息结构化抽取后再结构化数据进行深度的处理，提供专业的搜索服务。所以web结构化信息抽取的技术水平是决定垂直搜索引擎质量的重要技术指标。其实web结构化信息抽取在百度、google早已经广泛应用了，如:MP3、图片搜索、google的本地搜索就是从网页库抽取出企业信息，添加到其地图搜索中的，google通过这种技术正在颠覆做内容的方式。同样的技术应用还在qihoo、sogou购物、shopping等各种应用中体现。 <br /><br />简单的语法分析，简单的语法分析在搜索引擎中非常重要，可以通过简单的语法分析来改善数据的质量，低成本的获得某类信息，改善排序，寻找需要的内容&hellip;&hellip; <br /><br />信息处理技术，信息处理包括的范围比较广，主要包括去重、聚类、分析&hellip;&hellip;，这根据需要相关的技术就非常多。 <br /><br />数据挖掘，找出您的信息的关联性对于垂直搜索来说非常重要，有效，可以在这些相关性上为用户提供更细致的服务。 <br /><br />分词技术，面向搜索的分词技术，建立和您的行业相关的词库。注意这是面向搜索的分词，不是面向识别和准确的分词。就这个工作安排十几个人不停的维护也不会嫌多。 <br /><br />索引技术，索引技术对于垂直搜索非常关键，一个网页库级的搜索引擎必须要支持分布索引、分层建库、分布检索、灵活的更新、灵活的权值调整、灵活的索引和灵活的升级扩展、高可*性稳定性冗余性。还需要支持各种技术的扩展，如偏移量计算等。 <br /><br />其它技术，略。 <br /><br />垂直搜索引擎的技术评估应从以下几点来判断 <br /><br />1.&nbsp;全面性 <br /><br />2.&nbsp;更新性 <br /><br />3.&nbsp;准确性 <br /><br />4.&nbsp;功能性 <br />]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=55</link>
			<title><![CDATA[搜索技术已经发生了改变，您是否跟上了它的发展呢？]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,20 Jun 2007 16:21:54 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=55</guid>	
		<description><![CDATA[<p><a name="sec1"><span class="atitle">寻找并有所发现</span></a></p>
<p>您输入一个关键字列表，点击 <b>Search</b> 按钮，马上将得到相关文档的列表。这非常容易，不是吗？是的，的确很容易。这是什么魔法吗？其实并不是。</p>
<p>信息检索或简称为&ldquo;搜索&rdquo;，目前是计算机科学中的一个非常重要的领域。从技术的角度来看，<a href="http://en.wikipedia.org/wiki/Inverted_index"><font color="#5c81a7">倒排索引</font></a>用于存储文档中出现的关键字，并且支持搜索，它是一种广为熟悉并且精确描述的数据结构。</p>
<p>公正地说，查找包含关键字的文档列表是件很容易的事情，但是，排序技术却涉及到很多未知的技术和深奥的计算公式。事实上，对数以千计的、包含请求搜索的关键字的文档进行排序，以便将与用户最相关的文档列在最上方，这并不是一件容易的任务。尽管如此，用于排序结果的数学模型通常是常用的<a href="http://en.wikipedia.org/wiki/Vector_space_model"><font color="#5c81a7">词频/倒排文档频率模型</font></a>的变体，而对于这种模型，已有很好的研究基础。</p>
<table cellspacing="0" cellpadding="0" width="40%" align="right" border="0">
    <tbody>
        <tr>
            <td width="10"><img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="10" /></td>
            <td>
            <table cellspacing="0" cellpadding="5" width="100%" border="1">
                <tbody>
                    <tr>
                        <td bgcolor="#eeeeee">每年，<a href="http://www.nist.gov/"><font color="#5c81a7">美国国家标准局</font></a>都组织关于搜索引擎的&ldquo;奥运比赛&rdquo;：称为 TREC 挑战赛，这一赛事提供给参赛者海量的文档，而他们必须在这些文档中查找出满足要求的少部分内容。不幸的是，大多数商业搜索引擎都拒绝使用这类科学的方法进行评估。</td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<p>除了使用关键字进行搜索之外，您还可以使用浏览的方法进行搜索，这种方法使用分层结构的、类似于目录的结构来定位文档。有些时候将这些分层结构称为<b>分类</b>，通常由专家来构建这些分类。例如曾经很受欢迎的 <a href="http://dmoz.org/"><font color="#5c81a7">Open Directory</font></a> 项目，这是一种用于 Web 站点的常规分类。</p>
<p>这个基本搜索方法的一种变体是<b>高级搜索</b>，其中使用预先选定的一组特定字段的值来执行搜索，如标题、作者，等等。通常认为这是&ldquo;超级用户&rdquo;的特性，超级用户希望查找特定的来源，而不是有关特定主题的任何来源。例如，如果您知道准确的标题、作者名、出版时间、或者关于您正在查找的文档的一些其他精确信息，那么您就可以使用高级搜索。</p>
<p>尽管这不是&ldquo;高级&rdquo;用户专用的，但是高级搜索也并非适用于所有的用户。如果您了解关于您正在搜索的对象的细节信息，那么什么因素可能阻止您使用高级搜索，并成为所谓的超级用户呢？高级搜索可能很麻烦。我的看法是，用于定义这些高级条件的用户接口和计算机语言通常令人费解或非常复杂，以至于普通人难以使用。</p>
<p>但是事情正在发生变化，并且现在有更多的方法用于获得相关的内容。要了解搜索技术所经历的发展趋势，并且要了解如何获得所需的搜索结果，很重要的一点是，必须弄清楚下面两种使用搜索引擎的方法之间的区别：<b>发现</b>和<b>获得</b>。</p>
<p>通常在需要<i>发现</i> 网络上可用的资源时，您需要搜索 Web；在您开始进行搜索之前，您并不清楚可能存在什么样的资源。另一方面，当您在搜索自己的硬盘时，通常试图<i>获得</i> 某项已经存在的信息，而您只是不知道该信息的具体位置而已。以下是两个基本的场景：发现与获得之间的比较。换句话说，寻找关于某个特定主题所存在的内容与寻找某项已经知道的特定信息，这两种搜索是不相同的。</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/websphere/techjournal/0705_col_konopnicki/0705_col_konopnicki.html?S_TACT=105AGX52&amp;S_CMP=techcsdn#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="sec3"><span class="atitle">后过滤（Post-filtering）和方面（facet）：这是高级搜索的终结吗？</span></a></p>
<p>很明显，高级搜索主要用于获得场景，而这些场景很少出现在搜索 Web 的情况下。这正是为什么大多数最新的 Web <a href="http://www.readwriteweb.com/archives/top_100_alternative_search_engines.php"><font color="#5c81a7">搜索引擎</font></a>放弃了所谓的高级搜索特性的原因。另一方面，当您在搜索个人数据（或者甚至公司内部网）时，您通常知道关于正在查找的信息的一些细节信息。</p>
<p>这就产生了称为<b>面向方面的搜索</b>的新的搜索范例。面向方面的搜索的价值是，它使用户能够研究结果并且更精确地细化他们的搜索，而无需使用复杂的高级搜索语法所提供的布尔条件。当您使用支持面向方面的搜索特性的搜索引擎时，除了您的搜索结果之外，您还将得到一组<i>方面</i>，每个方面都描述了某种属性，如作者、出版日期，等等。对于其中的每个方面，您可以看见与搜索相关的各种可能的值所组成的列表，并且还提供了一个数字，用于表现包含对应值的结果的数量。</p>
<p>例如，假设您正使用词汇&ldquo;marketing chicken&rdquo;对您的计算机进行搜索。搜索引擎可能为这些词汇返回一个结果列表，同时包括下面的这些方面：</p>
<p><b>Source:Lotus Notes (34), Disk (26)<br />Author:John H. (12), David K (23), Others (25)<br />Updated:Last Week (15), Last Month (45)</b> </p>
<p>这意味着在搜索结果的范围中，其中 34 项存储于您的 Lotus&reg; Notes 电子邮件中，而有 26 项存储在您的硬盘上。如果不考虑存储位置，那么 John H. 是其中 12 项结果的作者，David K. 是其中 23 项结果的作者，而由其他人所撰写的内容共计 25 项。另外，如果不考虑存储位置和作者，那么在上周进行更新的有 15 项，而在上个月进行更新的有 45 项。</p>
<p>如何使用这些方面呢？很容易。这些方面都是链接，所以当您认为某个方面对您是最重要的，只需单击它即可，这将显示来自对应来源的筛选结果，而且所显示的结果将使用剩下的方面进行组织。例如，单击 <b>Lotus Notes</b> 链接，可能出现下列的方面：</p>
<p><b>Author:John H. (3), David K (11), Others (20)<br />Updated:Last Week (11), Last Month (23)</b> </p>
<p>当只考虑那些来自 Lotus Notes 的结果时，您可以通过深入研究最重要的方面并且更精确地定制搜索，直到找到所需的信息。您可以在任何时候撤消所做的选择，从而研究其他的路径。</p>
<p>这种方法的优点可能非常明显。当搜索结果中包含很多属性时，您可以采用简单而直观的方式对其进行研究，而无需求助于布尔逻辑。此外，因为通过数值表示了每个方面可用内容的潜在范围，所以您可以确保不会深入研究任何&ldquo;空&rdquo;的路径。</p>
<p>在 Internet 上的电子商务站点（如消费电子产品站点）中，当前最流行的是面向方面的搜索，这类产品信息有足够的特性和部分，以使得这种导航操作非常有意义。尽管对于标准的 Web 页面，面向方面的搜索目前看起来并不是很合适，但有足够的特性以使得面向方面的搜索适用于个人和内部网搜索引擎的环境，所以我相信在今后的几年中，随着我们越来越多地对电子邮件、个人文件和内部网信息进行搜索，我们将会更多地看到这种特性。</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/websphere/techjournal/0705_col_konopnicki/0705_col_konopnicki.html?S_TACT=105AGX52&amp;S_CMP=techcsdn#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="sec4"><span class="atitle">标记和社会化搜索：这是分类法的终结吗？</span></a></p>
<p>如前所述，您可以使用分类法对感兴趣的主题和相应的文档进行定位。尽管对于这些分类，很难进行维护。在创建一个新的文档时，必须将其与这种复杂数据结构中合适的类别关联。这引出了一种新的趋势，称为<a href="http://en.wikipedia.org/wiki/Folksonomy"><font color="#5c81a7"> <b>大众分类法</b> </font></a>：您可以对您撰写的或者访问的文档进行分类，而无需依赖分类专家或者其他人根据实际情况对信息加以分类。通过将文档关联于单个单词或者标记，就可以完成这项操作。然后，任何用户都可以搜索并利用这个标记空间，查看其中最频繁使用的标记，查看使用这个单词标记了哪些文档，等等。从理论上讲，标记将帮助更多的人找到更多的文档。例如，可以使用&ldquo;微电子学&rdquo;这个单词来标记一篇关于微电子学的文章，即使&ldquo;微电子学&rdquo;这个术语根本没有出现在文档本身的内容中。因此，如果使用这个词作为标记搜索微电子学相关的内容，那么将在搜索结果中找到该文档，这正是由于那位有远见或判断力的人创建了这个标记，并且标记本身具有动态实用性。而使用关键字进行搜索，则不会出现这种情况。</p>
<p>当然，在实践中，标记的使用可能会使得一些事情变得复杂。因为任何人都可以随意地建立标记，所以经过一段时间后，在搜索集合中无法防止无关标记或错误标记的出现。在企业环境中，安全性也是一个问题。如果不允许某些用户访问某个文档，那么当他们使用标记空间时，是否应该允许他们看到与这个文档相关联的标记呢？这种方法可以简化和改进在个人控制的信息集合（您的团队文件、您的照片）中的搜索，但是，同时会使得对大型企业范围内的信息集合的搜索变得更加复杂。</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/websphere/techjournal/0705_col_konopnicki/0705_col_konopnicki.html?S_TACT=105AGX52&amp;S_CMP=techcsdn#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="sec5"><span class="atitle">来自多个来源的结果</span></a></p>
<p>当您进行搜索时，可能希望通过多个来源进行搜索。例如，在 Web 上，通常会限制您只能使用一个搜索引擎，这是因为，使用多个搜索引擎并对其进行比较是非常麻烦的。当搜索您的个人文件或者企业内部网时，这个问题甚至变得更加复杂。有一些搜索引擎，可以使用不同的用户接口进行访问，可以访问不同的数据集，并产生不同的结果集。在这种情况下，<b>联合</b>和<b>聚合</b>这两种方式可以提供帮助。</p>
<p><i>联合</i> 意味着使用某种工具注册所有可用的搜索引擎，将您所进行的搜索转发给所有这些搜索引擎，然后检索结果，并在单个列表中显示经过组合的结果。在大多数情况下，很难以统一的方式对结果进行排序。（在某些搜索引擎中，在对结果的相关性评分中，85% 是一个&ldquo;好&rdquo;的评分，而在其他的引擎中，好的评分是 95%。）因此，在使用联合的时候，很有可能会将来自每个来源的结果分离开来。（在这种情况下，面向方面的搜索可能是很有帮助的。）</p>
<p>在使用<i>聚合</i> 的时候，中央搜索引擎将汇总所有的搜索内容。对某个位置进行搜索，并从所有的来源返回统一的结果。因此，聚合的方式非常方便，但是却难以实现，因为它需要通过爬网的方式处理所有可用的数据来源，并且扩展搜索引擎。多数情况下，您将不得不接受几个不同层次的联合和聚合（对于目前而言）。</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/websphere/techjournal/0705_col_konopnicki/0705_col_konopnicki.html?S_TACT=105AGX52&amp;S_CMP=techcsdn#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="sec6"><span class="atitle">门户搜索工具箱</span></a></p>
<p>随着需要搜索的信息越来越多，我们可以使用的搜索方式也越来越多。WebSphere Portal Search Development 团队希望帮助您使用不同的搜索方式，而有了这些方式，可以让最终用户在企业中查找信息的任务变得更加容易。这正是我们发布<a href="http://www.ibm.com/developerworks/cn/websphere/techjournal/0610_dinur/0610_dinur.html"><font color="#5c81a7">公共 API</font></a> 以及免费提供<a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0701_konopnicki/0701_konopnicki.html?S_TACT=105AGX52&amp;S_CMP=cn-a-wes"><font color="#5c81a7">搜索工具</font></a>的原因。这些工具的目标是帮助您进行试验，以便开发出更有效的搜索应用程序，并对我们周围日益增长的信息空间，找到合适的搜索方式。</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=54</link>
			<title><![CDATA[搜 索 引 擎 分 类]]></title>
			<author>jaddy0302@126.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Tue,15 May 2007 17:23:10 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=54</guid>	
		<description><![CDATA[■&nbsp;全文搜索引擎&nbsp;<br/>　　全文搜索引擎是名副其实的搜索引擎，国外具代表性的有Google、Fast/AllTheWeb、AltaVista、Inktomi、Teoma、WiseNut等，国内著名的有百度（Baidu）。它们都是通过从互联网上提取的各个网站的信息（以网页文字为主）而建立的数据库中，检索与用户查询条件匹配的相关记录，然后按一定的排列顺序将结果返回给用户，因此他们是真正的搜索引擎。<br/><br/>　　从搜索结果来源的角度，全文搜索引擎又可细分为两种，一种是拥有自己的检索程序（Indexer），俗称“蜘蛛”（Spider）程序或“机器人”（Robot）程序，并自建网页数据库，搜索结果直接从自身的数据库中调用，如上面提到的7家引擎；另一种则是租用其他引擎的数据库，并按自定的格式排列搜索结果，如Lycos引擎。<br/><br/>　　　　　&nbsp;<br/><br/>&nbsp;<br/><br/>　■&nbsp;目录索引&nbsp;<br/>　　目录索引虽然有搜索功能，但在严格意义上算不上是真正的搜索引擎，仅仅是按目录分类的网站链接列表而已。用户完全可以不用进行关键词（Keywords）查询，仅靠分类目录也可找到需要的信息。目录索引中最具代表性的莫过于大名鼎鼎的Yahoo雅虎。其他著名的还有Open&nbsp;Directory&nbsp;Project（DMOZ）、LookSmart、About等。国内的搜狐、新浪、网易搜索也都属于这一类。<br/><br/>　　　　　　&nbsp;<br/><br/>&nbsp;<br/>　■&nbsp;元搜索引擎&nbsp;(META&nbsp;Search&nbsp;Engine)<br/>　　元搜索引擎在接受用户查询请求时，同时在其他多个引擎上进行搜索，并将结果返回给用户。著名的元搜索引擎有InfoSpace、Dogpile、Vivisimo等（元搜索引擎列表），中文元搜索引擎中具代表性的有搜星搜索引擎。在搜索结果排列方面，有的直接按来源引擎排列搜索结果，如Dogpile，有的则按自定的规则将结果重新排列组合，如Vivisimo。<br/><br/>　　除上述三大类引擎外，还有以下几种非主流形式：<br/><br/>　　1、集合式搜索引擎：如HotBot在2002年底推出的引擎。该引擎类似META搜索引擎，但区别在于不是同时调用多个引擎进行搜索，而是由用户从提供的4个引擎当中选择，因此叫它“集合式”搜索引擎更确切些。<br/>　　2、门户搜索引擎：如AOL&nbsp;Search、MSN&nbsp;Search等虽然提供搜索服务，但自身即没有分类目录也没有网页数据库，其搜索结果完全来自其他引擎。<br/>　　3、免费链接列表（Free&nbsp;For&nbsp;All&nbsp;Links，简称FFA）：这类网站一般只简单地滚动排列链接条目，少部分有简单的分类目录，不过规模比起Yahoo等目录索引来要小得多。　　<br/><br/>　　由于上述网站都为用户提供搜索查询服务，为方便起见，我们通常将其统称为搜索引擎。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=53</link>
			<title><![CDATA[集成搜索引擎与元搜索引擎]]></title>
			<author>jaddy0302@126.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Tue,15 May 2007 17:19:58 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=53</guid>	
		<description><![CDATA[&nbsp;&nbsp;搜索引擎是开启网络知识殿堂的钥匙，获取知识信息的工具。随着网络技术的飞速发展，搜索技术的日臻完善，中外搜索引擎已广为人们熟知和使用。任何搜索引擎的设计，均有其特定的数据库索引范围、独特的功能和使用方法，以及预期的用户群指向。一种搜索引擎不可能满足所有人或一个人所有的检索需求。在某些情况下，如文献普查、专题查询、新闻调查与朔源、软件及MP3下载地址搜索等等，人们往往需要使用多种搜索引擎，对搜索结果进行比较、筛选和相互印证。为解决逐一登陆各搜索引擎，并在各搜索引擎中分别多次输入同一检索请求（检索字串）等烦琐操作，集成搜索引擎和元搜索引擎应运而生。<br/><br/>集成搜索引擎和元搜索引擎尽可能地减少和优化了检索操作，实现了“一次检索输入，多引擎同时搜索”。<br/><br/>目前国内对集成搜索引擎和元搜索引擎的概念界定尚不清晰，二者多互称、通用。事实上，集成搜索引擎和元搜索引擎是两种不同类型的搜索工具，既有共同特点，又有明显差异。<br/><br/>一、集成搜索引擎<br/>集成搜索引擎（&nbsp;All－in－One&nbsp;Search&nbsp;Page），亦称为“多引擎同步检索系统&nbsp;”（如<a href="http://www.bioon.com/multisearch.htm" target="_blank">http://www.bioon.com/multisearch.htm</a>）是在一个WWW页面上链接若干种独立的搜索引擎，检索时需点选或指定搜索引擎，一次检索输入，多引擎同时搜索，搜索结果由各搜索引擎分别以不同页面提交，其实质是利用网站链接技术形成的搜索引擎集合，而并非真正意义上的搜索引擎。<br/><br/>集成搜索引擎无自建数据库，不需研发支持技术，当然也不能控制和优化检索结果。但集成搜索引擎制作与维护技术简单，可随时对所链接的搜索引擎进行增删调整和及时更新，尤其大规模专业（如FLASH、MP3等）搜索引擎集成链接，深受特定用户群欢迎。在搜索引擎发展进程中，集成搜索引擎只是元搜索引擎的初级形态，以其方便、实用在网络搜索工具家族中占据一席之地。典型的集成搜索引擎有“搜索之家”（<a href="http://so.web165.com/" target="_blank">http://so.web165.com/</a>）、“网际瑞士军刀”（<a href="http://free.okey.net/~free/search1.htm" target="_blank">http://free.okey.net/~free/search1.htm</a>）等。<br/><br/>二、元搜索引擎<br/>元搜索引擎（Metasearch&nbsp;Engine），是一种调用其它独立搜索引擎的引擎,亦称“搜索引擎之母（The&nbsp;mother&nbsp;of&nbsp;searce&nbsp;engines)”。在这里，“元”（Meta）为“总的”、“超越”之意，元搜索引擎就是对多个独立搜索引擎的整合、调用、控制和优化利用。相对元搜索引擎，可被利用的独立搜索引擎称为“源搜索引擎”（source&nbsp;Engine），或“搜索资源”（searcing&nbsp;resources），整合、调用、控制和优化利用源搜索引擎的技术，称为“元搜索技术”（Meta-searching&nbsp;technique），元搜索技术是元搜索引擎的核心。<br/><br/>元搜索引擎分为并行处理式和串行处理式两大类。并行处理式元搜索引擎将用户的查询请求同时转送给它调用链接的多个独立型搜索引擎进行查询处理，串行处理式元搜索引擎将用户的查询请求依次转送给它调用链接的每一个独立型搜索引擎进行查询处理。&nbsp;<br/><br/>元搜索引擎是用户同时利用多引擎进行网络搜索的中介。检索时，元搜索引擎根据用户提交的检索请求，调用源搜索引擎进行搜索，对搜索结果进行汇集、筛选、删并等优化处理后，以统一的格式在同一界面集中显示。元搜索引擎虽没有网页搜寻机制，亦无独立的索引数据库，但在检索请求提交、检索接口代理和检索结果显示等方面，均有自己研发的特色元搜索技术支持。如提交检索请求时，根据源搜索引擎的特点和技术参数，指定优先顺序，并对检索时间、检索结果数量进行控制；作为若干源搜索引擎的检索接口代理，元搜索引擎必须具有较强的字符和语法转换功能，使用户的检索请求为各具语法特点的不同的源搜索引擎所人知和接受；&nbsp;而对检索结果的显示，不同的元搜索引擎有不同的处理技术，由于元搜索引擎设定的检索结果排序依据、最大返回结果数量、相关度参数及优化机制等不同，调用相同的源搜索引擎的不同元搜索引擎显示检索结果的数量多少、排序先后、结果信息描述选择亦有较大差异。<br/><br/>一款理想的元搜索引擎应该具备以下特点和功能：第一，含盖较多的搜索资源，可随意选择和调用源搜索引擎；其次，具备尽可能多的可选择功能，如资源类型（网站、网页、新闻、软件、FTP、MP3、图像等）选择、返回结果数量控制、结果时段选择、过滤功能选择等；第三，强大的检索请求处理功能（如支持逻辑匹配检索、短语检索、自然语言检索等）和不同搜索引擎间检索语法规则、字符的转换功能（如对不支持“NEAR”算符的搜索引擎，可自动实现由“NEAR”向“AND”算符的转换等）；第四，详尽全面的检索结果信息描述（如网页名称、URL、文摘、源搜索引擎、结果与用户检索需求的相关度等）；第五，支持多种语言检索。<br/><br/>目前运营的元搜索引擎各具特色，功能各有侧重，完全“理想”的尚不多见。一些元搜索引擎在某些方面较为优秀，而其它功能则欠缺或需改进：如大多元搜索引擎不支持多语种，尤其是汉语检索；一些元搜索引擎实现检索语法转换的能力有限，不支持指定字段检索，不能充分发挥各个独立搜索引擎的高级检索功能；部分元搜索引擎无源搜索引擎列表，用户不能自主选择和调用源搜索引擎；大部分元搜索引擎仅支持调用AltaVista、Excite、GoTo．com、Yahoo！、Infoseek、Lycos等常用的搜索引擎，一些大型搜索引擎如NorthernLight、HotBot等被排除在外，人为地限制了搜索资源的利用；在检索结果上，元搜索引擎只能返回十几、数十条“相关度”较高的结果，大量可能有价值的源搜索引擎的检索结果被忽视，影响检索结果的全面性。元搜索引擎的功能受着源搜索引擎和元搜索技术的双重制约：一方面，源搜索引擎的各具特色的强大功能在元搜索引擎中受到限制而不能充分体现，而另一方面，任何一种元搜索技术都不能发掘和利用源搜索引擎的全部功能。<br/><br/>1995年华盛顿大学硕士生&nbsp;Eric&nbsp;Selberg&nbsp;和&nbsp;o&#114;en&nbsp;Etzioni&nbsp;推出第一个元搜索引擎---Metacrawler以来，这一新型的网络检索工具异军突起，发展迅速，目前可用的元搜索引擎已近百种。尽管元搜索引擎存在着这样那样的功能局限，但其以含盖较多的搜索资源，能够在尽可能短的时间内提供相对全面、准确的检索结果等诸多优异功能受到用户的青睐，已渐成为一种不可或缺的极具潜力的网络检索工具。&nbsp;<br/><br/>元搜索引擎一览：<br/><br/>《搜索引擎观察》2002年最佳元搜索引擎<br/><br/>1、Vivisimo&nbsp;（&nbsp;<a href="http://vivisimo.com/" target="_blank">http://vivisimo.com/</a>）<br/>调用多种搜索引擎，并对返回的结果自动分类,界面友好，简单易用。<br/><br/>2、EZ2WWW&nbsp;（&nbsp;<a href="http://www.ez2www.com/" target="_blank">http://www.ez2www.com/</a>）<br/>调用AllTheWeb,&nbsp;AltaVista,&nbsp;Google,&nbsp;Open&nbsp;Directory,&nbsp;Teoma,&nbsp;Wisenut&nbsp;and&nbsp;Yahoo等搜索引擎，高级搜索功能提供1000多种专项资源检索，可进行目录检索。<br/><br/>3、Kartoo&nbsp;（&nbsp;<a href="http://www.kartoo.com/" target="_blank">http://www.kartoo.com/</a>）<br/>在搜索结果中显示链接各相关页面的关键词。<br/><br/>4、SurfWax&nbsp;（&nbsp;<a href="http://www.surfwax.com/" target="_blank">http://www.surfwax.com/</a>）<br/>有一个其它元搜索引擎没有的独特功能，即点击每条结果左边的“网址揿钮”图标，可浏览该结果包括的任何页面，并显示搜索语句在文件中的位置。可以把搜索结果和文件存储起来以备后用。<br/><br/>5、Fazzle&nbsp;（&nbsp;<a href="http://www.fazzle.com/" target="_blank">http://www.fazzle.com/</a>）<br/>即可进行一般的网址搜索，又有一个主题目录提供专题资源搜索。其前身为SearchOnline<br/><br/>著名元搜索引擎<br/><br/>1、InfoGrid&nbsp;（&nbsp;<a href="http://www.infogrid.com/" target="_blank">http://www.infogrid.com/</a>）<br/>提供与主要搜索网站的直接连结和目录检索，具有强大的元搜索和新闻搜索功能。<br/><br/>2、Infonetware&nbsp;Realt&#101;rm&nbsp;Search&nbsp;（&nbsp;<a href="http://www.infonetware.com/" target="_blank">http://www.infonetware.com/</a>）<br/>原为检验网络分类技术而设计。它以元搜索引擎知名，但具有强大的对搜索结果进行主题分类的功能。与众不同的是，用户可选择不同的主题，并得到来自所有主题搜索结果，而不是仅仅把搜索结果限制在一个主题范围之内。<br/><br/>3、Ithaki&nbsp;（&nbsp;<a href="http://www.ithaki.net/dir.html" target="_blank">http://www.ithaki.net/dir.html</a>）<br/>支持包括中文在内的14种语言检索。<br/><br/>4、Ixquick&nbsp;（&nbsp;<a href="http://www.ixquick.com/" target="_blank">http://www.ixquick.com/</a>）<br/>可搜索网站、MP3、新闻、图象等多种网络资源。<br/><br/>5、ProFusion&nbsp;(&nbsp;<a href="http://www.profusion.com" target="_blank">http://www.profusion.com</a>)<br/>拥有智能化的搜索方案，提供诸如搜索引擎选择、检索类型、结果显示、摘要选项、链接检查等较多的检索选项，支持个性化设置，可以选择三个最好的搜索引擎、或三个最快的搜索引擎、或全部搜索引擎、或手工选择任意几个搜索引擎来进行搜索。自动实现符合特殊检索语法要求的转换，如在调用Excite、InfoSeek、WebCrawler时将“NEAR”转换成“AND”，在调用GoTo、Yahoo时将“NOT”删除等。原为堪萨斯州大学所有，2000年四月被Intelliseek&nbsp;搜索公司购买。<br/><br/>6、Mamma&nbsp;（&nbsp;<a href="http://www.mamma.com" target="_blank">http://www.mamma.com</a>）<br/>1996年面世，自称为“搜索引擎之母”的并行元搜索引擎，可同时调用7个最常用的独立搜索引擎，并且可查询网上商店、新闻、股票指数、图像和声音文件等资源。其特点是检索界面友好，检索选项丰富，主要包括：可控制调用的独立搜索引擎、选择使用短语检索功能、设定检索时间、设定每页可显示记录数等。另外，Mamma支持常用检索语法在不同搜索引擎中的转换，还提供了专门检索页面文件标题的特殊检索服务，以及通过E－mail传输检索结果的特色功能。检索结果以相关性排序，内容包括网页名称、URL、文摘、源搜索引擎。　　<br/><br/>7、MetaCrawler&nbsp;（&nbsp;<a href="http://www.metacrawler.com" target="_blank">http://www.metacrawler.com</a>）<br/>1995年由华盛顿大学推出，1997年被InfoSpace购买。支持调用12个独立搜索引擎，提供涵盖近20个主题的目录检索服务。其检索特性非常丰富，包括常规检索、高级检索、定制检索、国家或地区的资源检索等检索服务模式。其中，高级检索模式可实现：搜索引擎的选择调用，基于域名、地区或国家的检索结果过滤，最长检索时间设置，每页可显示的和允许每个搜索引擎返回的检索结果数量的设定，设定检索结果排序依据（包括相关度、域名、源搜索引擎）等。以上内容均可作为定制检索的个性化选项并予以保存。另外，检索结果中包括一个以1000为最大值的相关度指标。<br/><br/>8、ByteSearch&nbsp;（&nbsp;<a href="http://www.bytesearch.com" target="_blank">http://www.bytesearch.com</a>）<br/>搜索速度快，可检索资源丰富，搜索范围包括Web、城市信息、公司名录、域名、FTP网站、多媒体、新闻组、包裹跟踪等，并提供新闻浏览、URL提交、最新的20个检索浏览、联机商店等内容方面的服务。支持完全匹配（All）、部分匹配（Any）、短语检索（Phrase）等特性检索功能，没有搜索引擎列表，不能控制源搜索引擎的选择。<br/><br/>9、SavvySearch&nbsp;(&nbsp;<a href="http://savvy.cs.colostate.edu:2000/" target="_blank">http://savvy.cs.colostate.edu:2000/</a>)&nbsp;<br/>支持二十种语言(不包括中文)，可调用全部或任意几个搜索引擎，可选择每个搜索引擎返回结果的数目，可进行目录检索。　　<br/><br/>常用元搜索引擎<br/><br/>1、qbSearch&nbsp;<a href="http://www.qbsearch.com/" target="_blank">http://www.qbsearch.com/</a>）<br/>2、Query&nbsp;Server&nbsp;<a href="http://www.queryserver.com" target="_blank">http://www.queryserver.com</a>）<br/>3、Turbo10&nbsp;<a href="http://turbo10.com/" target="_blank">http://turbo10.com/</a>）<br/>4、Dogpile&nbsp;<a href="http://www.dogpile.com/" target="_blank">http://www.dogpile.com/</a>）<br/>5、Webcrawler&nbsp;<a href="http://www.webcrawler.com/" target="_blank">http://www.webcrawler.com/</a>）<br/>6、Search.com&nbsp;<a href="http://www.search.com/" target="_blank">http://www.search.com/</a>）<br/><br/>其它元搜索引擎<br/>1、1Blink&nbsp;<a href="http://www.1blink.com/" target="_blank">http://www.1blink.com/</a>）<br/>2、Gimenei&nbsp;<a href="http://gimenei.com/" target="_blank">http://gimenei.com/</a>）<br/>3、IcySpicy&nbsp;<a href="http://www.icyspicy.com/" target="_blank">http://www.icyspicy.com/</a>）<br/>4、MetaEureka&nbsp;<a href="http://www.metaeureka.com/" target="_blank">http://www.metaeureka.com/</a>）<br/>5、Moonmist&nbsp;<a href="http://www.moonmist.info/" target="_blank">http://www.moonmist.info/</a>）<br/>6、Widow&nbsp;Meta&nbsp;Search&nbsp;<a href="http://www.widow.com/" target="_blank">http://www.widow.com/</a>）<br/>7、Family&nbsp;Friendly&nbsp;Search&nbsp;<br/><a href="http://www.familFamily" target="_blank">http://www.familFamily</a>&nbsp;Friendly&nbsp;Searchyfriendlysearch.com/）<br/>8、Searchy.co.uk&nbsp;<a href="http://www.searchy.co.uk/" target="_blank">http://www.searchy.co.uk/</a>）<br/>9、TeRespondo&nbsp;<a href="http://sl.terespondo.com/home/" target="_blank">http://sl.terespondo.com/home/</a>）<br/>10、Watson&nbsp;for&nbsp;the&nbsp;Macintosh<br/><a href="http://www.apple.com/downloads/macosx/internet_utilities/watson.html" target="_blank">http://www.apple.com/downloads/macosx/internet_utilities/watson.html</a>）<br/>11、Chubba<a href="http://chubba.whatuseek.com/" target="_blank">http://chubba.whatuseek.com/</a>）&nbsp;<br/>12、Debriefing<a href="http://debriefing.ixquick.com/" target="_blank">http://debriefing.ixquick.com/</a>）&nbsp;<br/>13、C4&nbsp;<a href="http://www.c4.com/" target="_blank">http://www.c4.com/</a>&nbsp;）&nbsp;<br/>14、Infind<a href="http://www.infind.com/" target="_blank">http://www.infind.com/</a>）&nbsp;<br/>15、Infozoid<a href="http://www.infozoid.com/" target="_blank">http://www.infozoid.com/</a>）&nbsp;<br/>16、Ixquick<a href="http://www.ixquick.com" target="_blank">http://www.ixquick.com</a>）<br/>17、OneSeek<a href="http://www.oneseek.com/" target="_blank">http://www.oneseek.com/</a>）&nbsp;<br/>18、One2Seek<a href="http://one2seek.com/" target="_blank">http://one2seek.com/</a>）&nbsp;<br/>19、Query&nbsp;Server<a href="http://www.queryserver.com/general.htm" target="_blank">http://www.queryserver.com/general.htm</a>）&nbsp;<br/>20、Proteus<a href="http://www.thrall.org/proteus.html" target="_blank">http://www.thrall.org/proteus.html</a>）&nbsp;<br/>21、Searches<a href="http://www.searches.com" target="_blank">http://www.searches.com</a>）&nbsp;<br/>22、Searchbug&nbsp;<a href="http://www.searchbug.com/" target="_blank">http://www.searchbug.com/</a>）&nbsp;<br/>23、Skworm<a href="http://www.skworm.com/" target="_blank">http://www.skworm.com/</a>）&nbsp;<br/>24、Skworm<a href="http://www.skworm.com/" target="_blank">http://www.skworm.com/</a>）&nbsp;<br/>25、Sleuth<a href="http://www.isleuth.com" target="_blank">http://www.isleuth.com</a>）&nbsp;<br/>26、SurfWax<a href="http://www.surfwax.com/" target="_blank">http://www.surfwax.com/</a>）&nbsp;<br/>27、Supercrawler<a href="http://www.supercrawler.com/" target="_blank">http://www.supercrawler.com/</a>）&nbsp;<br/>28、Highway61&nbsp;<a href="http://www.highway61.com/" target="_blank">http://www.highway61.com/</a>）<br/>29、Cyber&nbsp;411&nbsp;<a href="http://www.cyber411.com/" target="_blank">http://www.cyber411.com/</a>　）　<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=52</link>
			<title><![CDATA[嵌入执行Javascript 脚本]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Thu,10 May 2007 10:17:21 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=52</guid>	
		<description><![CDATA[<p>Rhino 是一种使用 Java 语言编写的 JavaScript 的开源实现。与本系列的其他很多语言一样，Rhino 是一种动态类型的、基于对象的脚本语言，它可以简单地访问各种 Java 类库。Rhino 从 JavaScript 中借用了很多语法，让程序员可以快速编写功能强大的程序。最为明显的区别是，Rhino 不再使用语句结束符( <code>;</code> )，放宽了变量声明规则，并且极大地简化了修改和检索对象属性的语法（没有求助于调用存取方法）。 </p>
<p>由于 Rhino 是 JavaScript 的一种基于 Java 的实现，所以对于 Java 开发人员来说，它应该特别易于使用。JavaScript 的（以及 Rhino 的）语法非常类似于 Java 编程语言。这两种语言都采用了与 Java 编程语言相似的循环和条件结构，并且遵循类似的语法模式来表示这些结构。</p>
<p>虽然 Rhino 与本系列文章中介绍的其他编程语言具有很多共同点，但对于 Java 平台上的编程而言，它也有独特之处（可能有时有些不同的地方）。Rhino 是一种 <i>基于原型的（prototype-based）</i>语言，而不是一种 <i>基于类的（class-based）</i>语言。在 Rhino 中，您可以构建对象，而不是类。除了类的对象实例之外，这样做还可以让您避免构建和操作类的开发、部署和执行成本。正如您将在文中发现的那样，诸如 Rhino 这类基于原型的语言在开发和运行基于 GUI 的应用程序时尤其有效。 </p>
<p><a name="N10066"><span class="atitle">开始使用 Rhino</span></a></p>
<p>可以从 Mozilla 的 Web 站点（请参阅 <a href="http://www.ibm.com/developerworks/cn/java/j-alj11024/index.html#resources"><font color="#996699">参考资料</font></a>）上下载最新的 Rhino 引擎（在撰写本文时是 Rhino-1.5r5）。将软件包解压至选定的目录中。顶层目录 rhino1_5r5 是软件包的一部分。该目录中包含一些文档、例子、源代码和 js.jar 文件，而 js.jar 文件应该包含在 classpath 中。 </p>
<p>我将广泛地使用交互式 shell，它是在 <code>org.mozilla.javascript.tools.shell</code>包中实现的。可以调用这个 shell，以交互模式（在这种模式中，可以输入要计算的表达式或要执行的代码）或批处理模式运行它。在批处理模式中， <code>-e</code> 选项可以用来运行包含 JavaScript/Rhino 源代码的字符串， <code>-f</code> 选项可以用来执行包含脚本代码的文件。例如，输入下面的命令将以交互模式调用解释器： </p>
<table cellspacing="0" cellpadding="0" width="40%" align="right" border="0">
    <tbody>
        <tr>
            <td width="10"><img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="10" /></td>
            <td>
            <table cellspacing="0" cellpadding="5" width="100%" border="1">
                <tbody>
                    <tr>
                        <td bgcolor="#eeeeee"><a name="N10084"><b>关于本系列文章</b></a><br />
                        <p>虽然 <a href="http://www.ibm.com/developerworks/views/java/articles.jsp?S_TACT=105AGX52&amp;expand&amp;sort_order=desc&amp;search_by=alt.lang.jre&amp;S_CMP=cn-a-j&amp;show_abstract=true&amp;sort_by=Date&amp;view_by=Search"><font color="#5c81a7"><i>alt.lang.jre</i> </font></a>系列文章的大部分读者都对 Java 语言以及它如何在跨平台的虚拟机上运行都非常熟悉，但是却很少有人知道，Java 运行时环境可以支持除 Java 语言之外的其他语言。本系列文章是对 JRE 可用语言的一个概括性介绍。这里介绍的大部分语言都是开源的，可以免费使用，不过也可以购买商业产品。JRE 可以支持本系列文章中介绍的所有语言，这些文章的作者都相信所介绍的语言增强了 Java 平台的动态特性和灵活性。 </p>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" width="60%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">javaorg.mozilla.javascript.tools.shell.Main
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>然后您应该会看到解释器的版本号，后面跟着提示符 <code>js&gt;</code> 。按 <b>Ctrl+Z</b> （Windows 系统上）或 <b>Ctrl+D</b>（Unix 系统上），就可以退出这个 shell。 </p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/java/j-alj11024/index.html#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="N100A7"><span class="atitle">历史简介</span></a></p>
<p>在开始学习 Rhino 基础知识之前，先了解一下有关 JavaScript 的起源和目的可能会非常有用，JavaScript 为 Rhino 提供了很多独特的特性。JavaScript 的历史与 Web 浏览器动态表示和操作 Web 页面内容的能力是相符合的。JavaScript 的第一个版本（最初称为 <i>LiveScript</i>）是由 Netscape Communications 公司于 1995 年发布的，它是 Netscape Navigator 2.0 Web 浏览器的一部分。JavaScript 打算为程序员提供一种简单而直观的方法，编写一些可以在 Web 页面上下文中执行任务的简单脚本。在随后的一年中，Microsoft 引入了 <i>JScript</i>，它自己的用于 Internet Explorer 的 JavaScript 端口。 </p>
<p>这两个版本的 JavaScript 都包括一个基于对象的 API，称为 <i>文档对象模型（Document Object Model）</i>或 DOM，用以访问和操作 Web 页面的内容。JavaScript 的第三个实现是一种新的脚本语言，称为 <i>EcmaScript</i>，其目的是对自己和 DOM 进行标准化。不幸的是，Microsoft 和 Netscape 都没有完全实现 EcmaScript 标准，因此到今天都还存在兼容方面的问题。 </p>
<p>随着 Java 语言在 20 世纪 90 年代末期取得的成功，Netscape 计划发布 <i>Javagator</i>，它是 Navigator 中一个 100% 的纯 Java 实现。虽然 Javagator 从来没能开花结果，但是 Netscape 对 JavaScript 的移植（称为 <i>Rhino</i>）已经经过时间的考验存活了下来。Rhino 是 JavaScript 1.5 脚本语言的一个 100% 的纯 Java 实现，不包含 DOM API。实际上，Rhino 有时仍然被当作 Netscape 的基于 Java 的 JavaScript。 </p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/java/j-alj11024/index.html#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="N100C8"><span class="atitle">JavaScript 中的 &quot;Java&quot;</span></a></p>
<p>在 Rhino 的第一个发行版本中，Netscape 显然想利用 Java 编程语言所取得的成功。在该公司自己的脚本语言中，很明显地从 Java 语言中借用了一些基本的语法。这使得它特别适合 Java 开发人员学习和使用。例如，考虑一下清单 1 中给出的 Java 函数与 Rhino 函数之间的相似性，Rhino 函数测试了给定的数字是否为素数：</p>
<br /><br /><a name="code1"><b>清单 1. Rhino 函数：这个数字是素数吗？</b></a><br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">function isPrime (num)
            {
            if (num &lt;= 1) {
            print(&quot;Please enter a positive integer &gt;= 2.&quot;)
            return false
            }
            var prime = true
            var sqrRoot = Math.round(Math.sqrt(num))
            for (var n = 2; prime &amp; n &lt;= sqrRoot; ++n) {
            prime = (num % n != 0)
            }
            return prime
            }
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>除了几处例外，该程序与 Java 程序非常类似：</p>
<ul>
    <li>圆括号用来分隔代码块。 <br /><br /></li>
    <li><code>for</code> 和 <code>if</code> 结构的语法与 Java 语言的相同。 <br /><br /></li>
    <li>Rhino 与 Java 语言采用相同的算术和条件操作符（例如，对 <i>sqrRoot</i>变量的赋值），甚至可以支持类似的访问其他算术函数的方法。 <br /><br /></li>
    <li>Rhino 允许使用预先定义的布尔常量 <code>true</code> 和 <code>false</code> 。 </li>
</ul>
<p>虽然没有在这里显示，但您应该注意到，Rhino 的 <code>while</code> 和 <code>do...while</code> 循环的结构都与 Java 语言的相同。 </p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/java/j-alj11024/index.html#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="N10117"><span class="atitle">具体区别</span></a></p>
<p>当然，Rhino 和 Java 语言之间有一些显著的区别。首先，由于 Rhino 是采用动态类型的语言，因此在函数和变量的声明中看不到类型。您可以使用 <code>function</code> 关键字开始函数的声明，使用 <code>var</code> 关键字来声明局部变量（这与全局变量不同），但是不用包括正在声明的变量的类型。Rhino 运行库将在执行过程中推断变量的类型。与 Java 语言不同，Rhino 没有语句结束符（在 Java 语言中是分号），不过它也可以支持语句结束符，这是可选的。 </p>
<p>Rhino 和 Java 语言另外一个主要区别是，您可以从解释器中运行如清单 1 所示的程序。如果假设函数的定义在某一个文件中，例如 isprime.js，那么就可以在解释器的提示符中输入下面的命令，其中 <code>path</code> 指向存储该文件的绝对路径： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">load(&quot;&lt;path&gt;/isprime.js&quot;)
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>在返回提示符之前，需要在 Rhino 的解释器中输入下列命令，然后立即就会看到结果 <code>true</code> ： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode"> isPrime(37)
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>采用这种方法，Rhino 解释器的功能类似于&ldquo;便签本&rdquo;，可以在其中输入简单的 Java 代码块进行测试和调试。由于这两种语言的语法是如此相似，因此通常可以从 Java 程序中剪切一些相关代码，将其粘贴到 .js 文件中，并在解释器中加载该文件，然后从 shell 中调用它。</p>
<p>当然，并不是 Rhino 语言与 Java 语言的所有区别都如此微小。在下一节中，您将看到 Rhino 用来区分自己的一些最有用的方法，我们将从大家比较熟悉的文本表示和经常使用的数据类型入手，其中包括数组、hash 表（或称为 <i>联合数组（associative arrays）</i>）、正则表达式、函数以及您可能碰到的对象等。 </p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/java/j-alj11024/index.html#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="N10147"><span class="atitle">数组</span></a></p>
<p>Rhino 中的数组可以表示为放在方括号中的一串使用逗号分隔的数值列表。因此，下面就是 Rhino 中的数组：</p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">
            numbers = [0, 1, 2, 3, 5, 24]
            names = [&quot;Mike&quot;, &quot;Joe&quot;, &quot;Betty&quot;, &quot;Therese&quot;, &quot;Lynn Marie&quot;]
            arrayOfArrays = [1, [2, 3], [3, 4, 5, [6, 7]], 8]
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>第三个例子说明数组中的元素不一定非得是简单类型。</p>
<p><a name="N10157"><span class="smalltitle"><strong><font size="3">联合数组</font></strong></span></a></p>
<p><i>联合数组（associative array）</i>是另外一种数据类型，它可以表示为一个字符串。联合数组在其他语言中有时称为 <i>词典（dictionary）</i>或 <i>hash 表</i>，它是一系列关键字-值对，关键字和值使用冒号（:）分隔开。Rhino 中的联合数组的作用与 Java 语言中的 <code>java.util.HashMap</code> 非常相似。下面是 Rhino 中的联合数组： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">
            person = {name:&quot;Mike Squillace&quot;, age:37, position:&quot;software engineer&quot;}
            link = {text:&quot;IBM Home&quot;, url:&quot;http://www.ibm.com&quot;}
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>可以使用两种方法来引用该列表中的元素。要设置刚才定义的 <code>person</code> hash 表中的 <code>age</code> 属性，您可以这样使用： <code>person[&quot;age&quot;] = 39</code> ，或者使用 <code>person.age = 39</code> 。要读取该值并将其保存在变量 <i>myAge</i> 中，您可以这样使用： <code>myAge = person[&quot;age&quot;]</code> ，或者使用 <code>myAge = person.age</code> . </p>
<p>Rhino 将典型的有索引的数组作为一种特殊的联合数组来对待：它们只是一些关键字是正整数的联合数组。因此，下面这两行代码实际上定义的是完全相同的数组：</p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">a1 = [&quot;fee&quot;, &quot;fi&quot;, &quot;fo&quot;]
            a2 = {0:&quot;fee&quot;, 1:&quot;fi&quot;, 2:&quot;fo&quot;}
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p><a name="N10196"><span class="smalltitle"><strong><font size="3">通过属性进行循环</font></strong></span></a></p>
<p>Rhino 提供了一种特殊的循环结构： <code>for...in</code> 结构，它可以通过联合数组中的属性进行循环。下列代码输出了刚才定义的 <code>person</code> 联合数组，以及这些属性的值： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">for (prop in person) {
            print(&quot;person[&quot; + prop + &quot;] = &quot; + person[prop])
            }
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>当然，我是通过一个类 hash 表结构实现循环的，因此不能保证每个属性及其值都可以输出。</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/java/j-alj11024/index.html#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="N101AE"><span class="atitle">正则表达式</span></a></p>
<p>与数组类似，在 Rhino 中也可以使用 <i>正则表达式</i>来表示文本，使用 Perl 和其他脚本语言的用户应该非常熟悉其语法。在 Rhino 中，当表示为文字值时，正则表达式是通过正向斜线（/）来分隔的。 </p>
<p>在 Rhino 中，正则表达式被传递给字符串对象的方法，以便更简单地执行文本处理任务。例如，下面的第一行代码定义了一个正则表达式，它可以匹配算术表达式中的正整数和标准算术操作符。第二行代码通过调用 <code>match</code> 函数处理给定的表达式，如下所示： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">tokenExpr = /\d+|[\+\-\*\/]/g
            &quot;38-4+98/5&quot;.match(tokenExpr)
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>结果是生成一个 Rhino 字符串数组，数组的元素包含以下内容：</p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">&quot;38&quot;, &quot;-&quot;, &quot;4&quot;, &quot;+&quot;,&quot;98&quot;,  &quot;/&quot;, and &quot;5&quot;
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/java/j-alj11024/index.html#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="N101CC"><span class="atitle">函数显式声明</span></a></p>
<p>最后，Rhino 提供了 <i>函数</i>数据类型。正如前面介绍的那样，Rhino 作为第一类数据类型支持函数 &mdash;&mdash; 可以从函数中返回，也可以传递到函数中，还可以在变量声明中使用。因此，我可以在解释器提示符中编写下面的代码，并得到结果 9，这是定义平方函数的期望结果： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">square = function (x) { return x * x }
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>按照这个平方函数的定义，我输入了以下内容：</p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">square(3)
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>这样定义的函数不但可以用来处理文本，还可以用来处理其他数据。例如，我可以定义一个如下所示的联合数组函数：</p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">fnList = {
            square:function (x) {return x * x},
            cube:function (x) {return x * x * x},
            sqrt:function (x) {return Math.sqrt(x)}
            }
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>然后我可以对数组中的列表循环调用该函数，输出每个函数的值，就像它是一个数字一样。例如，我可以编写下面的代码：</p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">for (fnName in fnList) {
            print(&quot;The &quot; + fnName + &quot; of &quot; + 3 + &quot; is &quot; + fnList[fnName](3))
            }
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>将获得如下所示结果：</p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">The square of 3 is 9
            the sqrt of 3 is 1.7320508075688772
            The cube of 3 is 27
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/java/j-alj11024/index.html#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="N101F8"><span class="atitle">Rhino 中的对象</span></a></p>
<p>在使用联合数组并且将函数表示为文本之后，就可以在 Rhino 中将任何对象表示为联合数组。实际上，对象的文本表示只不过是一个联合数组，它可能包含某些函数作为一些值。下面这个例子将展示在 Rhino 中使用对象是多么简单，Rhino 处理这些对象表现得多么强大。在开始这个例子之前，请再次考虑 <code>person</code> hash 表的例子： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">person = {name:&quot;Mike Squillace&quot;, age:37, position:&quot;software engineer&quot;}
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>在 Rhino 中，这是一个联合数组的文本表示，不过更确切的说，它是一个对象的文本表示。这种表示在 Rhino 中也称为 <i>对象初始化</i>。刚才定义的值的类型是由解释器在输入上面的定义之后根据下面的代码进行判断的： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">[object Object]
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p>上面的代码说明了变量 <code>person</code> 中存放的值是 <i>Object</i>类型的。 </p>
<p><a name="N1021F"><span class="smalltitle"><strong><font size="3">添加方法</font></strong></span></a></p>
<p>然后，我将向您展示，在重新定义 <code>person</code> 对象，以包含检索该对象的第一个名称的函数时，会出现什么样的情况。我将通过编写下面的代码来展示这一点： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">person = {
            name:&quot;Mike Squillace&quot;,
            age:37,
            position:&quot;software engineer&quot;,
            getFirstName:function () {return this.name.split(&quot; &quot;)[0]}
            }
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>该函数（更确切地说是方法） <code>getFirstName</code> 使用了 <code>this</code> 指针来引用当前的对象，并对 <i>name</i> 属性调用 <code>split</code> 方法。然后， <code>split</code> 方法返回一个数组，其中保存了根据空格字符将给定字符串分割成子字符串的结果。最后取得该数组的第一个值并返回。 </p>
<p>我们已经很熟悉调用新的 <code>getFirstName</code> 函数的方式，如下所示： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">person.getFirstName()
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>圆括号告诉 Rhino 解释器我正在调用一个函数，而不是简单地引用一个对象的属性。然而要注意的是，该函数本身也只是另一个 <code>person</code> 对象的属性，如果没有圆括号，它将引用一个未定义的值。 </p>
<p><a name="N10258"><span class="smalltitle"><strong><font size="3">添加更多的方法</font></strong></span></a></p>
<p>Rhino 还可以允许动态地为对象添加属性和方法。例如，如果想添加一个检索通过 <code>person</code> 对象表示的某人名字的方法，那么只需简单输入下列代码即可： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">person.getLastName = function () {return this.name.split(&quot; &quot;)[1]}
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>现在，当我输入下面的方法时，就可以得到想要的结果，在本例中，这个结果是 &quot;Squillace&quot;：</p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">person.getLastName()
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>（注意，您可以使用 <code>delete</code> 操作符来删除任何属性，例如 <code>delete person.getLastName</code> 。） </p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td>
                        <td valign="top" align="right"><a class="fbox" href="http://www.ibm.com/developerworks/cn/java/j-alj11024/index.html#main"><b><font color="#996699">回页首</font></b></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="N1027B"><span class="atitle">使用原型</span></a></p>
<p>虽然上面这个例子非常有趣，但是您可能不希望一直使用对象初始化来定义个别某些人。幸运的是，Rhino 提供了另外一种创建对象的方法：使用 <i>构造函数（constructor function）</i>。例如，下面的函数可以作为一名 <code>Person</code> 对象的构造函数： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">function Person (name, age, job) {
            this.name = name || &quot;&lt;unknown&gt;&quot;
            this.age = age
            this.job = job || &quot;&lt;unemployed&gt;&quot;
            this.getFirstName = function () {return this.name.split(&quot; &quot;)[0]}
            this.getLastName = function () {return this.name.split(&quot; &quot;)[1]}
            }
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>拥有构造函数之后，就可以使用 <code>new</code> 操作符来创建对象了，如下所示： </p>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">mike = new Person(&quot;Mike Squillace&quot;, 37, &quot;software engineer&quot;)
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>任何函数都可以用作构造函数，不过通常希望使用定义（使用 <code>this</code> 指针来引用正在定义的对象）对象属性的函数以及为这些属性赋值（或函数）的函数作为构造函数。 </p>
<p><a name="N102A1"><span class="smalltitle"><strong><font size="3">无类编码</font></strong></span></a></p>
<p>作为一个 Java 开发人员，您很可能会认为下一个步骤是在 Rhino 中定义 <code>Person</code> 类。实际上，Rhino 并不需要这样定义类 &mdash;&mdash; 因为它根本就不使用类！在 Rhino 中既没有类，也没有类的实例，只有特定的对象。当调用 <code>new</code> 操作符时，构造函数就为对象创建一个所谓的 <i>原型（prototype）</i>；也就是说，它创建了一个 <i>模板（template）</i>，从中构建给定类型的对象。 </p>
<table cellspacing="0" cellpadding="0" width="40%" align="right" border="0">
    <tbody>
        <tr>
            <td width="10"><img height="1" alt="" src="http://www.ibm.com/i/c.gif" width="10" /></td>
            <td>
            <table cellspacing="0" cellpadding="5" width="100%" border="1">
                <tbody>
                    <tr>
                        <td bgcolor="#eeeeee"><a name="N102BA"><b>基于类的语言与基于原型的语言的比较</b></a><br />
                        <p>诸如 C++ 和 Java 之类的 <i>基于类的语言</i>使用一个类定义来表示一组具有特定属性集的对象，包括用来表示类的实例和这些实例可以执行的任务类型的数据。一旦编写并编译了类定义，就不能在运行时再对其进行修改，该列的所有实例都包含该类中定义的数据和方法（也可能 <i>只有</i>这些数据或方法）。在这种情况下，所有的类都是 <code>Class</code> 类的实例。 </p>
                        <p><i>基于原型的语言</i>并不区分类和实例；它们只识别基于原型或模板的特殊对象。原型定义了对象初始化时使用的属性。基于原型的实例的属性以及原型本身在任何时间都可以修改。因此，不需要一个&ldquo;类&rdquo;对象或数据类型。从某种意义上来说，我们可以认为基于原型的语言是基于对象的差异性，而不是基于对象的共同性。 </p>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<p>在诸如 Rhino 之类的基于原型的语言中，您可以修改特定对象的属性，或者其原型的属性。例如，如果想为刚才定义的 <code>mike</code> 对象中添加一个特殊属性，可以使用下面的方法： </p>
<table cellspacing="0" cellpadding="0" width="600" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">mike.disability = &quot;blind&quot;
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>我还可以通过引用 <code>Person</code> 构造函数的原型属性来修改 <code>Person</code> 的属性。如果以后想为所有从这个构造函数中派生出来的对象都添加一个 <code>birthdate</code> 属性，可以使用下面的方法： </p>
<table cellspacing="0" cellpadding="0" width="600" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">Person.prototype.birthdate = null
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>然后使用：</p>
<table cellspacing="0" cellpadding="0" width="600" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">mike.birthDate = new Date(66, 10, 3)
            // months are zero-based: this is 11/3/66
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>还要注意基于 <code>Person</code> 原型创建的新对象都有 <code>birthdate</code> 属性，因此下面的代码是有效的： </p>
<table cellspacing="0" cellpadding="0" width="600" border="0">
    <tbody>
        <tr>
            <td class="code-outline">
            <pre class="displaycode">jami = new Person(&quot;Jami Bomer&quot;, 25, &quot;unemployed&quot;)
            jami.birthdate = new Date(79, 5, 28)
            </pre>
            </td>
        </tr>
    </tbody>
</table>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=51</link>
			<title><![CDATA[数据采集和抽取在预警系统中的重要作用]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,04 May 2007 20:49:45 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=51</guid>	
		<description><![CDATA[<blockquote>当今各行各业都需要预警系统来降低风险，数据挖掘可以帮助预警系统来发现各种数据中的警告。</blockquote><!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
<p>&nbsp;</p>
<p>每天，企业都要面对产品质量、法人责任、竞争环境的风云变幻、品牌衰退等问题的威胁。如果没有一个系统收集和分析能够指出潜在威胁的数据，那么企业就只能祈祷运气降临到自己头上了。</p>
<p>世界最大的轮胎制造商在 2000 年 8 月付出了惨重的代价才深深体会到了这一点。当时该公司在一款流行的运动休闲车的轮胎外胎面突然脱落造成的一连串事故后召回了 650 万个轮胎。根据美国高速公路交通安全局（National Highway Traffic Safety Administration，NHTSA）的统计，单在美国境内，由于轮胎引起的交通事故就可能达到 750 起，造成 62 人死亡。汽车制造商声称早在 1998 年就已经对这些轮胎的质量产生了怀疑。尽管早已指出了这个问题，但汽车和轮胎制造商未能意识到问题的严重性，直到很久之后，这个问题给这些公司及其顾客带来了可怕的后果。</p>
<p>涉及国家防御的政府机构也遇到了类似的问题。智能服务中的信息日益泛滥。整理所有信息并将它们放到一起以精确地指出紧急威胁并及时做出反映不再是件容易的事情了。幸好，数据挖掘技术可以帮助发现各种数据中隐藏的警告。</p>
<p>预警系统提供了系统地收集和分析数据以识别出现的威胁或问题的能力。为了让这些系统有用，只要数据中累积了足够多的证据支持该问题，就必须马上识别威胁。该系统不能遗漏太多真正的威胁，也不能预测太多永远不发生的威胁。好的预警系统有助于识别潜在的问题、分析它们的特征和起因，并量化它们的严重性。在某个特定月份中在某种条件下检测故障率的突然上升只是其任务的一部分；系统还应该能够估计这个故障率会否继续上升，并预测如果不予理睬其影响又如何。</p>
<p>这些系统有许多用途。跟踪新闻稿、专利公布和合并与收购活动可以帮助确认由于竞争对手、供应商、顾客或合作伙伴的策略变化而导致的潜在威胁。监控和分析新闻组和邮件列表中顾客张贴的内容和对呼叫中心的投诉可以帮助发现市场动态和品牌观念的趋势。汽车制造商经常扫描大型的保修索赔数据库，以检测零部件故障率的趋势，从而可以指出质量或安全问题。在与经济诈骗、洗钱、贪污、有组织犯罪和恐怖份子融资的斗争中，一些全球金融机构最近联合了力量来收集并利用公共信息，以更好地确认与客户交易相关的法律、规章和信誉风险。</p>
<p>管理已确认的重要问题涉及到一个组织的方方面面。因此，完善的预警系统通常包含了工作流管理和协作能力，以支持与打开、调查、关闭重要问题以及调度和跟踪操作（以便管理重要问题）相关的业务过程。官僚主义、过时的策略和组织的划分范围都可以给信息共享和集成式分析造成障碍。但是，这是数据挖掘的专题，我们假设这些非技术问题都可以解决，所以把精力完全放在技术问题上。</p>
<p>虽然每个领域都不同，但这些预警系统都有许多相同的元素。我们将详细说明这些元素。</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /><br /></td>
        </tr>
    </tbody>
</table>
<br /><br />
<p>&nbsp;</p>
<p>预警只是一种可能性，表示数据中隐含威胁的迹象。这些初期指标通常来自各种不同的来源。所收集的数据也许会来自现有的内部系统，该系统是为支持操作需要（如呼叫中心的保修索赔处理或顾客联系管理）而构建的。也可能来自外部数据库、新闻或专利服务器和 Web 的搜索结果。在确认所有相关来源之后，数据收集器会按常规计划或者甚至实时地搜索、选择、传送所有可能相关的数据，并供预警解决方案使用。在最近与汽车制造商一起进行的一项工作中，我们每天都从保修索赔系统、生产系统、呼叫中心、法律责任案例的资源库和 NHTSA 中收集数据。</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<br /><br />
<p>&nbsp;</p>
<p>警告指标通常被无关数据掩藏。对无关的故障和事件的观察也许永远也不能对预测警报趋势有所贡献。允许趋势发展需要集成来自所有可用来源的信息的能力。当任何信息可用时，数据仓库就将该信息合并到公共数据体系结构中，从而为预警解决方案提供了坚实的数据基础。不管信息来源如何，它都可以捕捉到涉及同一实体的所有信息。数据仓库还使数据在长时间内可被快速访问，从而使趋势和重要问题浮现出来。趋势的发展需要多长时间可能取决于产品的预期寿命（用忙闲度或服务时间来衡量）、保修期、法律责任期等。</p>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /><br /><img height="6" alt="" src="http://www.ibm.com/i/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right" class="no-print">
    <tbody>
        <tr align="right">
            <td><br /></td>
        </tr>
    </tbody>
</table>
<br /><br />
<p><a name="4"><span class="atitle">信息抽取</span></a></p>
<p>在我们的实践中，我们发现一些最有价值的警告指标通常都包含在非结构化的数据中，尤其是文本。在汽车制造公司中，要处理取自六个来源（包括非结构化的文本字段）的数据，如关于故障的原因或症状的专家注释、对制造商的呼叫中心和 NHTSA 的客户投诉的副本以及诉讼案例的摘要。我们构建的解决方案每天会自动处理数以百计的记录，以寻找可以提高安全性或其它重要问题的指标。</p>
<p>进入预警解决方案的非结构化的数据使信息抽取成为必要。信息抽取是指将非结构化的数据转换成结构化的数据格式的过程，从而支持数据集成或数据分析。</p>
<p>信息抽取（只关注文本数据）的相关技术包括：</p>
<p><b>特性抽取。</b>文本挖掘工具可以定义和派生一组特性，这些特性会捕捉适合于正在被分析的文档集合的关键术语和概念。特性可以是多单词术语、人名、组织名和地名、缩写和关键的数字，如货币金额和日期。算法将&ldquo;信用透支（credit facility）&rdquo;、&ldquo;信用额度（credit line）&rdquo;、&ldquo;里昂信贷银行（Credit Lyonnais）&rdquo;和&ldquo;瑞士信贷银行（Credit Suisse）&rdquo;看成是四种独立的概念。每个特性都有可能成为一段结构化数据。 </p>
<p><b>文档群集和分类。</b>捕捉关键术语和概念的特性通常也描绘了文档内容的常规性质。根据特性，可以将文档分成一个或多个类（类别）。如果给定一组文档，群集技术就会构成一组组主题类似的文档。每个组都可以用该组中文档最突出的特性标记。当存在一组预先定义的类别和已经分配到这些类别的文档的示例时，文档分类技术就可以归纳出区别这些类别的模型。这些模型可以让您根据任何文档的特性，自动将其分类到一个或多个预先定义的类别。已分配的类表示结构化数据的有价值部分，不管该分配是由群集技术还是由分类技术执行的。 </p>
<p><b>信息抽取的自然语言处理。</b>信息抽取通常要求在语句级别对文本进行更详细的分析。通常，特定种类的实体、事件、操作和它们之间的关系是潜在威胁域中的重要部分。例如，在汽车的示例中，我们创建的解决方案必须在每个文本块中标识所引用的汽车特定的零部件、对这些零部件所做的故障或症状报告，以及任何严重事件的发生（如翻车或死亡事故）。在金融服务中，将人名或业务实体名与特定的犯罪行为的定罪和所记载的辩解相关联是很重要的。线点科技的垂直搜索系统产品（VSE）使用可伸缩自然语言处理技术来分析大文档集合的内容，从而抽取信息并生成反映这些文档的词法和概念内容的助诊文件。所抽取的信息用于查询改进、导航文档数据库中的重要概念和准备并提供文档摘要。 </p>
<p>VSE包括用于词法和形态分析、语音部分标记、语法和句法分析以及解析的组件。输入中的文档被当作单词流提供给VSE。在输出中，VSE通过在被称为解析树的多级别层次结构中捕捉单词及其用法的特征之间的关系，来显示文档的结构。图 2 显示了在处理包含语句&ldquo;Side air bag didn't deploy when vehicle was involved in accident.&rdquo;的文档之后生成的解析树的简化版本。请注意，树上描述的关系确定了&ldquo;vehicle&rdquo;是动词组&ldquo;was involved&rdquo;的被动语态主语，并且有一个谓语介词短语&ldquo;in accident&rdquo;。解析树还确定了侧气囊没有弹出，而且用&ldquo;when&rdquo;从句进一步限定了该语句。如果没有这种文本分析，那么句子中每个单词的角色就会不能识别。如果没有那些资料，您就不能确定，例如，是气囊还是汽车没有弹出。<br /><img alt="图 2" src="http://www.ibm.com/developerworks/cn/db2/library/techarticles/mag_0211miner/images/miner_fig2.gif" border="1" /> <br /></p>
<p>准备解析树是信息抽取的第一步。下一步是检查所关心的模式的树。主题专家为信息抽取准备了特定于领域的业务规则。每个规则都包含了与解析树的各组成部分相匹配的模式，以及用于只要发现匹配就以结构化数据格式从树中抽取信息块的指令。</p>
<p>以下是一个业务规则的示例，它将抽取一个实例，在该实例中，某个汽车零部件（如气囊）显示了&ldquo;no deployment&rdquo;故障。该规则的模式将指定一个主动语态句子，其中：</p>
<p>1. 主语短语匹配汽车零部件。</p>
<p>2. 动词组包含了任何时态的动词&ldquo;to deploy&rdquo;，但却是以否定形式。</p>
<p>规则的信息抽取操作将指定&ldquo;no deployment&rdquo;作为故障代码，将主语短语中所匹配的汽车零部件的代码指定为故障零部件。在一个领域中有几百个信息抽取规则并不罕见。通常，每个规则都要对每个文档进行处理，因此拥有一个非常有效的规则处理引擎很重要。例如，在汽车的示例中，我们设计了一个可以一整夜处理接近 10 万个文档的规则引擎。</p>
<p>Talent 中的自然语言处理组件和规则处理引擎的体系结构都是与语言无关的，但所实现的许多分析函数都主要适用于英语。多语言领域需要特定于语言的分析组件或在信息抽取之前将文档翻译成英文的机器翻译技术</p>
<p>准备好数据基础之后，即已经有了正确集成的来自所有相关来源的数据和从任何非结构化的数据中抽取的信息，就可能查找预警指标、监控趋势和深入地分析数据。</p>
<p>查询、报告和在线分析处理（OLAP）工具是任何预警系统的必备部件。可以编制标准报告来按常规调度表生成和发布报告。在汽车公司里，我们编制了许多报告以满足新的管理报告需求。这些工具还提供了对用于特别分析以及分析预警系统识别的潜在问题的数据的访问。所关心的一些问题是：重要问题后面的事件是什么？随着时间的流逝，它们的频率趋势是什么？这些事件在什么条件下会发生？随着时间的流逝，是否会出现模式？这些工具有助于证实、反驳和改进搜索这些和其它问题的答案时的假设有效的预警系统应该在数据可用时主动分析数据。通常，预警信号首先作为数据中的异常出现：偏离所建立的标准和预期的行为。如果在搜索异常之前没有假设预期有什么行为，那么搜索异常是最复杂的。搜索应该尽可能公正并且是数据驱动的。可以从历史数据归纳出各种情况的预期行为的模型。这样的模型让分析员可以将实际观察到的行为与预期行为进行比较，并确定任何偏差是否可能很重要。</p>
<p>出于某些原因，异常检测是一项很困难的任务。首先，通常很难开发精确的预期行为模型。其次，通常可能发生异常的潜在情况的数量非常大；因此搜索空间通常也很大。考虑观察汽车引擎着火事故。通常都会从许多角度来描述每个事故，包括汽车的品牌和型号、里程表上的里程数和事故的地理位置。要确定着火事故发生率是否有异常涉及独立地分析多维数据立方体中所有聚合级别的所有单元。单元的每个聚合相当于一组不同的条件（在这组条件下，可能在着火率中出现异常）：例如，某个特定品牌和型号的汽车或在某个特定地理位置发生的异常。</p>
<p>预警数据仓库会经常用新数据进行更新。可以借助查询、报告和 OLAP 工具来访问这些数据。同时，发现驱动的数据挖掘操作会经常查找异常并帮助发现模式和异常的趋势。在任何时候都会有一组重要问题正在进行处理。其中一些刚被确认为潜在重要问题，而且其它的可能处于调查和管理的各个阶段。整个系统的事件状态通常以数据和过程的形式通过仪表板（dashboard）（可以定制以满足每个用户的需要）提供给分析员和管理层。</p>
<p>仪表板提供了一个新的数据访问和表示层，它可以： <br /></p>
<ul>
    <li>围绕业务活动（如打开一个用于调查的新的重要问题）组织仓库中的事故、事件和相关数据 </li>
    <li>定义与这些活动相关的业务度量，管理它们的工作流 </li>
    <li>提供交互式导航或探索的功能 </li>
    <li>通过动态链接的记分卡、报告、图表以及突出显示重要信息的地图来提供数据的集成视图 </li>
    <li>将对决策支持工具的访问集成到工作流管理系统中，并为分析员提供一个协作环境。 </li>
</ul>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=50</link>
			<title><![CDATA[垂直搜索引擎深度分析]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,02 May 2007 22:44:06 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=50</guid>	
		<description><![CDATA[1． 何为垂直搜索引擎<br />　　<br />　　所谓垂直搜索引擎（Vertical Search Engine），是针对某一特定领域、某一特定人群或某一特定需求提供的有一定价值的信息和相关服务。其特点就是&ldquo;专、精、深&rdquo;，且具有行业色彩。它是与通用搜索引擎截然不同的引擎类型。垂直搜索引擎专注具体、深入的纵向服务，致力于某一特定领域内信息的全面和内容的深入，这个领域外的闲杂信息不收录。<br />　　从竞争的角度来讲，垂直搜索引擎要做通用搜索引擎无法做到的事情，或者说，要做得更胜一筹。通用搜索引擎像一堵大墙，而墙上有很多裂纹，垂直搜索引擎就是要去补这些墙上的裂纹。<br />　　<br />　　2． 为什么要垂直搜索引擎<br />　　<br />　　从2005以来，越来越多的人在谈论垂直搜索引擎，在关注它。为什么？焦点来自与需求。大家不约而同的看到了互联网一块新的领地，而这块领地中正是群雄割据，大家在等待下一个王者的到来。<br />　　这里为什么只谈垂直搜索，而不是通用搜索引擎，原因有三：（1）搜索引擎的技术门槛很高。Google的创始人是超级名校Stanford计算机系的PHD，Baidu的Robin Li也是领了多项搜索技术专利才敢切入搜索领域。可以说，没有3年以上的搜索技术积累，请不要涉及搜索领域。（2）搜索引擎的资金投入非常大，Google光是爬虫服务器就数万之巨，再加上网络带宽的购买，相信这些投入非一般人可以承受。可以说，没有千万级别的资金在手，请不要进入搜索引擎领域。（3）通用搜索引擎经过多年的发展已经非常成熟，各个巨头都已经占山为王， 在快鱼吃慢鱼的互联网里，落后就意味着无法生存。<br />　　因此，垂直代表含义是，第一，门槛低，第二，做得更专更深，第三，信息展现力更强。<br />　　<br />　　3． 垂直搜索引擎的突破与创新<br />　　<br />　　垂直搜索引擎的优势，将决定它在互联网的一席之地。那么垂直搜索的突破点和创新的东西在哪里？<br />　　<br />　　3.1 实时性<br />　　<br />　　垂直搜索引擎需要获取的信息来自于某一特定领域的，这比起通用搜索引擎漫无边际的信息抓取，有一个非常大的优势，那就是信息的实时性。由于互联网上的信息量非常巨大，通用搜索引擎的数据更新周期短则十几天，长则几个月，而垂直搜索引擎的数据更新完全可以以秒为单位。酷讯（kooxoo.com）的火车票搜索就是典型的实时性垂直搜索。<br />　　<br />　　3.2数据挖掘分析，BI，报表<br />　　<br />　　行业的历史发展、最新动向、趋势都是行业从业人员非常关注的话题。垂直搜索引擎集中了行业海量的信息和数据，基于这些信息和数据的商务智能分析，将为行业创造非常有价值的信息增值服务。<br />　　目前，各个垂直搜索引擎开始加强数据分析功能，分析的结果尚未向公众免费开放，毕竟，这也是一个非常好的盈利点。<br />　　<br />　　3.3 个性化，社会化<br />　　<br />　　查询服务只是垂直搜索引擎的一部分，垂直搜索引擎在用户的个性化方向的发展非常重要。垂直搜索引擎不能只提供一个窗口，它应该是一个用户高度参与交互的社会化平台。这不光是用户粘度，忠诚度的问题，更为重要的是，垂直搜索引擎需要能够获取并且分析用户的偏好信息，从而提供更加完善而且准确的数据服务。<br />　　　　<br />　　3.4智能化语义网<br />　　<br />　　语义网（Semantic Web）将有可能成为下一代互联网，这样网络上的数据和信息将被计算机程序所理解。这将为垂直搜索引擎提供一个巨大的机会，爬虫程序如果能理解网络上的数据，将对信息的收集和整理更加准确和专业，搜索服务的查全率和查准率将更高。国外的Pluggd（www.Pluggd.com）正在向这个方向努力。<br />　　<br />　　3.5多元化查询<br />　　目前的搜索引擎，都只局限于关键字搜索，其中主要的原因是，对用户的查询需求无法建模，无法模式化。而关键字搜索带来的问题是，搜索结果过多，并且不准确。互联网信息量越大，这种情况越严重，可以说是灾难。多元化查询服务的提供，将会成为对竞争对手的杀手锏。Riya（www.riya.com）正在这方面尝试，它提出了可视化查询（Visual Search）的概念。<br />]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=49</link>
			<title><![CDATA[垂直搜索引擎的定义]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,02 May 2007 22:35:47 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=49</guid>	
		<description><![CDATA[<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">什么是垂直搜索引擎</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 14pt"> </span></b>
<p>&nbsp;</p>
<b style="mso-bidi-font-weight: normal"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">垂直搜索引擎的定义</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> </span></b>
<p>&nbsp;</p>
<span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">搜索引擎的出现，整合了互联网上众多的网页资源，并提供信息导航和信息查询服务，使信息的价值得到了网民和厂商的普遍认可。但是，搜索引擎的发展格局是多方面的，市场需求的多元化也导致了搜索引擎的行业化和细分化，从而&ldquo;垂直搜索引擎&rdquo;成为了搜索引擎发展的必然趋势之一。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"> </span>
<p>&nbsp;</p>
<span lang="EN-US" style="COLOR: black; LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">线点科技</font></span><span style="COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">认为：垂直搜索引擎是针对某一个行业或组织，满足行业专业需求、或者组织某项业务需求的</span><span lang="EN-US" style="COLOR: black; LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><a href="http://www.xd-tech.com.cn"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">垂直搜索引擎</span></span></a></span><span style="COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">，是搜索引擎的细分和延伸，是对某类网页资源和结构化资源的深度整合，并为用户提供符合专业用户操作行为的信息服务方式。</span><span lang="EN-US" style="COLOR: black; LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;</span><span lang="EN-US" style="COLOR: black; LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">&nbsp;</font></span></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">政府相关的垂直搜索引擎</span><span lang="EN-US">&nbsp;&nbsp;</span></b></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd; mso-char-indent-count: 2.0"><span style="COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">主要表现为面向内部的垂直搜索和面向外部的垂直搜索，面向内部的垂直搜索主要是指政府内部专网网站群的搜索，同时集成数据库搜索功能，为政府工作人员和领导提供快速定位信息的方式，为日常工作和领导决策提供支持；面向外部的垂直搜索主要是指政府门户网站群搜索，同时集成法律法规等数据库搜索功能，整合政务服务资源，为民众和企业提供更好的服务，最大的发挥政务资源的效用。</span><span lang="EN-US" style="COLOR: black; LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></p>
<p>&nbsp;</p>
<h1 style="MARGIN: 17pt 0cm 16.5pt"><span style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 240%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">垂直搜索、企业搜索、互联网搜索的区别</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 240%"> </span></h1>
<table class="MSOTABLEGRID" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 464.4pt; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" width="619" border="1">
    <tbody>
        <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 59.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt" valign="top" width="79" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
            <p><font face="Times New Roman">&nbsp;</font></p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0cm; WIDTH: 117pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="156" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">互联网搜索</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0cm; WIDTH: 144pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="192" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">企业搜索</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; BACKGROUND: #e0e0e0; PADDING-BOTTOM: 0cm; WIDTH: 144pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="192" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">垂直搜索</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 1">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BACKGROUND: #cccccc; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 59.4pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="79" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">信息采集</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; PADDING-BOTTOM: 0cm; WIDTH: 117pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="156" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">采集方式：被动方式为主</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">采集深度：要求不高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">动态网页采集的优先级：低</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结构化数据库信息采集：要求不高</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; PADDING-BOTTOM: 0cm; WIDTH: 144pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="192" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">采集方式：主动方式为主</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">采集深度：要求较高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">动态网页采集的优先级：较高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结构化数据库信息采集：要求高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p><font face="Times New Roman">&nbsp;</font></p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; PADDING-BOTTOM: 0cm; WIDTH: 144pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="192" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 45pt; TEXT-INDENT: -45pt; mso-char-indent-count: -5.0"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">采集方式：被动方式和主动方式相</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 45pt; TEXT-INDENT: -45pt; mso-char-indent-count: -5.0"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结合</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">采集深度：要求高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">动态网页采集的优先级别：高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结构化数据库信息采集：要求高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 2">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BACKGROUND: #cccccc; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 59.4pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="79" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">信息加工</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; PADDING-BOTTOM: 0cm; WIDTH: 117pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="156" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网页元数据提取：要求不高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结构化信息提取：要求不高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">排重、分类：要求不高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; PADDING-BOTTOM: 0cm; WIDTH: 144pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="192" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网页元数据提取：要求较高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结构化信息提取：要求不高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">排重、分类：要求高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; PADDING-BOTTOM: 0cm; WIDTH: 144pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="192" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网页元数据提取：要求高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结构化信息提取：要求高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">排重、分类：要求高</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
        </tr>
        <tr style="mso-yfti-irow: 3; mso-yfti-lastrow: yes">
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BACKGROUND: #cccccc; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 59.4pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="79" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">信息检索</span><span lang="EN-US">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; PADDING-BOTTOM: 0cm; WIDTH: 117pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="156" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">检索方式：非结构化信息为主</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结果排序：</span><span lang="EN-US" style="FONT-SIZE: 9pt"><font face="Times New Roman">PageRank</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">算法</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p><font face="Times New Roman">&nbsp;</font></p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; PADDING-BOTTOM: 0cm; WIDTH: 144pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="192" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">检索方式：结构化信息和非结构化信息相结合</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结果排序：相关度排序为主</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p><font face="Times New Roman">&nbsp;</font></p>
            </span></p>
            <p>&nbsp;</p>
            </td>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #f0f3f8; PADDING-BOTTOM: 0cm; WIDTH: 144pt; BORDER-TOP-COLOR: #f0f3f8; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="192" background="">
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">检索方式：结构化信息和非结构化信息相结合</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            <p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结果排序：需求多样化</span><span lang="EN-US" style="FONT-SIZE: 9pt">
            <p>&nbsp;</p>
            </span></p>
            <p>&nbsp;</p>
            </td>
        </tr>
    </tbody>
</table>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font face="Times New Roman">&nbsp;</font></p>
</span></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">
<p><font face="Times New Roman">&nbsp;</font></p>
</span></p>
<p>&nbsp;</p>
<h2 style="MARGIN: 13pt 0cm 13pt 10.5pt"><span style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 173%; FONT-FAMILY: 宋体">信息采集：融合了互联网搜索和企业搜索的特点<span lang="EN-US">&nbsp;&nbsp;</span></span></h2>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">从采集方式看，互联网搜索以被动方式为主，搜索引擎和被采集的网页没有约定的、标准的格式；企业搜索以主动方式为主，被采集的办公文档、</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">CRM</font></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">和</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">ERP</font></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">中的数据等都和企业搜索引擎有着约定好的采集接口和安全接口；垂直搜索则采用被动和主动想结合的方式，通过主动方式，有效采集网页中标引的元数据，整合上下游网页资源或者商业数据库，提供更加准确的搜索服务。如：中华人民共和国中央人民政府网站垂直搜索引擎，它通过规范副省级政府门户网站网页的表达方式，达到有效采集网页元数据的目的，为企业和个人提供更精准的政务信息搜索服务。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">从对采集深度、动态网页采集的优先级、结构化数据库信息采集来看，互联网搜索采用广度为先的策略，所以对采集深度要求不高，而垂直搜索和企业搜索需要挖掘出行业内所有相关的网页信息，所以往往采用深度为先的策略，同时由于行业内的一些有商业价值的信息采用动态发布的方式，如：企业数据库、供求信息等，所以垂直搜索对动态网页的采集优先级别较高。另外，在实际应用中，垂直搜索和企业搜索都需要集成和采集关系数据库中的结构化信息，如：垂直搜索中政府需要集成法律法规库、企业搜索中需要采集</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">ERP</font></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">、</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">CRM</font></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">中的信息等。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></p>
<p>&nbsp;</p>
<h2 style="MARGIN: 13pt 0cm 13pt 10.5pt"><span style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 173%; FONT-FAMILY: 宋体">信息加工：非结构化信息和结构化信息是垂直搜索的特色&nbsp;<span lang="EN-US">&nbsp;</span></span></h2>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd; mso-char-indent-count: 2.0"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><a href="http://www.xd-tech.com.cn"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">垂直搜索引擎</span></span></a></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">和普通的网页搜索引擎的最大区别是对网页信息进行了结构化信息抽取加工，也就是将网页的非结构化数据抽取成特定的结构化信息数据，好比网页搜索是以网页为最小单位，而垂直搜索是以结构化数据为最小单位。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd; mso-char-indent-count: 2.0"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">垂直搜索的结构化信息提取和加工主要包括两种：网页元数据的提取，标题、作者、发表时间、版权所有等等；内容中结构化实体信息的提取，人名、地名、组织机构名、电话号码等等。同时，这些数据存储到数据库，进行进一步的加工处理，如：去重、分类等，最后分词、索引再以搜索的方式满足用户的需求。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd; mso-char-indent-count: 2.0"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">目前，从垂直搜索的应用情况看，大部分垂直搜索的结构化信息提取都是依靠手工、半手工的方式来完成，面对互联网的海量信息，很难保证信息的实时性和有效性，因此对智能化的，结构化信息提取技术的需求非常迫切。同时国内非结构化信息的智能提取技术目前也取得重大进展，在一些领域得到有效应用，智能化是垂直搜索引擎的发展趋势。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></p>
<p>&nbsp;</p>
<h2 style="MARGIN: 13pt 0cm 13pt 10.5pt"><span style="FONT-SIZE: 10.5pt; LINE-HEIGHT: 173%; FONT-FAMILY: 宋体">信息检索：结构化和非结构化相结合的检索方式<span lang="EN-US">&nbsp;&nbsp;</span></span></h2>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">从信息检索看，</span><span style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman"> </font></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">垂直搜索不但能够对网页信息中的结构化信息进行检索，而且能够提供结构化和非结构化信息相结合的检索方式。比如我们找工作关注的：职位信息：</span><span style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman"> </font></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">软件工程师；公司名称：软件公司；地点：北京海淀。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp; </font></span></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">从检索结果的排序方式看，互联网搜索通过</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">PageRank</font></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">算法来实现，企业搜索大多采用检索内容和检索词的相关度进行排序，相对于互联网搜索和企业搜索，垂直搜索的排序需求更加多样化，如：按时间排序、按相关度排序、按某个结构化字段排序（如：购物搜索中的按价格排序等等）。</span><span lang="EN-US" style="COLOR: black; LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">&nbsp;</font></span></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">垂直搜索引擎在政府门户中的应用价值</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 14pt">&nbsp;</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt"><font face="Times New Roman">&nbsp;</font></span></b></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">整合政务资源，有效提升政务资源价值</span><span lang="EN-US">&nbsp;&nbsp;</span></b></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><b style="mso-bidi-font-weight: normal"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp;&nbsp; </font></span></span></b><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">门户技术中的&ldquo;网站群技术&rdquo;和&ldquo;全文检索技术&ldquo;有效的整合了行政领导关系比较紧密地部门内部的信息资源，垂直搜索技术则有效整合了行政领导关系比较松散地机构间的信息资源，使得政务信息资源的聚拢和整合得以最大化，政务资源的可挖掘能力得到提高，从而有效地提升了政务资源的价值。</span><span lang="EN-US">&nbsp;</span><b style="mso-bidi-font-weight: normal"><span lang="EN-US"><font face="Times New Roman">&nbsp;</font></span></b></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一站式检索和导航服务，提高政府门户的公众服务水平</span><span lang="EN-US">&nbsp;&nbsp;</span></b></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><b style="mso-bidi-font-weight: normal"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp; </font></span></span></b><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">面对多如繁星的政府门户网站，用户查询信息和网上办事时往往无所适从，政务垂直搜索引擎的建设恰恰解决了这个问题，用户可以通过搜索引擎的各种检索方式，方便的获取过去需要访问多个网站才能查全的信息，同时也可以通过检索获取网上办事的入口，例如：在央网搜索引擎的规划中将继续开发服务搜索这个模块，通过检索您就可以轻松获取副部级网站上的办事链接网址。一站式检索和导航服务，大大方便了市民和企业，提高了政府门户网站的服务水平。</span><span lang="EN-US">&nbsp;</span><span lang="EN-US"><font face="Times New Roman">&nbsp;</font></span></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><b style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">政治体制改革环境下，&ldquo;凝聚&rdquo;组织机构的有效手段</span><span lang="EN-US">&nbsp;&nbsp;</span></b></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><font face="Times New Roman"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp; </span></span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><span style="mso-spacerun: yes">&nbsp;</span></span></font><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">市场格局的变化，按照&ldquo;大社会、小政府&rdquo;的思维模式，政府介入微观经济领域越来越少，国家各个行业的部分机构由事业型机构转为企业。</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">部委和下面的机构之间已经没有了行政领导职能，但是业务上还是存在千丝万缕的联系，两者还存在业务指导关系。垂直搜索引擎将两者有效的&ldquo;凝聚在一起&rdquo;，通过&ldquo;信息的关联&rdquo;把大家联系在一起，有利于行业内的交流和协作。</span>&nbsp;</p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">垂直搜索引擎在政府门户中的应用展望</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 14pt">&nbsp;</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt"></span></b></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 11.9pt; LINE-HEIGHT: 150%"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">&ldquo;</font></span></b><b style="mso-bidi-font-weight: normal"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">门户</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">+</font></span></b><b style="mso-bidi-font-weight: normal"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">搜索&rdquo;将会成为政府门户网站建设的新模式</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></b></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; TEXT-INDENT: 11.9pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman"><span style="mso-spacerun: yes">&nbsp;</span><span style="mso-spacerun: yes">&nbsp;</span></font></span></b><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">正如上面所述，门户技术（网站群和内容管理技术）只是解决了行政领导关系比较紧密的政府机构的信息资源整合，对于行政领导关系比较松散的政府机构的信息资源整合，则必须采用被动搜索的方式。随着地市级、县级政务门户的普及，省级门户首先考虑采用搜索技术整合下属门户网上资源，为民众、企业提供便捷的信息获取手段和导航服务。实践证明很多省级、部委门户已经展开了政府门户垂直搜索引擎的建设，并取得了很好的效果，&ldquo;门户</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><font face="Times New Roman">+</font></span><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">搜索&rdquo;正在成为政府门户网站建设的新模式。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><b style="mso-bidi-font-weight: normal"><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">联合搜索将会成为政府门户垂直搜索的特色</span></b><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;&nbsp;</span></b></p>
<p>&nbsp;</p>
<p class="MSONORMAL" style="MARGIN: 0cm 0cm 0pt 10.5pt; TEXT-INDENT: 11.9pt; LINE-HEIGHT: 150%; mso-para-margin-left: 1.0gd"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp; </font></span></span></b><span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">随着政府门户中垂直搜索引擎的建设，当下级政府部门已经建立了自身职责范围内的信息资源的整合和搜索以后，上级部门则可不采用被动抓取的方式来整合这部分资源，可以通过联合搜索的方式搜索这部分资源，即：将用户的关键词发送到下级政府部门的搜索引擎，对结果集合并后返回给用户。联合搜索的方式具有下面两个优点：第一，省时省力，节约资金，防止重复建设；第二，和被动的抓取方式相比，获取的信息比较全面和及时。</span><span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">&nbsp;</span></p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=48</link>
			<title><![CDATA[应用技巧：Google搜索引擎的使用]]></title>
			<author>jaddy0302@126.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Thu,26 Apr 2007 14:12:29 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=48</guid>	
		<description><![CDATA[1、汉语拼音输入检索&nbsp;<br/>　　为了方便使用中文的用户在网上搜索，Google允许用户直接在键盘上输入汉语拼音来检索相关事物，例如：&nbsp;<br/>　　输入　shanghaishikebiao&nbsp;<br/>　　检索结果提示：您是不是要找：上海时刻表　&nbsp;<br/>　　这正是我们需要查找的关键词，用户可以据此浏览相关结果，这包括上海地区的各种交通工具的时刻表。如果需要查找更详细的资料“上海飞机航班时刻表”，则只要在原来的检索结果“上海时刻表”中间输入feijihangban，例如：&nbsp;<br/>　　上海feijihangban时刻表&nbsp;<br/>　　Google的这项新功能，可以免除用户在中文和拼音输入方面的互相转换。用户在输入拼音时，不要留有空格，否则Google会误认为英文。Google把拼音与常用的字或者词组一一对应，因此，过于生僻的字或词组不适合于用这个方法查找。&nbsp;<br/><br/><br/>&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;2、中英文字典&nbsp;<br/>　　经常使用计算机的用户手头上自然会有一、两个字典软件，用于查找和翻译中英文的词义。作为一种使用频率较高的工具，Google也提供了一个中英文字典，很方便使用。用户可以按照下列方法查找词义查找英文的中文词义则输入fy　computer查找中文的英文词义则输入　翻译　计算机&nbsp;<br/><br/>　　3、天气查询&nbsp;<br/>　　天气情况也是人们经常要查询的信息之一，Google　提供的天气查询来自于一个更新及时的中文气象网站，适合中国人使用。用户输入中文和英文都可以查询，例如要了解奥运会期间雅典的天气情况，可以按照下列方法输入：&nbsp;<br/>　　雅典　天气　　athens&nbsp;tq　返回的查询结果中会在第一条出现一个　“雅典天气预报”，用户点击后就可以看到当天雅典的天气情况。如果地名相同者，用户还需要进行一次选择。&nbsp;<br/><br/>　　4、股票查询&nbsp;<br/>　　查询股票的网站已经很多了，Google提供的股票查询只是更方便一些而已，用户可以按照股票名称、股票代码或者股票名称的声母字母查询，下列为查询“中国联通”股票行情的举例。&nbsp;<br/>　　中国联通　股票　zglt&nbsp;gp&nbsp;<br/>　　gp&nbsp;600050&nbsp;<br/><br/>　　5、邮政编码和区号查询&nbsp;<br/>　　人们时常需要查询邮政编码和电话区号，Google提供了这样一个实用的功能，用户据此能够获得所要查询的省市名称，邮政编码及长途电话区号，下面为查询举例：&nbsp;<br/>　　邮编　杭州　　　　　　　&nbsp;<br/>　　区号　绍兴　　　　　　　&nbsp;<br/>　　yb　　杭州　&nbsp;<br/>　　qh　　绍兴&nbsp;<br/>　　需要注意的是用户只能查询到城市级别的邮政编码和区号，而无法进一步查询区县的具体信息。&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;6、手机归属地查询&nbsp;<br/>　　用户在输入手机号码后可以获得号码段、归属地、卡类型、邮政编码和电话区号的信息，但是从实用的角度看，其中只有手机归属地的信息较为有用。&nbsp;<br/><br/>　　7、计算器使用&nbsp;<br/>　　Google有计算器的功能，例如在google检索框中输入45*86+35/7，就会得到结果：&nbsp;<br/>　　(45*86)+(35/7)=3875<br/><br/>　　8、购物检索&nbsp;<br/>　　Google新开设的购物检索称之为Froogle，网址为http：//froogle.google.com/&nbsp;<br/>　　用户只要输入商品的名称，就可以看到该商品的图片和价格，用户还可以限定一种商品的价格进行检索，并且将检索结果按需要从高价到低价排序列出，许多商品可以直接在网上订购，这种图文并茂的检索购物方式较受用户青睐。&nbsp;<br/><br/>　　9、美国实用生活信息查询&nbsp;<br/>　　如果用户生活在美国或者短期去美国出差和学习，下面的查询功能或许能对他们又帮助，因为这些检索服务目前仅限于美国。&nbsp;<br/>　　9.1　地区代码查询&nbsp;<br/>　　用户输入美国的地区代码，在返回的检索结果中的第一项就是该地区的地图，用户可以通过不断的点击来找到一条具体的大街。&nbsp;<br/>　　9.2　条形码查询&nbsp;<br/>　　用户输入一个商品的条形码就可以找到有关该产品的说明。&nbsp;<br/>　　9.3　飞机航班查询&nbsp;<br/>　　用户输入一家航空公司的名称和航班号，即可获得该航班的出发地和目的地，起飞和到达时间，以及实际航行情况，目前是否开始检票，抵达目的地候机大楼的舱门号。&nbsp;<br/>　　9.4　车牌号查询&nbsp;<br/>　　用户输入车牌号，可以获得一辆车的名称、型号、出厂年份，车身和发动机情况。&nbsp;<br/>　　9.5　邮件查询&nbsp;<br/>　　用户输入一个邮件的号码，可以获悉该邮件目前的状况，譬如邮件已经抵达或者正在路途上等。&nbsp;<br/><br/>　　10、检索工具栏&nbsp;<br/>　　Google的检索工具栏功能强大，有拖放和右击检索功能，新闻阅读，广告拦截，网站排名显示和搜索字词标明等，工具栏可以附在浏览器下，使用更加方便。用户可以首先在Google网站下载并安装一个检索工具栏，然后根据需要在工具栏的选项中进行设置，我们推荐用户使用这个检索工具栏，它将给用户带来许多意想不到的方便。&nbsp;<br/>　　10.1&nbsp;Google　新闻&nbsp;<br/>　　Google　的新闻来源于4500家报刊杂志和通讯社，在精选以后持续播出世界各国的新闻，每条新闻都有更新的时间，并联接相关的新闻。用户可以使用免费的新闻通知服务，通过电子邮件收到自己感兴趣的新闻。&nbsp;<br/>　　10.2　网站排名&nbsp;<br/>　　Google　通过对Web链接结构和许多其它变量自动计算，对网页的重要程度进行评定。网站排名根据这个评定能够显示用户正在访问的网站的重要程度，用一根绿色线条显示，直观而明确。&nbsp;<br/>　　10.3　搜索字词标明&nbsp;<br/>　　搜索字词标明通过鲜艳的色彩标明用户所检索的字词在每个网页上的位置，便于用户查阅，单击“搜索字词标明”按钮可以打开和关闭标明状态。&nbsp;<br/>　　10.4　拖放和右击检索&nbsp;<br/>　　拖放检索功能使检索更为方便，用户可以把在网页上所选取的字词直接拖放到检索框中，Google会自动进行检索。对于与　Web浏览器同时运行的许多文字处理应用程序中的文字，也可以使用此功能。右击检索是指用户可以在网页上选取文字后，右击鼠标，然后从弹出式菜单中选择“Google　搜索”便可以自动检索。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=47</link>
			<title><![CDATA[又一个新的Lucene分词程序，和Nutch一起使用，速度超快，代码超少，准确率不高]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Mon,23 Apr 2007 16:40:25 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=47</guid>	
		<description><![CDATA[速度：17600左右个汉字&nbsp;，&nbsp;分&nbsp;1000词&nbsp;，时间大约是&nbsp;12.5秒左右&nbsp;，&nbsp;差不多每秒&nbsp;100万字&nbsp;，&nbsp;比海量分词的速度还快4倍&nbsp;，&nbsp;提供扩展到&nbsp;词性标注的接口&nbsp;，&nbsp;估计准确率应该还可以接受吧。词库文件邮件发<br/><br/><br/>package&nbsp;com.xdtech;<br/>import&nbsp;java.util.*;<br/>import&nbsp;java.io.*;<br/><br/>/**<br/>&nbsp;*&nbsp;&lt;p&gt;Title:&nbsp;&lt;/p&gt;<br/>&nbsp;*<br/>&nbsp;*&nbsp;&lt;p&gt;Description:&nbsp;&lt;/p&gt;<br/>&nbsp;*<br/>&nbsp;*&nbsp;&lt;p&gt;Copyright:&nbsp;Copyright&nbsp;(c)&nbsp;2007&lt;/p&gt;<br/>&nbsp;*<br/>&nbsp;*&nbsp;&lt;p&gt;Company:&nbsp;&lt;/p&gt;<br/>&nbsp;*<br/>&nbsp;*&nbsp;@author&nbsp;not&nbsp;attributable&nbsp;北京线点科技有限公司&nbsp;jaddy0302<br/>&nbsp;*&nbsp;@version&nbsp;1.0<br/>&nbsp;*/<br/>public&nbsp;class&nbsp;FileBT&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;long&nbsp;time;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;词库&nbsp;Map&nbsp;，&nbsp;扩展支持词性标注和词频<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;Map&lt;java.lang.Character,&nbsp;Map&gt;&nbsp;stackMap&nbsp;=&nbsp;new&nbsp;VHashMap(1,&nbsp;1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;临时&nbsp;Map&nbsp;，初始化词库和分词使用<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;Map&lt;java.lang.Character,&nbsp;Map&gt;&nbsp;pointMap&nbsp;=&nbsp;null;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;List&lt;Serializable&gt;&nbsp;tokenList;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;BufferString&nbsp;strb;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;初始化词库<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;keyword&nbsp;String<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;init(String&nbsp;keyword)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointMap&nbsp;=&nbsp;stackMap;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;keyword.length();&nbsp;i++)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;key&nbsp;=&nbsp;keyword.charAt(i);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(pointMap.containsKey(key))&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//找到了&nbsp;，下个字符检索<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointMap&nbsp;=&nbsp;pointMap.get(key);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointMap&nbsp;=&nbsp;pointMap.put(key,&nbsp;new&nbsp;VHashMap(1,&nbsp;1));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//未收录新词&nbsp;或&nbsp;词结束<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;分词代码<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;input&nbsp;String<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;List<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;List&nbsp;token(String&nbsp;input)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(input&nbsp;==&nbsp;null&nbsp;||&nbsp;input.length()&nbsp;==&nbsp;0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;currentchar;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokenList&nbsp;=&nbsp;new&nbsp;ArrayList();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strb&nbsp;=&nbsp;new&nbsp;BufferString(20);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointMap&nbsp;=&nbsp;stackMap;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;input.length();&nbsp;i++)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentchar&nbsp;=&nbsp;input.charAt(i);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;//中英文和标点符号<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((int)&nbsp;currentchar&nbsp;&lt;=&nbsp;255)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//英文字符、数字、标点符号<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(java.lang.Character.isLetterOrDigit(currentchar)&nbsp;||<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentchar&nbsp;==&nbsp;&#39;\&#39;&#39;&nbsp;||&nbsp;currentchar&nbsp;==&nbsp;&#39;_&#39;&nbsp;||<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentchar&nbsp;==&nbsp;&#39;-&#39;)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strb.append(currentchar);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokenList.add(strb.toString());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokenList.add(String.valueOf(currentchar));&nbsp;//英文标点符号&nbsp;或者空格<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strb.setLength(0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointMap&nbsp;=&nbsp;find(currentchar,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strb.length()&nbsp;==&nbsp;0&nbsp;?&nbsp;stackMap&nbsp;:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointMap);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;subcondition&nbsp;=&nbsp;subcondition&nbsp;=&nbsp;(pointMap&nbsp;==&nbsp;null)&nbsp;?&nbsp;-1&nbsp;:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointMap.size();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;condition&nbsp;=&nbsp;(subcondition&nbsp;&gt;=&nbsp;1)&nbsp;?&nbsp;1&nbsp;:&nbsp;subcondition;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(condition)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;-1:&nbsp;{&nbsp;//标点符号&nbsp;或者也可能是&nbsp;副词介词等其他未识别的词<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(strb.length()&nbsp;&gt;&nbsp;0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokenList.add(strb.toString());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strb.setLength(0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointMap&nbsp;=&nbsp;find(currentchar,stackMap);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;test&nbsp;=&nbsp;pointMap&nbsp;==&nbsp;null?tokenList.add(String.valueOf(currentchar)):strb.append(currentchar)!=null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0:&nbsp;{&nbsp;//已找到字符，&nbsp;但该字符无下级字符，即&nbsp;该字为词的最后一个字符<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strb.append(currentchar);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokenList.add(strb.toString());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strb.setLength(0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1:&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strb.append(currentchar);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;tokenList;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Map&nbsp;find(char&nbsp;input,&nbsp;Map&nbsp;point)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointMap&nbsp;=&nbsp;point&nbsp;==&nbsp;null&nbsp;?&nbsp;stackMap&nbsp;:&nbsp;point;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((pointMap&nbsp;=&nbsp;pointMap.get(input))&nbsp;!=&nbsp;null)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;pointMap;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;p&gt;Title:&nbsp;HashMap&lt;/p&gt;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;p&gt;Description:&nbsp;重载&nbsp;HashMap&nbsp;put&nbsp;方法&lt;/p&gt;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;p&gt;Copyright:&nbsp;Copyright&nbsp;(c)&nbsp;2007&lt;/p&gt;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;p&gt;Company:&nbsp;&lt;/p&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@author&nbsp;not&nbsp;attributable&nbsp;北京线点科技有限公司<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@version&nbsp;1.0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;class&nbsp;VHashMap&lt;K,&nbsp;V&gt;&nbsp;extends&nbsp;HashMap&lt;K,&nbsp;V&gt;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;VHashMap(int&nbsp;initialCapacity,&nbsp;float&nbsp;loadFactor)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super(initialCapacity,&nbsp;loadFactor);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;V&nbsp;put(K&nbsp;key,&nbsp;V&nbsp;value)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.put(key,&nbsp;value);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;value;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;BufferString<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char[]&nbsp;buffer&nbsp;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;length&nbsp;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;hasUsed&nbsp;=0&nbsp;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;BufferString(int&nbsp;length)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer&nbsp;=&nbsp;new&nbsp;char[this.length&nbsp;=&nbsp;length&nbsp;]&nbsp;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;BufferString&nbsp;append(char&nbsp;character)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer[hasUsed++]&nbsp;=&nbsp;character&nbsp;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this&nbsp;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setLength(int&nbsp;length)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java.util.Arrays.fill(buffer,hasUsed&nbsp;=&nbsp;length&nbsp;,&nbsp;this.length&nbsp;,&nbsp;(char)0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;long&nbsp;length()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;hasUsed;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;toString()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;String(buffer,&nbsp;0,&nbsp;hasUsed);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileBT&nbsp;bree&nbsp;=&nbsp;new&nbsp;FileBT();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;worddata&nbsp;=&nbsp;new&nbsp;FileInputStream(new&nbsp;File(<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;d:/Test.txt&#34;));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;newword&nbsp;=&nbsp;null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;in&nbsp;=&nbsp;new&nbsp;BufferedReader(new&nbsp;InputStreamReader(<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;worddata,&nbsp;&#34;UTF8&#34;));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((newword&nbsp;=&nbsp;in.readLine())&nbsp;!=&nbsp;null)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(newword.length()&nbsp;==&nbsp;1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bree.init(newword);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in.close();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mem();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;String&gt;&nbsp;tokenList&nbsp;=&nbsp;null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;start&nbsp;=&nbsp;System.nanoTime();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;test&nbsp;=&nbsp;&#34;中国是一个人口大国,made&nbsp;in&nbsp;china,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论中国是一个人口大国,在博客中搜索，在中搜中搜索中搜在线在纳斯达克上市的消息，热烈庆祝中搜在线在纳斯达克上市成功,中国拥有丰富的人力资源，穿和服的女人在和服装公司的男人交涉,和服女人在和服生产车间和服装公司的男人一起裸体试穿和服，研究生态理论&#34;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;jk&nbsp;=&nbsp;0;&nbsp;jk&nbsp;&lt;&nbsp;1000;&nbsp;jk++)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokenList&nbsp;=&nbsp;bree.token(test);<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(String&nbsp;token&nbsp;:tokenList)<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(token);<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;end&nbsp;=&nbsp;System.nanoTime();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&#34;字数:&#34;&nbsp;+&nbsp;test.length()&nbsp;*&nbsp;1000&nbsp;+&nbsp;&#34;&nbsp;分词结果：&#34;&nbsp;+<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokenList.size()&nbsp;*&nbsp;1000&nbsp;+&nbsp;&#34;&nbsp;时间：&#34;&nbsp;+&nbsp;((long)(end&nbsp;-&nbsp;start))/(1000*1000)+&#34;ms&nbsp;&#34;&nbsp;+&nbsp;((long)(end&nbsp;-&nbsp;start))&nbsp;+&#34;ns&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;ex)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Displays&nbsp;some&nbsp;timing&nbsp;and&nbsp;approximate&nbsp;memory&nbsp;info.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;mem()&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime&nbsp;r&nbsp;=&nbsp;Runtime.getRuntime();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;a&nbsp;=&nbsp;r.totalMemory()&nbsp;-&nbsp;r.freeMemory();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;b&nbsp;=&nbsp;a&nbsp;&gt;&nbsp;1&nbsp;&lt;&lt;&nbsp;20;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;f&nbsp;=&nbsp;b&nbsp;?&nbsp;20&nbsp;:&nbsp;10;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out(&#34;内存占用:(&#34;&nbsp;+&nbsp;(a&nbsp;+&nbsp;(1&nbsp;&lt;&lt;&nbsp;f&nbsp;-&nbsp;1)&nbsp;&gt;&gt;&nbsp;f)&nbsp;+&nbsp;(b&nbsp;?&nbsp;&#34;&nbsp;mb&#34;&nbsp;:&nbsp;&#34;&nbsp;kb&#34;)&nbsp;+&nbsp;&#34;)\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;void&nbsp;out(String&nbsp;text)&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(text);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/><br/>}<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=46</link>
			<title><![CDATA[信息指纹与消重算法]]></title>
			<author>jaddy0302@126.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Tue,17 Apr 2007 00:33:36 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=46</guid>	
		<description><![CDATA[信息指纹：就是提取一个信息的特征，通常是一组词或者一组词＋权重，然后根据这组词调用特别的算法，例如MD5，将之转化为一组代码，这组代码就成为标识这个信息的指纹。<br/><br/>从理论上讲，每两个不同文本的特征信息是不同的，那么得到的代码也应该是不一样的，就象人的指纹。<br/><br/>搜索引擎在建立索引的时候需要对重复内容的网页进行识别和消重，这就要用到信息指纹。<br/><br/>例如，通常搜索引擎要先对网页进行消噪，就是净化网页，将一些模版类的，无用的广告等剔除调。然后得到预处理后的网页，然后对网页进行向量化处理，简单的讲就是分词，统计，并按照词频生成一个列表。<br/><br/>例如：<br/>网页12<br/>搜索10<br/>引擎7<br/>...<br/>...<br/>然后取前N个关键词作为信息的矢量，例如：[网页12搜索10引擎7]&nbsp;这是可以直接进行MD5哈系，或者按照其它规则进行重拍后进行MD5哈系。例如本例，取前３个关键词，在进行哈系，得到的信息指纹就是：a7eb9d92a83cf438881915e0bc2df70b<br/><br/>这样a7eb9d92a83cf438881915e0bc2df70b&nbsp;就作为本文档的指纹和以往的文档进行比较，如果有相同的，就说明指纹上看是一样的，就可以进入消重处理。<br/><br/>至于关键词的权重，因为有众多的提取算法，比较常用的是nf/df，这里不在赘述。另外高频词和停止词的消除也是必要的，这点可以参考基于信息噪音模型的分类算法，那个ppt里我细数了如何定义“噪音”，如何进行消噪。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=45</link>
			<title><![CDATA[数学之美 系列十三 信息指纹及其应用]]></title>
			<author>jaddy0302@126.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Tue,17 Apr 2007 00:14:24 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=45</guid>	
		<description><![CDATA[数学之美&nbsp;系列十三&nbsp;信息指纹及其应用<br/>2006年8月3日&nbsp;上午&nbsp;11:17:00<br/><br/>发表者：吴军，Google&nbsp;研究员&nbsp;<br/><br/>任何一段信息文字，都可以对应一个不太长的随机数，作为区别它和其它信息的指纹（Fingerprint)。只要算法设计的好，任何两段信息的指纹都很难重复，就如同人类的指纹一样。信息指纹在加密、信息压缩和处理中有着广泛的应用。<br/><br/>我们在图论和网络爬虫一文中提到，为了防止重复下载同一个网页，我们需要在哈希表中纪录已经访问过的网址（URL)。但是在哈希表中以字符串的形式直接存储网址，既费内存空间，又浪费查找时间。现在的网址一般都较长，比如，如果在&nbsp;Google&nbsp;或者百度在查找数学之美，对应的网址长度在一百个字符以上。下面是百度的链接<br/><br/><a href="http://www.baidu.com/s?ie=gb2312" target="_blank">http://www.baidu.com/s?ie=gb2312</a>&amp;bs=%CA%FD%D1%A7%D6%AE%C3%C0&amp;sr=&amp;amp;z=&amp;cl=3&amp;f=8<br/>&amp;wd=%CE%E2%BE%FC+%CA%FD%D1%A7%D6%AE%C3%C0&amp;ct=0<br/><br/>假定网址的平均长度为一百个字符，那么存贮&nbsp;200&nbsp;亿个网址本身至少需要&nbsp;2&nbsp;TB，即两千&nbsp;GB&nbsp;的容量，考虑到哈希表的存储效率一般只有&nbsp;50%，实际需要的内存在&nbsp;4&nbsp;TB以上。即使把这些网址放到了计算机的内存中，由于网址长度不固定，以字符串的形式查找的效率会很低。因此，我们如果能够找到一个函数，将这&nbsp;200&nbsp;亿个网址随机地映射到128&nbsp;二进位即&nbsp;16&nbsp;个字节的整数空间，比如将上面那个很长的字符串对应成一个如下的随机数:<br/><br/>893249432984398432980545454543<br/><br/>这样每个网址只需要占用&nbsp;16&nbsp;个字节而不是原来的一百个。这就能把存储网址的内存需求量降低到原来的&nbsp;1/6。这个16&nbsp;个字节的随机数，就称做该网址的信息指纹（Fingerprint)。可以证明，只要产生随机数的算法足够好，可以保证几乎不可能有两个字符串的指纹相同，就如同不可能有两个人的指纹相同一样。由于指纹是固定的&nbsp;128&nbsp;位整数，因此查找的计算量比字符串比较小得多。网络爬虫在下载网页时，它将访问过的网页的网址都变成一个个信息指纹，存到哈希表中，每当遇到一个新网址时，计算机就计算出它的指纹，然后比较该指纹是否已经在哈希表中，来决定是否下载这个网页。这种整数的查找比原来字符串查找,可以快几倍到几十倍。<br/><br/>产生信息指纹的关键算法是伪随机数产生器算法（prng)。最早的&nbsp;prng&nbsp;算法是由计算机之父冯诺伊曼提出来的。他的办法非常简单，就是将一个数的平方掐头去尾，取中间的几位数。比如一个四位的二进制数&nbsp;1001（相当于十进制的9），其平方为&nbsp;01010001&nbsp;(十进制的&nbsp;81）掐头去尾剩下中间的四位&nbsp;0100。当然这种方法产生的数字并不很随机，也就是说两个不同信息很有可能有同一指纹。现在常用的&nbsp;MersenneTwister&nbsp;算法要好得多。<br/><br/>信息指纹的用途远不止网址的消重，信息指纹的的孪生兄弟是密码。信息指纹的一个特征是其不可逆性,&nbsp;也就是说,<br/>无法根据信息指纹推出原有信息，这种性质，&nbsp;正是网络加密传输所需要的。比如说，一个网站可以根据用户的Cookie&nbsp;识别不同用户，这个&nbsp;cookie&nbsp;就是信息指纹。但是网站无法根据信息指纹了解用户的身份，这样就可以保护用户的隐私。在互联网上，加密的可靠性，取决于是否很难人为地找到拥有同一指纹的信息，&nbsp;比如一个黑客是否能随意产生用户的&nbsp;cookie。从加密的角度讲&nbsp;MersenneTwister，算法并不好，因为它产生的随机数有相关性。<br/><br/>互联网上加密要用基于加密伪随机数产生器（csprng)。常用的算法有&nbsp;MD5&nbsp;或者&nbsp;SHA1&nbsp;等标准，它们可以将不定长的信息变成定长的&nbsp;128&nbsp;二进位或者&nbsp;160&nbsp;二进位随机数。值得一提的事，SHA1&nbsp;以前被认为是没有漏洞的，现在已经被中国的王小云教授证明存在漏洞。但是大家不必恐慌，&nbsp;因为这和黑客能真正攻破你的注册信息是还两回事。<br/><br/>信息指纹的虽然历史很悠久，但真正的广泛应用是在有了互联网以后，这几年才渐渐热门起来。]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=44</link>
			<title><![CDATA[北京线点科技有限公司助力WEB2.0垂直搜索]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,13 Apr 2007 11:11:32 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=44</guid>	
		<description><![CDATA[<p><img alt="" src="http://www.xd-tech.com.cn/blog/attachments/month_0704/6200741312359.png" border="0" />&nbsp;&nbsp;&nbsp; <font size="5"></font></p>
<p><a href="http://www.xd-tech.com.cn/product.html"><font size="5">北京线点科技有限公司助力WEB2.0垂直搜</font></a></p>
<p><a href="http://www.xd-tech.com.cn/product.html"><font size="5">&nbsp;线点垂直搜索产品，专为WEB2.0设计<br />安装简单,维护方便，完备的后台管理功能<br />分布式搜索,海量数据瞬间展现<br />集群,超线程技术，信息采集准确高效<br />SOA发布，RSS支持，二次开发方便快速<br />博客搜索、职位搜索、象酷讯、奇虎一样搜索</font></a><br /></p>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=42</link>
			<title><![CDATA[中文搜索引擎技术揭密：系统架构 （转）]]></title>
			<author>jaddy0302@126.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,04 Apr 2007 16:03:31 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=42</guid>	
		<description><![CDATA[【e800.com.cn 编者按】互联网发展的今天，一方面离 不开其开放、共享的特性带给人们的全新体验，另一方面也离不开数以亿计的为其提供各类丰富内容的网络节点。互联网被普及前，人们查阅资料第一想到的便是拥 有大量书籍资料的图书馆，到了今天你怎么想？或许今天的很多人都会选择一种更方便、快捷、全面、准确的方式&mdash;&mdash;互联网。你可以坐在家里轻点几下鼠标就查到 想要的各类信息，这在互联网没有被普及之前，还都仅是一个梦而已，但如今这一切已成为了可能。
<p>而帮助你通过整个互联网快速查找到目标信息的就是越来越被重视的搜索引擎。有关搜索引擎的技术资料网络上已经很多，关于搜索引擎经济的多方面报道各大媒体 也都已经铺天盖地，因此在这里小编并不想过多的谈论这些方面的感受，只想在本次&ldquo;中文搜索引擎技术揭密&rdquo;系列文章全部完成之际来聊一下搜索引擎对小编的深 远影响。 </p>
<p>记得2000年左右网络上开始大量出现免费个人主页空间，当时的小编还只是一个刚刚进入IT圈的小朋友，看着这些空间那叫一个口水横流，于是乎立刻申请了 一个。又经过了一个多月的刻苦修炼和先后三次的改版，自己有生以来的第一个个人主页诞生了。可看着每天寥寥无几的访问量，心里那叫一个难受，可一时间也想 不到好办法解决问题。突然有天发现一篇介绍如何在搜索引擎注册自己个人网站的文章，于是小编就照着文章所讲的分别在SOHU、网易等搜索引擎的相关分类目 录下注册了自己的个人主页。直至今日，小编才确切的知道了当时盛行的搜索引擎都属&ldquo;目录搜索引擎&rdquo;。这实际上是小编第一次使用、认识搜索引擎，再后来通过 每天个人主页不断上升的数字小编感觉到了搜索引擎的神奇。 </p>
<p>其实正是由于搜索引擎，才使小编的个人主页被更多的人所熟识，以至于后来有多份工作都是因为这个个人主页所带来的机会。其实这些经历或许很多人都有切身的 体会，同样也有很多人因此去全身投入到互联网工作中。这正像那句话讲的&ldquo;世界真奇妙，不看不知道&rdquo;，小编在此多加一句&ldquo;到底怎么看，搜索引擎帮你忙！&rdquo; </p>
<p>&nbsp;</p>
<h3><a name="前言"></a>前言 </h3>
<hr />互 联网在近10年的得到飞速发展，互联网正在逐渐深入人们的生活，改变人们的生活。互联网经济也经历了风风雨雨，从缓慢起步到急速膨胀，从泡沫破灭到逐步回 暖；从&ldquo;网络广告&rdquo;到&ldquo;拇指经济&rdquo;，从&ldquo;网络游戏&rdquo;到&ldquo;搜索力经济&rdquo;。目前，搜索引擎成为最受人们关注的焦点之一，也成为亿万富翁的制造摇篮。越来越多的 公司都希望在搜索引擎这座金矿中挖到筐金子，其中许多人会选择拥有自己的搜索引擎。国内著名搜索引擎公司百度（http://www.baidu.com）总裁李彦宏说：搜索引擎不是人人都能做的领域，进入的门槛比较高。
<p>搜索引擎的门槛到底有多高？搜索引擎的门槛主要是技术门槛，包括网页数据的快速采集、海量数据的索引和存储、搜索结果的相关性排序、搜索效率的毫秒级要 求、分布式处理和负载均衡、自然语言的理解技术等等，这些都是搜索引擎的门槛。对于一个复杂的系统来说，各方面的技术固然重要，但整个系统的架构设计也同 样不可忽视，搜索引擎也不例外。 </p>
<p>&nbsp;</p>
<h3><a name="搜索引擎技术和分类"></a>搜索引擎技术和分类 </h3>
<p>搜索引擎的技术基础是全文检索技术，从20世纪60年代，国外对全文检索技术就开始有研究。全文检索通常指文本全文检索，包括信息的存储、组织、表现、查 询、存取等各个方面，其核心为文本信息的索引和检索，一般用于企事业单位。随着互联网信息的发展，搜索引擎在全文检索技术上逐渐发展起来，并得到广泛的应 用，但搜索引擎还是不同于全文检索。搜索引擎和常规意义上的全文检索主要区别有以下几点： </p>
<p>&nbsp;</p>
<ol>
    <li><strong>数据量</strong> 传统全文检索系统面向的是企业本身的数据或者和企业相关的数据，一般索引库规模多在GB级，数据量大的也只有几百万条；但互联网网页搜索需要处理几十亿的网页，搜索引擎的策略都是采用服务器群集和分布式计算技术。 </li>
    <li><strong>内容相关性</strong> , 信息太多，查准和排序就特别重要，Google等搜索引擎采用网页链接分析技术，根据互联网上网页被链接次数作为重要性评判的依据；但全文检索的数据源中相互链接的程度并不高，不能作为判别重要性的依据，只能基于内容的相关性排序。 </li>
    <li><strong>安全性</strong>. 互联网搜索引擎的数据来源都是互联网上公开的信息，而且除了文本正文以外，其它信息都不太重要；但企业全文检索的数据源都是企业内部的信息，有等级、权限 等限制，对查询方式也有更严格的要求，因此其数据一般会安全和集中地存放在数据仓库中以保证数据安全和管理的要求。 </li>
    <li><strong>个性化和智能化</strong>. 搜索引擎面向的是互联网访问者，由于其数据量和客户数量的限制，自然语言处理技术、知识检索、知识挖掘等计算密集的智能计算技术很难应用，这也是目前搜索引擎技术努力的方向；而全文检索数据量小，检索需求明确，客户量少，在智能化和个性可走得更远。 </li>
</ol>
<p>搜索引擎与全文检索除了以上的区别外，还结合互联网信息的特点形成了三个不同的类型： </p>
<p>&nbsp;</p>
<ul>
    <li><strong>全文检索搜索引擎</strong> ：全文搜索引擎是名副其实的搜索引擎，国外具代表性的有Google (<a href="http://www.google.com/" target="_top" rel="nofollow"><font color="#666666">http://www.google.com</font></a>) 、yahoo(<a href="http://search.yahoo.com/" target="_top" rel="nofollow"><font color="#0066cc">http://search.yahoo.com</font></a>) 、AllTheWeb (<a href="http://www.alltheweb.com/" target="_top" rel="nofollow"><font color="#0066cc">http://www.alltheweb.com</font></a> ) 等，国内著名的有百度（http://www.Baidu.com）、中搜（http://www.zhongsou.com）。它们都是通过从互联网上提取的各个网站的信息（以网页文字为主）而建立的数据库，检索与用户查询条件匹配的相关记录，然后按一定的排列顺序将结果返回给用户，也是目前常规意义上的搜索引擎。 </li>
    <li><strong>目录搜索引擎</strong> ：目录索引虽然有搜索功能，但在严格意义上算不上是真正的搜索引擎，仅仅是按目录分类的网站链接列表而已。用户完全可以不用进行关键词查询，仅靠分类目录也可找到需要的信息。国外比较著名的目录索引搜索引擎有yahoo（http://www.yahoo.com）Open Directory Project（DMOZ）（http://www.dmoz.com/）、LookSmart（http://www.looksmart.com）等。国内的搜狐（http://www.sohu.com）、新浪（http://www.sina.com）、网易（http://www.163.com）搜索也都具有这一类功能。 </li>
    <li><strong>元搜索引擎</strong> ：元搜索引擎在接受用户查询请求时，同时在其它多个引擎上进行搜索，并将结果返回给用户。著名的元搜索引擎有Dogpile（http://www.dogpile.com）、Vivisimo（http://www.vivisimo.com）等，国内元搜索引擎中具代表性的有搜星搜索引擎（http://www.soseen.com/），优客搜索（http://www.yok.com）。在搜索结果排列方面，有的直接按来源引擎排列搜索结果，如Dogpile，有的则按自定的规则将结果重新排列组合，如Vivisimo。 </li>
    <li>其他的像新浪(<a href="http://search.sina.com.cn/" target="_top" rel="nofollow"><font color="#0066cc">http://search.sina.com.cn</font></a>) 、网易(<a href="http://search.163.com)、/" target="_top" rel="nofollow"><font color="#0066cc">http://search.163.com)、</font></a> A9（http://www.A9.com） 等搜索引擎都是调用其它全文检索搜索引擎，或者在其搜索结果的基础上做了二次开发。 </li>
</ul>
<p>&nbsp;</p>
<h3><a name="搜索引擎的系统架构"></a>搜索引擎的系统架构 </h3>
<hr />这里主要针对全文检索搜索引擎的系统架构进行说明，下文中提到的搜索引擎如果没有特殊说明也是指全文检索搜索引擎。搜索引擎的实现原理，可以看作四步：从互联网上抓取网页&rarr;建立索引数据库&rarr;在索引数据库中搜索&rarr;对搜索结果进行处理和排序。
<ol>
    <li><strong>从互联网上抓取网页</strong>. 利用能够从互联网上自动收集网页的网络蜘蛛程序，自动访问互联网，并沿着任何网页中的所有URL爬到其它网页，重复这过程，并把爬过的所有网页收集到服务器中。 </li>
    <li><strong>建立索引数据库</strong> . 由索引系统程序对收集回来的网页进行分析，提取相关网页信息（包括网页所在URL、编码类型、页面内容包含的关键词、关键词位置、生成时间、大小、与其它 网页的链接关系等），根据一定的相关度算法进行大量复杂计算，得到每一个网页针对页面内容中及超链中每一个关键词的相关度（或重要性），然后用这些相关信 息建立网页索引数据库。 </li>
    <li><strong>在索引数据库中搜索</strong> . 当用户输入关键词搜索后，分解搜索请求，由搜索系统程序从网页索引数据库中找到符合该关键词的所有相关网页。 </li>
    <li><strong>对搜索结果进行处理排序</strong> . 所有相关网页针对该关键词的相关信息在索引库中都有记录，只需综合相关信息和网页级别形成相关度数值，然后进行排序，相关度越高，排名越靠前。最后由页面生成系统将搜索结果的链接地址和页面内容摘要等内容组织起来返回给用户。 下图是一个典型的搜索引擎系统架构图，搜索引擎的各部分都会相互交错相互依赖。其处理流程按照如下描述： </li>
</ol>
<p><img height="349" alt="Search Engine Frame" src="http://www.stlchina.org/twiki/pub/Main/SEStructSys/10855410545646168397286830154600.jpg" width="480" /> </p>
<p>&nbsp;</p>
<p>&ldquo;网络蜘蛛&rdquo;从互联网上抓取网页，把网页送入&ldquo;网页数据库&rdquo;，从网页中&ldquo;提取URL&rdquo;，把URL送入&ldquo;URL数据库&rdquo;，&ldquo;蜘蛛控制&rdquo;得到网页的URL，控制&ldquo;网络蜘蛛&rdquo;抓取其它网页，反复循环直到把所有的网页抓取完成。 系统从&ldquo;网页数据库&rdquo;中得到文本信息，送入&ldquo;文本索引&rdquo;模块建立索引，形成&ldquo;索引数据库&rdquo;。同时进行&ldquo;链接信息提取&rdquo;，把链接信息（包括锚文本、链接本身等信息）送入&ldquo;链接数据库&rdquo;，为&ldquo;网页评级&rdquo;提供依据。 &ldquo;用户&rdquo;通过提交查询请求给&ldquo;查询服务器&rdquo;，服务器在&ldquo;索引数据库&rdquo;中进行相关网页的查找，同时&ldquo;网页评级&rdquo;把查询请求和链接信息结合起来对搜索结果进行相关度的评价，通过&ldquo;查询服务器&rdquo;按照相关度进行排序，并提取关键词的内容摘要，组织最后的页面返回给&ldquo;用户&rdquo;。 </p>
<p>&nbsp;</p>
<h3><a name="搜索引擎的索引和搜索"></a>搜索引擎的索引和搜索 </h3>
<hr />对于网络蜘蛛技术和排序技术请参考作者其它文章[1][2]，这里以Google搜索引擎为例主要介绍搜索引擎的数据索引和搜索过程。
<p>数据的索引分为三个步骤：网页内容的提取、词的识别、标引库的建立。 </p>
<p>互联网上大部分信息都是以HTML格式存在，对于索引来说，只处理文本信息。因此需要把网页中文本内容提取出来，过滤掉一些脚本标示符和一些无用的广告信 息，同时记录文本的版面格式信息[1]。词的识别是搜索引擎中非常关键的一部分，通过字典文件对网页内的词进行识别。对于西文信息来说，需要识别词的不同 形式，例如：单复数、过去式、组合词、词根等，对于一些亚洲语言（中文、日文、韩文等）需要进行分词处理[3]。识别出网页中的每个词，并分配唯一的wordID号，用于为数据索引中的标引模块服务。 </p>
<p>标引库的建立是数据索引中结构最复杂的一部分。一般需要建立两种标引：文档标引和关键词标引。 文档标引分配每个网页一个唯一的docID号，根据docID标引出在这个网页中出现过多少过wordID，每个wordID出现的次数、位置、大小写格 式等，形成docID对应wordID的数据列表；关键词标引其实是对文档标引的逆标引，根据wordID标引出这个词出现在那些网页（用wordID表 示），出现在每个网页的次数、位置、大小写格式等，形成wordID对应docID的列表。 </p>
<p>关于索引数据的详细数据结构，有兴趣的朋友可以参看文献[4]。 </p>
<p>搜索的处理过程是对用户的搜索请求进行满足的过程，通过用户输入搜索关键字，搜索服务器对应关键词字典，把搜索关键词转化为wordID，然后在标引库中 得到docID列表，对docID列表进行扫描和wordID的匹配，提取满足条件的网页，然后计算网页和关键词的相关度，根据相关度的数值返回前K篇结 果（不同的搜索引擎每页的搜索结果数不同）返回给用户。如果用户查看的第二页或者第多少页，重新进行搜索，把排序结果中在第K+1到2*K的网页组织返回 给用户。其处理流程如下图所示： </p>
<p><img height="435" alt="Frame2" src="http://www.stlchina.org/twiki/pub/Main/SEStructSys/10855411914830158211573717999961.jpg" width="255" /> </p>
<p>&nbsp;</p>
<h3><a name="搜索引擎细化趋势"></a>搜索引擎细化趋势 </h3>
<hr />随着搜索引擎市场空间越来越大，搜索引擎也分得越来越细。互联网没有国界，百度总裁李彦宏所讲：搜索引擎市场是赢家通吃的市场。如果一个搜索引擎要想在搜 索市场上有自己的一席之地，必须拥有自己的特色。而且，数以亿计的网民，搜索需求不可能都一样，不同类型的用户需要不同类型的搜索引擎，网页搜索只是搜索 需求中的一种，这就决定了搜索引擎会不断细化，各具特色的搜索引擎也陆续出现。
<p>从技术上讲，各种搜索引擎都具有类似的系统架构，其不同在于搜索的数据源的不同。除了上面提到的网页搜索引擎以外，下面列举几个典型的搜索引擎： </p>
<p>&nbsp;</p>
<ul>
    <li><strong>新闻搜索引擎</strong> . 看新闻是许多网民上网的主要目的，新闻搜索也就成了查看新闻的重要工具。新闻搜索引擎实现的过程比较简单，一般是扫描国内外有名的新闻网站，抓取新闻网 页，建立自己的新闻数据库，然后提供搜索，只是对新闻网页抓取的频率要求很高，有的需要做到几分钟扫描一次。现在许多大型的网页搜索引擎都提供相应的新闻 搜索功能，如：Google新闻搜索（http://news.google.com），中搜新闻搜索（http://news.zhongsou.com），百度新闻搜索（http://news.baidu.com）等。 </li>
    <li><strong>音乐搜索引擎</strong> . 有了互联网以后，音乐得到了广泛的传播，对于喜欢音乐的网民来说，音乐搜索引擎成了最钟爱的工具。音乐搜索引擎需要监控互联网上大型的音乐网站，抓取其音乐数据的描述信息，形成自己的数据库，音乐的下载和试听都会在其原来的音乐网站上进行。目前有：搜刮网（http://www.sougua.com），百度mp3搜索（http://mp3.baidu.com），1234567搜索（http://www.1234567.com）等。 </li>
    <li><strong>图像搜索引擎</strong> . 通过图像搜索引擎可以找到自己感兴趣的图片链接，各大搜索引擎也提供了图像搜索功能。图像文件本身不能够被搜索引擎索引，但搜索引擎可以通过链接文本分析和图片注解等得到图片的信息。目前有：Google图像搜索（http://images.google.com/），VisionNext搜索（http://www.eefind.com），百度图像搜索（http://images.baidu.com）等。 </li>
    <li><strong>商机搜索引擎</strong> . 电子商务一直是互联网的热点，商机搜索对电子商务的发展也起到了巨大的推动作用，商机搜索让互联网经济和传统经营紧密结合在一起，给传统的企业提供了一个 新的销售模式。商机搜索引擎，通过抓取电子商务网站的商品信息和其他商业信息，给访问者提供统一的搜索平台。目前有：soaso价格搜索引擎（http://www.soaso.com），8848购物搜索（http://www.8848.com），阿里巴巴商机搜索（http://www.alibaba.com）等。 </li>
</ul>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=41</link>
			<title><![CDATA[中文搜索引擎技术揭密：网络蜘蛛（转）]]></title>
			<author>jaddy0302@126.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,04 Apr 2007 16:01:34 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=41</guid>	
		<description><![CDATA[【e800.com.cn 编者按】随着搜索经济的崛起，人 们开始越加关注全球各大搜索引擎的性能、技术和日流量。作为企业，会根据搜索引擎的知名度以及日流量来选择是否要投放广告等；作为普通网民，会根据搜索引 擎的性能和技术来选择自己喜欢的引擎查找资料；作为学者，会把有代表性的搜索引擎作为研究对象&hellip;&hellip;
<p>而作为一个网站的经营者，其更关心的或许是如何通过网络载体让更多的网民知道自己的网站，进而获得更高的流量和知名度。这其中，搜索引擎已经成了一个重要 的且是免费的宣传途径。一方面，搜索引擎会主动出击，寻找网络上的各种网页数据，并在后台按相关条件进行索引；另一方面，各大网站为了能让自己的内容更多 的通过搜索引擎向网民展示，都开始对网站结构进行重大调整，其中包括扁平化结构设计、动态（网页）转静态（网页）、Sitemap等。 </p>
<p>这些看来不经意的举动都让我们切身感受到搜索引擎对我们网络使用方式的改变起到了重要作用。并且，正因为搜索引擎的兴起以及社会各界对其重视程度日渐高 涨，还由此创造了一个全新的职位&mdash;&mdash;SEO。实际上，搜索引擎经济的崛起，又一次向人们证明了网络所蕴藏的巨大商机。网络离开了搜索将只剩下空洞杂乱的数 据，以及大量等待去费力挖掘的金矿。 </p>
<p>&nbsp;</p>
<h3><a name="前言"></a>前言 </h3>
<hr />搜索引擎一直专注于提升用户的体验度，其用户体验度则反映在三个方面：准、全、快。 用专业术语讲是：查准率、查全率和搜索速度（即搜索耗时）。其中最易达到的是搜索速度，因为对于搜索耗时在1秒以下的系统来说，访问者很难辨别其快慢了， 更何况还有网络速度的影响。因此，对搜索引擎的评价就集中在了前两者：准、全。中文搜索引擎的&ldquo;准&rdquo;，需要保证搜索的前几十条结果都和搜索词十分相关，这 需由&ldquo;分词技术&rdquo;和&ldquo;排序技术&rdquo;来决定（参考作者相关文章[1][2]）；中文搜索引擎的&ldquo;全&rdquo;则需保证不遗漏某些重要的结果，而且能找到最新的网页，这需要搜索引擎有一个强大的网页收集器，一般称为&ldquo;网络蜘蛛&rdquo;，也有叫&ldquo;网页机器人&rdquo;。
<p>研究搜索引擎技术的文章不少，但大部分讨论的是如何评价网页的重要性，对于网络蜘蛛研究的文章不多。网络蜘蛛技术并不是一项十分高深的技术，但要做一个强 大的网络蜘蛛，却非易事。在目前磁盘容量已经不是瓶颈的时候，搜索引擎一直在扩大自己的网页数量。最大的搜索引擎Google（http://www.google.com）从2002年的10亿网页增加到现在近40亿网页；最近雅虎搜索引擎（http://search.yahoo.com/）号称收录了45亿个网页；国内的中文搜索引擎百度（http://www.baidu.com）的中文页面从两年前的七千万页增加到了现在的两亿多。据估计，整个互联网的网页数达到100多亿，而且每年还在快速增长。因此一个优秀的搜索引擎，需要不断的优化网络蜘蛛的算法，提升其性能。 </p>
<p>或许有些人有疑问，为何搜索引擎需要用网络蜘蛛抓取网站所有的网页，为什么不在搜索者输入关键词后只把那些需要的结果抓取过来？这实际上是效率问题，搜索 引擎不可能在搜索时实时去检查每个网页，而是需要把网页先抓取下来，按照关键词建立好索引，每次搜索的结果都会直接从搜索引擎建立好索引的数据库中查找， 然后把结果返回给访问者。关于搜索引擎系统架构方面的知识，参考文献[3]，本文主要介绍网络蜘蛛的相关技术。 </p>
<p>&nbsp;</p>
<h3><a name="网络蜘蛛基本原理"></a>网络蜘蛛基本原理 </h3>
<hr />网络蜘蛛即Web Spider，是一个很形象的名字。把互联网比喻成一个蜘蛛网，那么Spider就是在网上爬来爬去的蜘蛛。网络蜘蛛是通过网页的链接地址来寻找网页，从 网站某一个页面（通常是首页）开始，读取网页的内容，找到在网页中的其它链接地址，然后通过这些链接地址寻找下一个网页，这样一直循环下去，直到把这个网 站所有的网页都抓取完为止。如果把整个互联网当成一个网站，那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来。
<p>对于搜索引擎来说，要抓取互联网上所有的网页几乎是不可能的，从目前公布的数据来看，容量最大的搜索引擎也不过是抓取了整个网页数量的百分之四十左右。这 其中的原因一方面是抓取技术的瓶颈，无法遍历所有的网页，有许多网页无法从其它网页的链接中找到；另一个原因是存储技术和处理技术的问题，如果按照每个页 面的平均大小为20K计算（包含图片），100亿网页的容量是100&times;2000G字节，即使能够存储，下载也存在问题（按照一台机器每秒下载20K计算， 需要340台机器不停的下载一年时间，才能把所有网页下载完毕）。同时，由于数据量太大，在提供搜索时也会有效率方面的影响。因此，许多搜索引擎的网络蜘 蛛只是抓取那些重要的网页，而在抓取的时候评价重要性主要的依据是某个网页的链接深度。 </p>
<p>在抓取网页的时候，网络蜘蛛一般有两种策略：广度优先和深度优先（如下图所示）。广度优先是指网络蜘蛛会先抓取起始网页中链接的所有网页，然后再选择其中 的一个链接网页，继续抓取在此网页中链接的所有网页。这是最常用的方式，因为这个方法可以让网络蜘蛛并行处理，提高其抓取速度。深度优先是指网络蜘蛛会从 起始页开始，一个链接一个链接跟踪下去，处理完这条线路之后再转入下一个起始页，继续跟踪链接。这个方法有个优点是网络蜘蛛在设计的时候比较容易。两种策 略的区别，下图的说明会更加明确。 </p>
<p><img height="381" alt="Spider1" src="http://www.stlchina.org/twiki/pub/Main/SECrawlerWeb/10847637283751560941261360672293.jpg" width="482" /> </p>
<p>由于不可能抓取所有的网页，有些网络蜘蛛对一些不太重要的网站，设置了访问的层数。例如，在上图中，A为起始网页，属于0层，B、C、D、E、F属于第1 层，G、H属于第2层，I属于第3层。如果网络蜘蛛设置的访问层数为2的话，网页I是不会被访问到的。这也让有些网站上一部分网页能够在搜索引擎上搜索 到，另外一部分不能被搜索到。对于网站设计者来说，扁平化的网站结构设计有助于搜索引擎抓取其更多的网页。 </p>
<p>网络蜘蛛在访问网站网页的时候，经常会遇到加密数据和网页权限的问题，有些网页是需要会员权限才能访问。当然，网站的所有者可以通过协议让网络蜘蛛不去抓 取（下小节会介绍），但对于一些出售报告的网站，他们希望搜索引擎能搜索到他们的报告，但又不能完全免费的让搜索者查看，这样就需要给网络蜘蛛提供相应的 用户名和密码。网络蜘蛛可以通过所给的权限对这些网页进行网页抓取，从而提供搜索。而当搜索者点击查看该网页的时候，同样需要搜索者提供相应的权限验证。 </p>
<p>&nbsp;</p>
<h3><a name="网站与网络蜘蛛"></a>网站与网络蜘蛛 </h3>
<hr />网络蜘蛛需要抓取网页，不同于一般的访问，如果控制不好，则会引起网站服务器负担过重。今年4月，淘宝网（http://www.taobao.com） 就因为雅虎搜索引擎的网络蜘蛛抓取其数据引起淘宝网服务器的不稳定。网站是否就无法和网络蜘蛛交流呢？其实不然，有多种方法可以让网站和网络蜘蛛进行交 流。一方面让网站管理员了解网络蜘蛛都来自哪儿，做了些什么，另一方面也告诉网络蜘蛛哪些网页不应该抓取，哪些网页应该更新。
<p>每个网络蜘蛛都有自己的名字，在抓取网页的时候，都会向网站标明自己的身份。网络蜘蛛在抓取网页的时候会发送一个请求，这个请求中就有一个字段为User －agent，用于标识此网络蜘蛛的身份。例如Google网络蜘蛛的标识为GoogleBot，Baidu网络蜘蛛的标识为BaiDuSpider， Yahoo网络蜘蛛的标识为Inktomi Slurp。如果在网站上有访问日志记录，网站管理员就能知道，哪些搜索引擎的网络蜘蛛过来过，什么时候过来的，以及读了多少数据等等。如果网站管理员发 现某个蜘蛛有问题，就通过其标识来和其所有者联系。下面是博客中国（http://www.blogchina.com）2004年5月15日的搜索引擎访问日志： </p>
<p><img height="288" alt="Spider2" src="http://www.stlchina.org/twiki/pub/Main/SECrawlerWeb/10847637681917039100031729224170.jpg" width="558" /> <em>感谢<a href="http://www.chedong.com/" target="_top" rel="nofollow"><font color="#0066cc">车东</font></a>提供相应数据</em> </p>
<p>网络蜘蛛进入一个网站，一般会访问一个特殊的文本文件Robots.txt，这个文件一般放在网站服务器的根目录下，如：http://www.blogchina.com/robots.txt。 网站管理员可以通过robots.txt来定义哪些目录网络蜘蛛不能访问，或者哪些目录对于某些特定的网络蜘蛛不能访问。例如有些网站的可执行文件目录和 临时文件目录不希望被搜索引擎搜索到，那么网站管理员就可以把这些目录定义为拒绝访问目录。Robots.txt语法很简单，例如如果对目录没有任何限 制，可以用以下两行来描述： </p>
<p>User-agent: * </p>
<p>Disallow: </p>
<p>当然，Robots.txt只是一个协议，如果网络蜘蛛的设计者不遵循这个协议，网站管理员也无法阻止网络蜘蛛对于某些页面的访问，但一般的网络蜘蛛都会遵循这些协议，而且网站管理员还可以通过其它方式来拒绝网络蜘蛛对某些网页的抓取。 </p>
<p>网络蜘蛛在下载网页的时候，会去识别网页的HTML代码，在其代码的部分，会有META标识。通过这些标识，可以告诉网络蜘蛛本网页是否需要被抓取，还可 以告诉网络蜘蛛本网页中的链接是否需要被继续跟踪。例如：表示本网页不需要被抓取，但是网页内的链接需要被跟踪。 </p>
<p>关于Robots.txt的语法和META Tag语法，有兴趣的读者查看文献[4] </p>
<p>现在一般的网站都希望搜索引擎能更全面的抓取自己网站的网页，因为这样可以让更多的访问者能通过搜索引擎找到此网站。为了让本网站的网页更全面被抓取到， 网站管理员可以建立一个网站地图，即Site Map。许多网络蜘蛛会把sitemap.htm文件作为一个网站网页爬取的入口，网站管理员可以把网站内部所有网页的链接放在这个文件里面，那么网络蜘 蛛可以很方便的把整个网站抓取下来，避免遗漏某些网页，也会减小对网站服务器的负担。 </p>
<p>&nbsp;</p>
<h3><a name="内容提取"></a>内容提取 </h3>
<hr />搜索引擎建立网页索引，处理的对象是文本文件。对于网络蜘蛛来说，抓取下来网页包括各种格式，包括html、图片、doc、pdf、多媒体、动态网页及其 它格式等。这些文件抓取下来后，需要把这些文件中的文本信息提取出来。准确提取这些文档的信息，一方面对搜索引擎的搜索准确性有重要作用，另一方面对于网 络蜘蛛正确跟踪其它链接有一定影响。
<p>对于doc、pdf等文档，这种由专业厂商提供的软件生成的文档，厂商都会提供相应的文本提取接口。网络蜘蛛只需要调用这些插件的接口，就可以轻松的提取文档中的文本信息和文件其它相关的信息。 </p>
<p>HTML等文档不一样，HTML有一套自己的语法，通过不同的命令标识符来表示不同的字体、颜色、位置等版式，如：、、等， 提取文本信息时需要把这些标识符都过滤掉。过滤标识符并非难事，因为这些标识符都有一定的规则，只要按照不同的标识符取得相应的信息即可。但在识别这些信 息的时候，需要同步记录许多版式信息，例如文字的字体大小、是否是标题、是否是加粗显示、是否是页面的关键词等，这些信息有助于计算单词在网页中的重要程 度。同时，对于HTML网页来说，除了标题和正文以外，会有许多广告链接以及公共的频道链接，这些链接和文本正文一点关系也没有，在提取网页内容的时候， 也需要过滤这些无用的链接。例如某个网站有&ldquo;产品介绍&rdquo;频道，因为导航条在网站内每个网页都有，若不过滤导航条链接，在搜索&ldquo;产品介绍&rdquo;的时候，则网站内 每个网页都会搜索到，无疑会带来大量垃圾信息。过滤这些无效链接需要统计大量的网页结构规律，抽取一些共性，统一过滤；对于一些重要而结果特殊的网站，还 需要个别处理。这就需要网络蜘蛛的设计有一定的扩展性。 </p>
<p>对于多媒体、图片等文件，一般是通过链接的锚文本（即，链接文本）和相关的文件注释来判断这些文件的内容。例如有一个链接文字为&ldquo;张曼玉照片&rdquo;，其链接指 向一张bmp格式的图片，那么网络蜘蛛就知道这张图片的内容是&ldquo;张曼玉的照片&rdquo;。这样，在搜索&ldquo;张曼玉&rdquo;和&ldquo;照片&rdquo;的时候都能让搜索引擎找到这张图片。另 外，许多多媒体文件中有文件属性，考虑这些属性也可以更好的了解文件的内容。 </p>
<p>动态网页一直是网络蜘蛛面临的难题。所谓动态网页，是相对于静态网页而言，是由程序自动生成的页面，这样的好处是可以快速统一更改网页风格，也可以减少网 页所占服务器的空间，但同样给网络蜘蛛的抓取带来一些麻烦。由于开发语言不断的增多，动态网页的类型也越来越多，如：asp、jsp、php等。这些类型 的网页对于网络蜘蛛来说，可能还稍微容易一些。网络蜘蛛比较难于处理的是一些脚本语言（如VBScript和JavaScript）生成的网页，如果要完 善的处理好这些网页，网络蜘蛛需要有自己的脚本解释程序。对于许多数据是放在数据库的网站，需要通过本网站的数据库搜索才能获得信息，这些给网络蜘蛛的抓 取带来很大的困难。对于这类网站，如果网站设计者希望这些数据能被搜索引擎搜索，则需要提供一种可以遍历整个数据库内容的方法。 </p>
<p>对于网页内容的提取，一直是网络蜘蛛中重要的技术。整个系统一般采用插件的形式，通过一个插件管理服务程序，遇到不同格式的网页采用不同的插件处理。这种 方式的好处在于扩充性好，以后每发现一种新的类型，就可以把其处理方式做成一个插件补充到插件管理服务程序之中。 </p>
<p>&nbsp;</p>
<h3><a name="更新周期"></a>更新周期 </h3>
<hr />由于网站的内容经常在变化，因此网络蜘蛛也需不断的更新其抓取网页的内容，这就需要网络蜘蛛按照一定的周期去扫描网站，查看哪些页面是需要更新的页面，哪些页面是新增页面，哪些页面是已经过期的死链接。
<p>搜索引擎的更新周期对搜索引擎搜索的查全率有很大影响。如果更新周期太长，则总会有一部分新生成的网页搜索不到；周期过短，技术实现会有一定难度，而且会 对带宽、服务器的资源都有浪费。搜索引擎的网络蜘蛛并不是所有的网站都采用同一个周期进行更新，对于一些重要的更新量大的网站，更新的周期短，如有些新闻 网站，几个小时就更新一次；相反对于一些不重要的网站，更新的周期就长，可能一两个月才更新一次。 </p>
<p>一般来说，网络蜘蛛在更新网站内容的时候，不用把网站网页重新抓取一遍，对于大部分的网页，只需要判断网页的属性（主要是日期），把得到的属性和上次抓取的属性相比较，如果一样则不用更新。 </p>
<p>&nbsp;</p>
<h3><a name="结论"></a>结论 </h3>
<hr />
<p>本文主要讨论了网络蜘蛛相关的技术要点，如果要设计好的网络蜘蛛，需要了解更多的技术细节，可以参考文献[5]。 </p>
<p>网络蜘蛛在搜索引擎中占有重要位置，对搜索引擎的查全、查准都有影响，决定了搜索引擎数据容量的大小，而且网络蜘蛛的好坏直接影响搜索结果页中的死链接 （即链接所指向的网页已经不存在）的个数。目前如何发现更多的网页、如何正确提取网页内容、如果下载动态网页、如何提供抓取速度、如何识别网站内内容相同 的网页等都是网络蜘蛛需要进一步改进的问题。 </p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=37</link>
			<title><![CDATA[HttpURLConnection中设置网络超时]]></title>
			<author>jaddy0302@126.com(jaddy0302)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Sat,06 Jan 2007 12:06:39 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=37</guid>	
		<description><![CDATA[Java中可以使用HttpURLConnection来请求WEB资源。<br />HttpURLConnection对象不能直接构造，需要通过URL.openConnection()来获得HttpURLConnection对象，示例代码如下：<br />String urlStr= <a href="http://www.jaddy.org">www.jaddy.org</a>;<br />URL url = new URL(urlStr);<br />HttpURLConnection conn = (HttpURLConnection)url.openConnection();
<p>&nbsp;</p>
<p style="LINE-HEIGHT: 150%">HttpURLConnection是基于HTTP协议的，其底层通过socket通信实现。如果不设置超时（timeout），在网络异常的情况下，可能会导致程序僵死而不继续往下执行。可以通过以下两个语句来设置相应的超时：<br />System.setProperty(&quot;sun.net.client.defaultConnectTimeout&quot;, 超时毫秒数字符串);<br />System.setProperty(&quot;sun.net.client.defaultReadTimeout&quot;, 超时毫秒数字符串);<br /></p>
<p style="LINE-HEIGHT: 150%">其中： sun.net.client.defaultConnectTimeout：连接主机的超时时间（单位：毫秒）<br />sun.net.client.defaultReadTimeout：从主机读取数据的超时时间（单位：毫秒） </p>
<p style="LINE-HEIGHT: 150%">例如：<br />System.setProperty(&quot;sun.net.client.defaultConnectTimeout&quot;, &quot;30000&quot;);<br />System.setProperty(&quot;sun.net.client.defaultReadTimeout&quot;, &quot;30000&quot;); </p>
<p style="LINE-HEIGHT: 150%">JDK 1.5以前的版本，只能通过设置这两个系统属性来控制网络超时。在1.5中，还可以使用HttpURLConnection的父类URLConnection的以下两个方法：<br />setConnectTimeout：设置连接主机超时（单位：毫秒）<br />setReadTimeout：设置从主机读取数据超时（单位：毫秒） </p>
<p style="LINE-HEIGHT: 150%">例如：<br />HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();<br />urlCon.setConnectTimeout(30000);<br />urlCon.setReadTimeout(30000); </p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=36</link>
			<title><![CDATA[Too many open files 问题解决]]></title>
			<author>jaddy0302@126.com(jaddy0302)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,05 Jan 2007 12:33:45 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=36</guid>	
		<description><![CDATA[Too&nbsp;many&nbsp;open&nbsp;files&nbsp;问题出现有两种情况：<br/>&nbsp;&nbsp;&nbsp;&nbsp;一种是在搜索的时候出现，多半是由于索引创建完毕之后被移动过，如果创建索引的时候不出现该错误，搜索的时候也一般是不会出现的。如果出现了，有两种处理办法，一种是修改合并因子和最小合并因子，并且使用<br/>&nbsp;IndexWriter.Optimize()&nbsp;&nbsp;优化索引，这样会将索引文件数量减少到文件系统限制之内；另外一种办法是修改操作系统的打开文件数量限制。方法如下：<br/>{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;1.&nbsp;按照最大打开文件数量的需求设置系统，&nbsp;并且通过检查/proc/sys/fs/file-max文件来确认最大打开文件数已经被正确设置。&nbsp;<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;cat&nbsp;/proc/sys/fs/file-max<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果设置值太小，&nbsp;修改文件/etc/sysctl.conf的变量到合适的值。&nbsp;这样会在每次重启之后生效。&nbsp;如果设置值够大，跳过下步。&nbsp;<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;echo&nbsp;2048&nbsp;&gt;&nbsp;/proc/sys/fs/file-max<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;编辑文件/etc/sysctl.conf，插入下行。&nbsp;<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fs.file-max&nbsp;=&nbsp;8192<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;2.&nbsp;在/etc/security/limits.conf文件中设置最大打开文件数，&nbsp;下面是一行提示：&nbsp;<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&lt;domain&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;type&gt;&nbsp;&nbsp;&lt;item&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;添加如下这行。&nbsp;<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;-&nbsp;nofile&nbsp;8192<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;这行设置了每个用户的默认打开文件数为2048。&nbsp;注意&#34;nofile&#34;项有两个可能的限制措施。就是&lt;type&gt;项下的hard和soft。&nbsp;要使修改过得最大打开文件数生效，必须对这两种限制进行设定。&nbsp;如果使用&#34;-&#34;字符设定&lt;type&gt;,&nbsp;则hard和soft设定会同时被设定。&nbsp;<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;硬限制表明soft限制中所能设定的最大值。&nbsp;soft限制指的是当前系统生效的设置值。&nbsp;hard限制值可以被普通用户降低。但是不能增加。&nbsp;soft限制不能设置的比hard限制更高。&nbsp;只有root用户才能够增加hard限制值。&nbsp;<br/><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;当增加文件限制描述，可以简单的把当前值双倍。&nbsp;例子如下，&nbsp;如果你要提高默认值1024，&nbsp;最好提高到2048，&nbsp;如果还要继续增加，&nbsp;就需要设置成4096。&nbsp;<br/>}<br/>&nbsp;&nbsp;&nbsp;&nbsp;另外一种情况是在创建索引的时候，也有两种可能，一种是&nbsp;合并因子太小，导致创建文件数量超过操作系统限制，这时可以修改合并因子，也可以修改操作系统的打开文件数限制；另外一种是合并因子受虚拟机内存的限制，无法调整到更大，而&nbsp;需要索引的doc&nbsp;数量又非常的大，这个时候就只能通过修改操作系统的打开文件数限制来解决了。]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=34</link>
			<title><![CDATA[用HttpClient来模拟浏览器GET POST]]></title>
			<author>jaddy0302@126.com(jaddy0302)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Thu,21 Dec 2006 00:40:57 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=34</guid>	
		<description><![CDATA[<p><font size="4">一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器，用来浏览页面查看信息或者提交一些数据等等。所访问的这些页面有的仅仅是一些普通的页面，有的需要用户登录后方可使用，或者需要认证以及是一些通过加密方式传输，例如HTTPS。目前我们使用的浏览器处理这些情况都不会构成问题。不过你可能在某些时候需要通过程序来访问这样的一些页面，比如从别人的网页中&ldquo;偷&rdquo;一些数据；利用某些站点提供的页面来完成某种功能，例如说我们想知道某个手机号码的归属地而我们自己又没有这样的数据，因此只好借助其他公司已有的网站来完成这个功能，这个时候我们需要向网页提交手机号码并从返回的页面中解析出我们想要的数据来。如果对方仅仅是一个很简单的页面，那我们的程序会很简单，本文也就没有必要大张旗鼓的在这里浪费口舌。但是考虑到一些服务授权的问题，很多公司提供的页面往往并不是可以通过一个简单的URL就可以访问的，而必须经过注册然后登录后方可使用提供服务的页面，这个时候就涉及到COOKIE问题的处理。我们知道目前流行的***页技术例如ASP、JSP无不是通过COOKIE来处理会话信息的。为了使我们的程序能使用别人所提供的服务页面，就要求程序首先登录后再访问服务页面，这过程就需要自行处理cookie，想想当你用java.net.HttpURLConnection来完成这些功能时是多么恐怖的事情啊！况且这仅仅是我们所说的顽固的WEB服务器中的一个很常见的&ldquo;顽固&rdquo;！再有如通过HTTP来上传文件呢？不需要头疼，这些问题有了&ldquo;它&rdquo;就很容易解决了！ </font></p>
<p><font size="4">我们不可能列举所有可能的顽固，我们会针对几种最常见的问题进行处理。当然了，正如前面说到的，如果我们自己使用java.net.HttpURLConnection来搞定这些问题是很恐怖的事情，因此在开始之前我们先要介绍一下一个开放源码的项目，这个项目就是Apache开源组织中的httpclient，它隶属于Jakarta的commons项目，目前的版本是2.0RC2。commons下本来已经有一个net的子项目，但是又把httpclient单独提出来，可见http服务器的访问绝非易事。</font></p>
<p><font size="4">Commons-httpclient项目就是专门设计来简化HTTP客户端与服务器进行各种通讯编程。通过它可以让原来很头疼的事情现在轻松的解决，例如你不再管是HTTP或者HTTPS的通讯方式，告诉它你想使用HTTPS方式，剩下的事情交给httpclient替你完成。本文会针对我们在编写HTTP客户端程序时经常碰到的几个问题进行分别介绍如何使用httpclient来解决它们，为了让读者更快的熟悉这个项目我们最开始先给出一个简单的例子来读取一个网页的内容，然后循序渐进解决掉前进中的所形侍狻?/font&gt;
<p><font size="4">1． 读取网页(HTTP/HTTPS)内容</font></p>
<p><font size="4">下面是我们给出的一个简单的例子用来访问某个页面</font></p>
<p><font size="4">/*</font></p>
<p><font size="4">&nbsp;* Created on 2003-12-14 by Liudong</font></p>
<p><font size="4">&nbsp;*/</font></p>
<p><font size="4">package http.demo;</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">import java.io.IOException;</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">import org.apache.commons.httpclient.*;</font></p>
<p><font size="4">import org.apache.commons.httpclient.methods.*;</font></p>
<p><font size="4">/**</font></p>
<p><font size="4">&nbsp;* 最简单的HTTP客户端,用来演示通过GET或者POST方式访问某个页面</font></p>
<p><font size="4">&nbsp;* @author Liudong</font></p>
<p><font size="4">&nbsp;*/</font></p>
<p><font size="4">public class SimpleClient {</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws IOException</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpClient client = new HttpClient();&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置代理服务器地址和端口&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //client.getHostConfiguration().setProxy(&quot;proxy_host_addr&quot;,proxy_port);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用GET方法，如果服务器需要通过HTTPS连接，那只需要将下面URL中的http换成https</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpMethod method = new GetMethod(&quot;</font><a href="http://java.sun.com/"><font size="4">http://java.sun.com</font></a><font size="4">&quot;); </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用POST方法</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //HttpMethod method = new PostMethod(&quot;</font><a href="http://java.sun.com/"><font size="4">http://java.sun.com</font></a><font size="4">&quot;); </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.executeMethod(method);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打印服务器返回的状态</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(method.getStatusLine());</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打印返回的信息</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(method.getResponseBodyAsString());</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //释放连接</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method.releaseConnection();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; }<br />}</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">在这个例子中首先创建一个HTTP客户端(HttpClient)的实例，然后选择提交的方法是GET或者POST，最后在HttpClient实例上执行提交的方法，最后从所选择的提交方法中读取服务器反馈回来的结果。这就是使用HttpClient的基本流程。其实用一行代码也就可以搞定整个请求的过程，非常的简单！</font></p>
<p><br /><font size="4">2． 以GET或者POST方式向网页提交参数</font></p>
<p><font size="4">其实前面一个最简单的示例中我们已经介绍了如何使用GET或者POST方式来请求一个页面，本小节与之不同的是多了提交时设定页面所需的参数，我们知道如果是GET的请求方式，那么所有参数都直接放到页面的URL后面用问号与页面地址隔开，每个参数用&amp;隔开，例如：</font><a href="http://java.sun.com/?name=liudong&amp;mobile=123456"><font size="4">http://java.sun.com?name=liudong&amp;mobile=123456</font></a><font size="4">，但是当使用POST方法时就会稍微有一点点麻烦。本小节的例子演示向如何查询手机号码所在的城市，代码如下：</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">/*</font></p>
<p><font size="4">&nbsp;* Created on 2003-12-7 by Liudong</font></p>
<p><font size="4">&nbsp;*/</font></p>
<p><font size="4">package http.demo;</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">import java.io.IOException;</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">import org.apache.commons.httpclient.*;</font></p>
<p><font size="4">import org.apache.commons.httpclient.methods.*;</font></p>
<p><font size="4">/**</font></p>
<p><font size="4">&nbsp;* 提交参数演示</font></p>
<p><font size="4">&nbsp;* 该程序连接到一个用于查询手机号码所属地的页面</font></p>
<p><font size="4">&nbsp;* 以便查询号码段1330227所在的省份以及城市</font></p>
<p><font size="4">&nbsp;* @author Liudong</font></p>
<p><font size="4">&nbsp;*/</font></p>
<p><font size="4">public class SimpleHttpClient {</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws IOException</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpClient client = new HttpClient();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.getHostConfiguration().setHost(&quot;</font><a href="http://www.imobile.com.cn/"><font size="4">www.imobile.com.cn</font></a><font size="4">&quot;, 80, &quot;http&quot;);</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpMethod method = getPostMethod();//使用POST方式提交数据</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.executeMethod(method);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打印服务器返回的状态</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(method.getStatusLine());</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打印结果页面</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String response =</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new String(method.getResponseBodyAsString().getBytes(&quot;8859_1&quot;));</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //打印返回的信息</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(response);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method.releaseConnection();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; /**</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp; * 使用GET方式提交数据</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp; * @return</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp; */</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; private static HttpMethod getGetMethod(){</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new GetMethod(&quot;/simcard.php?simcard=1330227&quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; /**</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp; * 使用POST方式提交数据</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp; * @return</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp; */</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; private static HttpMethod getPostMethod(){</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PostMethod post = new PostMethod(&quot;/simcard.php&quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NameValuePair simcard = new NameValuePair(&quot;simcard&quot;,&quot;1330227&quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.setRequestBody(new NameValuePair[] { simcard});</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return post;</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">}</font></p>
<p><font size="4">在上面的例子中页面</font><a href="http://www.imobile.com.cn/simcard.php"><font size="4">http://www.imobile.com.cn/simcard.php</font></a><font size="4">需要一个参数是simcard，这个参数值为手机号码段，即手机号码的前七位，服务器会返回提交的手机号码对应的省份、城市以及其他详细信息。GET的提交方法只需要在URL后加入参数信息，而POST则需要通过NameValuePair类来设置参数名称和它所对应的值</font></p>
<p><font size="4">3． 处理页面重定向</font></p>
<p><font size="4">在JSP/Servlet编程中response.sendRedirect方法就是使用HTTP协议中的重定向机制。它与JSP中的&lt;jsp:forward &hellip;&gt;的区别在于后者是在服务器中实现页面的跳转，也就是说应用容器加载了所要跳转的页面的内容并返回给客户端；而前者是返回一个状态码，这些状态码的可能值见下表，然后客户端读取需要跳转到的页面的URL并重新加载新的页面。就是这样一个过程，所以我们编程的时候就要通过HttpMethod.getStatusCode()方法判断返回值是否为下表中的某个值来判断是否需要跳转。如果已经确认需要进行页面跳转了，那么可以通过读取HTTP头中的location属性来获取新的地址。</font></p>
<p><font size="4">状态码<br />&nbsp;对应HttpServletResponse的常量<br />&nbsp;详细描述<br />&nbsp;<br />301<br />&nbsp;SC_MOVED_PERMANENTLY<br />&nbsp;页面已经永久移到另外一个新地址<br />&nbsp;<br />302<br />&nbsp;SC_MOVED_TEMPORARILY<br />&nbsp;页面暂时移动到另外一个新的地址<br />&nbsp;<br />303<br />&nbsp;SC_SEE_OTHER<br />&nbsp;客户端请求的地址必须通过另外的URL来访问<br />&nbsp;<br />307<br />&nbsp;SC_TEMPORARY_REDIRECT<br />&nbsp;同SC_MOVED_TEMPORARILY<br />&nbsp;</font></p>
<p><br /><font size="4">下面的代码片段演示如何处理页面的重定向</font></p>
<p><font size="4">client.executeMethod(post);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(post.getStatusLine().toString()); </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.releaseConnection();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //检查是否重定向</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int statuscode = post.getStatusCode();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((statuscode == HttpStatus.SC_MOVED_TEMPORARILY) ||</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (statuscode == HttpStatus.SC_MOVED_PERMANENTLY) ||</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (statuscode == HttpStatus.SC_SEE_OTHER) ||</font></p>
<p><font size="4">(statuscode == HttpStatus.SC_TEMPORARY_REDIRECT)) {</font></p>
<p><font size="4">//读取新的URL地址</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Header header = post.getResponseHeader(&quot;location&quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (header != null) {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String newuri = header.getValue();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((newuri == null) || (newuri.equals(&quot;&quot;)))</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; newuri = &quot;/&quot;; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetMethod redirect = new GetMethod(newuri);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.executeMethod(redirect);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;Redirect:&quot;+ redirect.getStatusLine().toString()); </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; redirect.releaseConnection();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;Invalid redirect&quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">我们可以自行编写两个JSP页面，其中一个页面用response.sendRedirect方法重定向到另外一个页面用来测试上面的例子。</font></p>
<p><font size="4">4． 模拟输入用户名和口令进行登录</font></p>
<p><font size="4">本小节应该说是HTTP客户端编程中最常碰见的问题，很多网站的内容都只是对注册用户可见的，这种情况下就必须要求使用正确的用户名和口令登录成功后，方可浏览到想要的页面。因为HTTP协议是无状态的，也就是连接的有效期只限于当前请求，请求内容结束后连接就关闭了。在这种情况下为了保存用户的登录信息必须使用到Cookie机制。以JSP/Servlet为例，当浏览器请求一个JSP或者是Servlet的页面时，应用服务器会返回一个参数，名为jsessionid（因不同应用服务器而异），值是一个较长的唯一字符串的Cookie，这个字符串值也就是当前访问该站点的会话标识。浏览器在每访问该站点的其他页面时候都要带上jsessionid这样的Cookie信息，应用服务器根据读取这个会话标识来获取对应的会话信息。</font></p>
<p><font size="4">对于需要用户登录的网站，一般在用户登录成功后会将用户资料保存在服务器的会话中，这样当访问到其他的页面时候，应用服务器根据浏览器送上的Cookie中读取当前请求对应的会话标识以获得对应的会话信息，然后就可以判断用户资料是否存在于会话信息中，如果存在则允许访问页面，否则跳转到登录页面中要求用户输入帐号和口令进行登录。这就是一般使用JSP开发网站在处理用户登录的比较通用的方法。</font></p>
<p><font size="4">这样一来，对于HTTP的客户端来讲，如果要访问一个受保护的页面时就必须模拟浏览器所做的工作，首先就是请求登录页面，然后读取Cookie值；再次请求登录页面并加入登录页所需的每个参数；最后就是请求最终所需的页面。当然在除第一次请求外其他的请求都需要附带上Cookie信息以便服务器能判断当前请求是否已经通过验证。说了这么多，可是如果你使用httpclient的话，你甚至连一行代码都无需增加，你只需要先传递登录信息执行登录过程，然后直接访问想要的页面，跟访问一个普通的页面没有任何区别，因为类HttpClient已经帮你做了所有该做的事情了，太棒了！下面的例子实现了这样一个访问的过程。</font></p>
<p><br /><font size="4">/*</font></p>
<p><font size="4">&nbsp;* Created on 2003-12-7 by Liudong</font></p>
<p><font size="4">&nbsp;*/</font></p>
<p><font size="4">package http.demo;</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">import org.apache.commons.httpclient.*;</font></p>
<p><font size="4">import org.apache.commons.httpclient.cookie.*;</font></p>
<p><font size="4">import org.apache.commons.httpclient.methods.*;</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">/**</font></p>
<p><font size="4">&nbsp;* 用来演示登录表单的示例</font></p>
<p><font size="4">&nbsp;* @author Liudong</font></p>
<p><font size="4">&nbsp;*/</font></p>
<p><font size="4">public class FormLoginDemo {</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; static final String LOGON_SITE = &quot;localhost&quot;;</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; static final int&nbsp;&nbsp;&nbsp; LOGON_PORT = 8080;</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws Exception{</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpClient client = new HttpClient();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //模拟登录页面login.jsp-&gt;main.jsp</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PostMethod post = new PostMethod(&quot;/main.jsp&quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NameValuePair name = new NameValuePair(&quot;name&quot;, &quot;ld&quot;);&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NameValuePair pass = new NameValuePair(&quot;password&quot;, &quot;ld&quot;);&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.setRequestBody(new NameValuePair[]{name,pass});</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int status = client.executeMethod(post);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(post.getResponseBodyAsString());</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.releaseConnection();&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //查看cookie信息</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CookieSpec cookiespec = CookiePolicy.getDefaultSpec();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cookie[] cookies = cookiespec.match(LOGON_SITE, LOGON_PORT, &quot;/&quot;, false, client.getState().getCookies());</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (cookies.length == 0) {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;None&quot;);&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; cookies.length; i++) {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(cookies[i].toString());&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //访问所需的页面main2.jsp</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetMethod get = new GetMethod(&quot;/main2.jsp&quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.executeMethod(get);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(get.getResponseBodyAsString());</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get.releaseConnection();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">}</font></p>
<p><font size="4">5． 提交XML格式参数</font></p>
<p><font size="4">提交XML格式的参数很简单，仅仅是一个提交时候的ContentType问题，下面的例子演示从文件文件中读取XML信息并提交给服务器的过程，该过程可以用来测试Web服务。</font></p>
<p><font size="4">import java.io.File;</font></p>
<p><font size="4">import java.io.FileInputStream;</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">import org.apache.commons.httpclient.HttpClient;</font></p>
<p><font size="4">import org.apache.commons.httpclient.methods.EntityEnclosingMethod;</font></p>
<p><font size="4">import org.apache.commons.httpclient.methods.PostMethod;</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">/**</font></p>
<p><font size="4">&nbsp;* 用来演示提交XML格式数据的例子</font></p>
<p><font size="4">&nbsp;*/</font></p>
<p><font size="4">public class PostXMLClient {</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws Exception {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File input = new File(&ldquo;test.xml&rdquo;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PostMethod post = new PostMethod(&ldquo;http://localhost:8080/httpclient/xml.jsp&rdquo;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置请求的内容直接从文件中读取</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.setRequestBody(new FileInputStream(input));</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (input.length() &lt; Integer.MAX_VALUE) </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.setRequestContentLength(input.length());</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.setRequestContentLength(EntityEnclosingMethod.CONTENT_LENGTH_CHUNKED);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 指定请求内容的类型</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.setRequestHeader(&quot;Content-type&quot;, &quot;text/xml; charset=GBK&quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpClient httpclient = new HttpClient(); </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int result = httpclient.executeMethod(post); </font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;Response status code: &quot; + result);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;Response body: &quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(post.getResponseBodyAsString());</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; post.releaseConnection();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">}</font></p>
<p><font size="4">6． 通过HTTP上传文件</font></p>
<p><font size="4">httpclient使用了单独的一个HttpMethod子类来处理文件的上传，这个类就是MultipartPostMethod，该类已经封装了文件上传的细节，我们要做的仅仅是告诉它我们要上传文件的全路径即可，下面的代码片段演示如何使用这个类。</font></p>
<p><font size="4">MultipartPostMethod filePost = new MultipartPostMethod(targetURL);</font></p>
<p><font size="4">filePost.addParameter(&quot;fileName&quot;, targetFilePath);</font></p>
<p><font size="4">HttpClient client = new HttpClient();</font></p>
<p><font size="4">//由于要上传的文件可能比较大,因此在此设置最大的连接超时时间</font></p>
<p><font size="4">client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);</font></p>
<p><font size="4">int status = client.executeMethod(filePost);</font></p>
<p><br /><font size="4">上面代码中，targetFilePath即为要上传的文件所在的路径。</font></p>
<p><font size="4">7． 访问启用认证的页面</font></p>
<p><font size="4">我们经常会碰到这样的页面，当访问它的时候会弹出一个浏览器的对话框要求输入用户名和密码后方可，这种用户认证的方式不同于我们在前面介绍的基于表单的用户身份验证。这是HTTP的认证策略，httpclient支持三种认证方式包括：基本、摘要以及NTLM认证。其中基本认证最简单、通用但也最不安全；摘要认证是在HTTP 1.1中加入的认证方式，而NTLM则是微软公司定义的而不是通用的规范，最新版本的NTLM是比摘要认证还要安全的一种方式。</font></p>
<p><font size="4">下面例子是从httpclient的CVS服务器中下载的，它简单演示如何访问一个认证保护的页面：</font></p>
<p><br /><font size="4">import org.apache.commons.httpclient.HttpClient;</font></p>
<p><font size="4">import org.apache.commons.httpclient.UsernamePasswordCredentials;</font></p>
<p><font size="4">import org.apache.commons.httpclient.methods.GetMethod;</font></p>
<p><font size="4">&nbsp;</font></p>
<p><font size="4">public class BasicAuthenticationExample {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; public BasicAuthenticationExample() {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; public static void main(String[] args) throws Exception {</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpClient client = new HttpClient();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.getState().setCredentials(</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;</font><a href="http://www.verisign.com/"><font size="4">www.verisign.com</font></a><font size="4">&quot;,</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;realm&quot;,</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new UsernamePasswordCredentials(&quot;username&quot;, &quot;password&quot;)</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetMethod get = new GetMethod(&quot;</font><a href="https://www.verisign.com/products/index.html"><font size="4">https://www.verisign.com/products/index.html</font></a><font size="4">&quot;);</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get.setDoAuthentication( true );</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int status = client.executeMethod( get );</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(status+&quot;&quot;+ get.getResponseBodyAsString());</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get.releaseConnection();</font></p>
<p><font size="4">&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="4">}</font></p>
<p><font size="4">8． 多线程模式下使用httpclient</font></p>
<p><font size="4">多线程同时访问httpclient，例如同时从一个站点上下载多个文件。对于同一个HttpConnection同一个时间只能有一个线程访问，为了保证多线程工作环境下不产生冲突，httpclient使用了一个多线程连接管理器的类：MultiThreadedHttpConnectionManager，要使用这个类很简单，只需要在构造HttpClient实例的时候传入即可，代码如下：</font></p>
<p><font size="4">MultiThreadedHttpConnectionManager connectionManager = </font></p>
<p><font size="4">&nbsp;&nbsp; new MultiThreadedHttpConnectionManager();</font></p>
<p><font size="4">HttpClient client = new HttpClient(connectionManager);</font></p>
<p><font size="4">以后尽管访问client实例即可。</font></p>
<p><font size="4">参考资料：</font></p>
<p><font size="4">httpclient首页：&nbsp;&nbsp;&nbsp; </font><a href="http://jakarta.apache.org/commons/httpclient/"><font size="4">http://jakarta.apache.org/commons/httpclient/</font></a><br /><font size="4">关于NTLM是如何工作：&nbsp; </font><a href="http://davenport.sourceforge.net/ntlm.html"><font size="4">http://davenport.sourceforge.net/ntlm.html</font></a><br /></p>
</font></p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=33</link>
			<title><![CDATA[字符集编码检测]]></title>
			<author>jaddy0302@126.com(jaddy0302)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Sat,09 Dec 2006 15:17:50 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=33</guid>	
		<description><![CDATA[<p>nsDetector det = new nsDetector(nsPSMDetector.ALL);<br />&nbsp;&nbsp;&nbsp; nsICharsetDetectionObserver nsIC = new nsICharsetDetectionObserver() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String encod = &quot;&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void Notify(String charset) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HtmlCharsetDetector.found = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; encod = charset;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;CHARSET = &quot; + charset);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String getEncoding() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;获得编码：&quot; + encod);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return encod;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; };</p>
<p>&nbsp;&nbsp;&nbsp; det.Init(nsIC);</p>
<p><br />&nbsp;&nbsp;&nbsp; det.DoIt(buf, buf.length, false);<br />&nbsp;&nbsp;&nbsp; det.DataEnd();<br />&nbsp;&nbsp;&nbsp; String encode = nsIC.getEncoding();</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=31</link>
			<title><![CDATA[分词算法设计思想----本站 Lucene 分词算法]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Sun,19 Nov 2006 13:28:48 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=31</guid>	
		<description><![CDATA[<p>首先是词库</p>
<p>词库包含有以下种 ， 其功能对应分别为：</p>
<p>snotforeign 消除部分组合歧异&nbsp; 例如：博客中搜索 （中搜）</p>
<p>numbers_u8 分词处理，分简体和繁体， 中英文数字 例如：二零零六</p>
<p>foreign_u8 外来词处理</p>
<p>surname_u8&nbsp; 人名区分</p>
<p>bothlexu8 分词词库主体</p>
<p>内存中的词库组织形式为：</p>
<p>词条(keyword)&nbsp; 类别(type)</p>
<p>其中，词条 就是 bothlexu8 文件中的一行或其子串 ， 类别 有两种 ， 一种是 原始词（bothlexu8 文件中的一行） ， 一种是原始词截取的子串（用于最大切分）</p>
<p>然后是分词算法，描述如下：</p>
<p>从待切分字串str中取出一个字符（currentchar），把这个字符加到匹配字符串（currentword）中去，到词典中去匹配（同时匹配currentword+next currentchar），如果匹配成功，则取出匹配的字符串，得到该串的类型，如果是1（原始词），则匹配成功，在取下一个字符的时候将该词加入Token；如果匹配类别是2（原始词子串），表示有可能不是最大匹配，则继续取字符进行下一次匹配 ，如果匹配不成功表示当前字符已是最大匹配，加入Token；如果匹配成功则继续取字匹配。如果当前字符是与前一字符不同类别（中英文、数字、字符等），则当前currentword加入 Token，去掉标点符号等字符。</p>
<p>加入Token 同时记录词的位置信息（包含标点符号等字符） ， 当前词库取词只取4个字符或者以下的词条，如有需要可以将该值加到8个或以上，对性能有些影响，不适合太大。另外，平移窗口大小是1个字符 ， 也可以扩展到2个字符或者3个字符甚至更大，但是，增大平移窗口需要有对窗口的处理，也比较麻烦。</p>
<p>这个算法的处理效率为 2万字/秒 ，不过是单线程的 ， 要是能够到多线程，速度估计可以在提高N倍，如果可以达到20W字/秒，就比较有用了。</p>
<p>另外分词准确程度取决词库，没有完善的知识库，这是一个缺陷，组合歧异识别在这里面只是一个可有可无的小功能，以后的工作就是不断的完善知识库，增加歧异消除和新词识别（名字，如人名、地名、机构名等）功能</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=30</link>
			<title><![CDATA[搜索引擎历史【转贴】]]></title>
			<author>jaddy0302@126.com(christian)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Wed,15 Nov 2006 15:55:43 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=30</guid>	
		<description><![CDATA[<p>1990年以前，没有任何人能搜索互联网。 </p>
<p>　　所有搜索引擎的祖先，是1990年由Montreal的McGill University学生Alan Emtage、Peter Deutsch、Bill Wheelan发明的Archie(Archie FAQ)。当时World Wide Web还未出现。Archie是第一个自动索引互联网上匿名FTP网站文件的程序，但它还不是真正的搜索引擎。Archie是一个可搜索的FTP文件名列表，用户必须输入精确的文件名搜索，然后Archie会告诉用户哪一个FTP地址可以下载该文件。</p>
<p>　　由于Archie深受欢迎，受其启发，Nevada System Computing Services大学于1993年开发了一个Gopher（Gopher FAQ）搜索工具Veronica（Veronica FAQ）。Jughead是后来另一个Gopher搜索工具。</p>
<p>　　由于专门用于检索信息的Robot程序象蜘蛛(spider)一样在网络间爬来爬去，因此，搜索引擎的Robot程序被称为spider(Spider FAQ)程序。世界上第一个Spider程序，是MIT Matthew Gray的World wide Web Wanderer，用于追踪互联网发展规模。刚开始它只用来统计互联网上的服务器数量，后来则发展为也能够捕获网址（URL）。</p>
<p>　　与Wanderer相对应，1993年10月Martijn Koster创建了ALIWEB（Martijn Koster Annouces the Availability of Aliweb），它相当于Archie的HTTP版本。ALIWEB不使用网络搜寻Robot，如果网站主管们希望自己的网页被ALIWEB收录，需要自己提交每一个网页的简介索引信息，类似于后来大家熟知的Yahoo。</p>
<p>　　1993年底，一些基于此原理的搜索引擎开始纷纷涌现，其中最负盛名的三个是：Scotland的JumpStation、Colorado 大学Oliver McBryan的The World Wide Web Worm（First Mention of McBryan&rsquo;s World Wide Web Worm）、NASA的Repository-Based Software Engineering (RBSE) spider。</p>
<p>　　1993年2月，6个Stanford（斯坦福）大学生的想法是分析字词关系，以对互联网上的大量信息作更有效的检索。这就是Excite。后来曾以概念搜索闻名，2002年5月，被Infospace收购的Excite停止自己的搜索引擎，改用元搜索引擎Dogpile</p>
<p>　　1994年1月，第一个既可搜索又可浏览的分类目录EINet Galaxy（Tradewave Galaxy）上线。除了网站搜索，它还支持Gopher和Telnet搜索。　</p>
<p>　　1994年4月，Stanford两名博士生，美籍华人Jerry Yang（杨致远）和David Filo共同创办了Yahoo。随着访问量和收录链接数的增长，Yahoo目录开始支持简单的数据库搜索。因为Yahoo!的数据是手工输入的，所以不能真正被归为搜索引擎，事实上只是一个可搜索的目录。搜索效率明显提高。（Yahoo以后陆续使用Altavista、Inktomi、Google提供搜索引擎服务）</p>
<p>　　1994年初，Washington大学CS学生Brian Pinkerton开始了他的小项目WebCrawler（Brian Pinkerton Announces the Availability of Webcrawler）。1994年4月20日，WebCrawler正式亮相时仅包含来自6000个服务器的内容。WebCrawler是互联网上第一个支持搜索文件全部文字的全文搜索引擎，在它之前，用户只能通过URL和摘要搜索，摘要一般来自人工评论或程序自动取正文的前100个字。（后来webcrawler陆续被AOL和Excite收购，现在和excite一样改用元搜索引擎Dogpile）</p>
<p>　　Lycos（Carnegie Mellon University Center for Machine Translation Announces Lycos ）是搜索引擎史上又一个重要的进步。Carnegie Mellon University的Michael Mauldin将John Leavitt的spider程序接入到其索引程序中，创建了Lycos。1994年7月20日，数据量为54,000的Lycos正式发布。除了相关性排序外，Lycos还提供了前缀匹配和字符相近限制，Lycos第一个在搜索结果中使用了网页自动摘要，而最大的优势还是它远胜过其它搜索引擎的数据量：1994年8月－－394,000 documents；1995年1月－－1.5 million documents；1996年11月－－over 60 million documents。（注：1999年4月，Lycos停止自己的Spider，改由Fast提供搜索引擎服务）</p>
<p>　　Infoseek（Steve Kirsch Announces Free Demos Of the Infoseek Search Engine）是另一个重要的搜索引擎，虽然公司声称1994年1月已创立，但直到年底它的搜索引擎才与公众见面。起初，Infoseek只是一个不起眼的搜索引擎，它沿袭Yahoo!和Lycos的概念，并没有什么独特的革新。但是它的发展史和后来受到的众口称赞证明，起初第一个登台并不总是很重要。Infoseek友善的用户界面、大量附加服务（such as UPS tracking, News, a directory, and the like) 使它声望日隆。而1995年12月与Netscape的战略性协议，使它成为一个强势搜索引擎：当用户点击Netscape浏览器上的搜索按钮时，弹出Infoseek的搜索服务，而此前由Yahoo!提供该服务。（注：Infoseek后来曾以相关性闻名，2001年2月，Infoseek停止了自己的搜索引擎，开始改用Overture的搜索结果）</p>
<p>　　1995年，一种新的搜索引擎形式出现了&mdash;&mdash;元搜索引擎（A Meta Search Engine Roundup）。用户只需提交一次搜索请求，由元搜索引擎负责转换处理后提交给多个预先选定的独立搜索引擎，并将从各独立搜索引擎返回的所有查询结果，集中起来处理后再返回给用户。第一个元搜索引擎，是Washington大学硕士生 Eric Selberg 和 oren Etzioni 的 Metacrawler。元搜索引擎概念上好听，但搜索效果始终不理想，所以没有哪个元搜索引擎有过强势地位。　</p>
<p>　　DEC的AltaVista(2001年夏季起部分网友需通过p-roxy访问，无p-roxy可用qbseach单选altavista搜索，只能显示第一页搜索结果)是一个迟到者，1995年12月才登场亮相（AltaVista Public Beta Press Release ）。但是，大量的创新功能使它迅速到达当时搜索引擎的顶峰。Altavista最突出的优势是它的速度（搜索引擎9238：比较搞笑，设计altavista的目的，据说只是为了展示DEC Alpha芯片的强大运算能力）。　　而Altavista的另一些新功能，则永远改变了搜索引擎的定义。AltaVista是第一个支持自然语言搜索的搜索引擎，AltaVista是第一个实现高级搜索语法的搜索引擎（如AND, or, NOT等)。用户可以用AltaVista搜索Newsgroups（新闻组）的内容并从互联网上获得文章，还可以搜索图片名称中的文字、搜索Titles、搜索Java applets、搜索ActiveX objects。AltaVista也声称是第一个支持用户自己向网页索引库提交或删除URL的搜索引擎，并能在24小时内上线。AltaVista最有趣的新功能之一，是搜索有链接指向某个URL的所有网站。在面向用户的界面上，AltaVista也作了大量革新。它在搜索框区域下放了&ldquo;tips&rdquo;以帮助用户更好的表达搜索式，这些小tip经常更新，这样，在搜索过几次以后，用户会看到很多他们可能从来不知道的的有趣功能。这系列功能，逐渐被其它搜索引擎广泛采用。1997年，AltaVista发布了一个图形演示系统LiveTopics，帮助用户从成千上万的搜索结果中找到想要的。</p>
<p>　　然后到来的是HotBot。1995年9月26日，加州伯克利分校CS助教Eric Brewer、博士生Paul Gauthier创立了Inktomi（UC Berkeley Announces Inktomi），1996年5月20日，Inktomi公司成立，强大的HotBot出现在世人面前。声称每天能抓取索引1千万页以上，所以有远超过其它搜索引擎的新内容。HotBot也大量运用cookie储存用户的个人搜索喜好设置。（Hotbot曾是随后几年最受欢迎的搜索引擎之一，后被Lycos收购）</p>
<p>　　Northernlight 公司于1995年9月成立于马萨诸塞州剑桥，1997年8月，Northernlight搜索引擎正式现身。它曾是拥有最大数据库的搜索引擎之一，它没有Stop Words，它有出色的Current News、7,100多出版物组成的Special Collection、良好的高级搜索语法，第一个支持对搜索结果进行简单的自动分类。（2002年1月16日，Northernlight公共搜索引擎关闭，随后被divine收购，但在Nlresearch，选中&quot;World Wide Web only&quot;，仍可使用Northernlight搜索引擎）</p>
<p>　　1998年10月之前，Google只是Stanford大学的一个小项目BackRub。1995年博士生Larry Page开始学习搜索引擎设计，于1997年9月15日注册了google.com的域名，1997年底，在Sergey Brin和Scott Hassan、Alan Steremberg的共同参与下，BachRub开始提供Demo。1999年2月，Google完成了从Alpha版到Beta版的蜕变。Google公司则把1998年9月27日认作自己的生日。</p>
<p>　　Google在Pagerank、动态摘要、网页快照、DailyRefresh、多文档格式支持、地图股票词典寻人等集成搜索、多语言支持、用户界面等功能上的革新，象Altavista一样，再一次永远改变了搜索引擎的定义。</p>
<p>　　在2000年中以前，Google虽然以搜索准确性备受赞誉，但因为数据库不如其它搜索引擎大，缺乏高级搜索语法，所以使用价值不是很高，推广并不快。直到2000年中数据库升级后，又借被Yahoo选作搜索引擎的东风，才一飞冲天。</p>
<p>　　Fast（Alltheweb）公司创立于1997年，是挪威科技大学(NTNU)学术研究的副产品。1999年5月，发布了自己的搜索引擎AllTheWeb。Fast创立的目标是做世界上最大和最快的搜索引擎，几年来庶几近之。Fast（Alltheweb）的网页搜索可利用ODP自动分类，支持Flash和pdf搜索，支持多语言搜索，还提供新闻搜索、图像搜索、视频、MP3、和FTP搜索，拥有极其强大的高级搜索功能。</p>
<p>　　Teoma 起源于1998年Rutgers大学的一个项目。Apostolos Gerasoulis教授带领华裔Tao Yang教授等人创立Teoma于新泽西Piscataway，2001年春初次登场，2001年9月被提问式搜索引擎Ask Jeeves收购，2002年4月再次发布。Teoma的数据库目前仍偏小，但有两个出彩的功能：支持类似自动分类的Refine；同时提供专业链接目录的Resources。</p>
<p>　　Wisenut 由韩裔Yeogirl Yun创立。2001年春季发布Beta版，2001年9月5日发布正式版，2002年4月被分类目录提供商looksmart收购。wisenut也有两个出彩的功能：包含类似自动分类和相关检索词的WiseGuide；预览搜索结果的Sneak-a-Peek。</p>
<p>　　Gigablast 由前Infoseek工程师Matt Wells创立，2002年3月展示pre-beta版，2002年7月21日发布Beta版。Gigablast的数据库目前仍偏小，但也提供网页快照，一个特色功能是即时索引网页，你的网页刚提交它就能搜索（注：这个spammers的肉包子功能暂已关闭）。</p>
<p>　　Openfind 创立于1998年1月，其技术源自台湾中正大学吴升教授所领导的GAIS实验室。Openfind起先只做中文搜索引擎，曾经是最好的中文搜索引擎，鼎盛时期同时为三大著名门户新浪、奇摩、雅虎提供中文搜索引擎，但2000年后市场逐渐被Baidu和Google瓜分。2002年6月，Openfind重新发布基于GAIS30 Project的Openfind搜索引擎Beta版，推出多元排序(PolyRankTM)，宣布累计抓取网页35亿，开始进入英文搜索领域，此后技术升级明显加快。</p>
<p>　　北大天网 是国家&quot;九五&quot;重点科技攻关项目&quot;中文编码和分布式中英文信息发现&quot;的研究成果，由北大计算机系网络与分布式系统研究室开发，于1997年10月29日正式在CERNET上提供服务。2000年初成立天网搜索引擎新课题组，由国家973重点基础研究发展规划项目基金资助开发，收录网页约6000万，利用教育网优势，有强大的ftp搜索功能。</p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=29</link>
			<title><![CDATA[通用时间格式转换可以转换的时间戳格式列表]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Sat,11 Nov 2006 17:37:59 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=29</guid>	
		<description><![CDATA[<p>可以识别以下格式的时间：</p>
<p>16 Sep 2004 00:13:31<br />Mon, 28 Aug 2006<br />Thu, 7 Sep 2006 22:23 GMT<br />29 Dec 2005 09:10:00 -0500<br />8/8/2006<br />16 Sep 2004 00:13:32<br />03/08/2006<br />July 27 2004 17:49:07.<br />January 31 2005 16:40:37.<br />Friday, 15 9 2006 12:00:00 -0700<br />1158993184<br />Thu, 21 Sep 2006 19:19 GMT<br />2006-05-17<br />9/23/2006 9:25:57 PM<br />Thu, 21 Sep 2006 19:19 GMT<br />2006-8-28<br />9/23/2006 8:32:12 AM<br />2006-11-03 12:37 AM<br />2006-11-04 05:05 PM<br />2006-10-10T12:24:05+08:00<br />2006-11-04T14:19:34Z<br />Sat,04 Nov 2006 23:37:53 +0800<br />Sat, 4 Nov 2006 22:24:38 +0800<br />Sat, 04 Nov 2006 15:30:13 GMT+8<br />日, 19 二月 2006 07:17:58 GMT<br />2006-11-04 19:03:31<br />Sat, 04 Nov 2006 06:43:14 GMT<br />2006-11-04 23:13:52<br />Sat, 04 Nov 2006 15:11:52 GMT<br />2006-11-3星期五(Friday)晴<br />2005-12-10 20:33:39 星期六<br />2006-10-30 17:45:35 星期一<br />2006-06-27T17:29:35Z<br />2006-06-27T17:29:35Z<br />2006-06-27T17:29:35Z<br />2006-06-27T17:29:35Z<br />2006-06-27T17:29:35Z<br />2006-11-2 19:08:49<br />Fri, 03 Nov 2006 13:57:15 +0000<br />Sun, 29 Oct 2006 17:57:00 -0600<br />Fri, 03 Nov 2006 07:10:04 +0000<br />Sat, 04 Nov 2006 19:00:57 GMT<br />Sat, 04 Nov 2006 14:56:00 GMT<br />2006-10-15 11:10<br />2006-11-04 20:07:32<br />Sat, 04 Nov 2006 13:27:09 +0000<br />Sat, 04 Nov 2006 00:58:15 +0800<br />Sun, 29 Oct 2006 17:57:00 -0600<br />Thu, 26 Oct 2006 14:39:52 +0000<br />11.2 2006 / 14:54<br />2006-11-4 21:47:00<br />2006-8-22 16:48<br />2006-10-24 15:52:08<br /></p>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=28</link>
			<title><![CDATA[Web 2.0 的核心思想]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,10 Nov 2006 23:19:46 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=28</guid>	
		<description><![CDATA[<small class="metadata"><font size="2"><span class="chronodata">作者: 拙尘 发表于 2006年07月28日 </span><br /></font><span class="chronodata"><font size="2">分类: </font><a title="查看 Web 2.0 的所有文章" href="http://www.yeeyan.com/category/web-20/" rel="category tag"><font color="#2277dd" size="3">Web 2.0</font></a></span> <span class="chronodata"><font size="2">&nbsp;--&nbsp;&nbsp;[</font><a href="http://www.xd-tech.com/blog/javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape('{言多必得} 之 Web 2.0 的核心思想')+'&amp;u='+escape('http://www.yeeyan.com/web-20-%e7%9a%84%e6%a0%b8%e5%bf%83%e6%80%9d%e6%83%b3')+'&amp;c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();" rel="nofollow"><font color="#2277dd" size="3">收藏入365Key</font></a><font size="2">]</font></span> </small>
<div class="itemtext"><blockquote>
<p>作者：Joshua Porter<br />翻译：拙尘 @ yeeyan.com<br />原文链接：<a href="http://bokardo.com/archives/the-one-crucial-idea-of-web-20/" target="_blank"><font color="#2277dd" size="3">The One Crucial Idea of Web 2.0</font></a></p>
</blockquote>
<p><em>（译者：到底什么是Web 2.0的精髓？新技术？还是新观念？对此的争论可谓仁者见仁，智者见智。本文作者认为是&ldquo;大众的智慧&rdquo;这一新观念，带动了技术和社会的变革，因而是Web 2.0的精髓所在。稍后，我们会翻译另一个作者对此文的回应，从中可以看到不同的观点。改编套用&ldquo;达芬奇密码&rdquo;中的一句台词：Debate Is Good。）</em></p>
<p>James Surowiecki 在SXSW大会上作了题为&ldquo;大众的智慧&rdquo;（The Wisdom of Crowds）的演讲。我对这一思想在如此短的时间内得到广泛传播而感到震惊。究其缘由，是Google的&ldquo;网页等级&rdquo;（Pagerank）算法所获得的成功，推动了这一思想的传播。该算法正是利用了&ldquo;大众的智慧&rdquo;来评估网页的内容。</p>
<p>如果用一句话来高度概括什么是Web 2.0的核心思想，那就是利用网络来发掘大众的智慧。这一思想在过去只是天方夜谭，今天则变成了现实。先暂时忘掉Ajax，API 等等这些所谓的技术吧。真正的挑战在于：收集我们能够找到的所有被数字化记录下来的行为碎片，分析其内在的联系，并通过简单明了的界面，最终发掘出大众的智慧。</p>
<p>有人认为Web 2.0的精髓在于技术，对此我不敢苟同。Web 2.0的核心与灵魂应该是那些带动了技术和社会变革的新思想；而其核心思想，正是Surowiecki在他的著作《The Wisdom of Crowds: Why the Many Are Smarter Than the Few and How Collective Wisdom Shapes Business, Economies, Societies and Nations》中所阐明的那一条。这一思想，从此改变了人们写软件的方式。</p>
<p>有越来越多的证据表明了这一点。Richard MacManus 最近介绍过<a href="http://www.readwriteweb.com/archives/rojo_adds_relev.php" target="_blank"><font color="#2277dd" size="3">Rojo的新特性</font></a>。在说明这些特性到底是什么时，Chris Alden 告诉 Richard：它们就是网页等级的翻版：</p>
<p><em>&ldquo;我们是如何决定关联度的呢？简单地说，正如Google利用链接的元数据（metadata）来分析搜索结果的关联度一样，我们也有相当数量的元数据，可以用来进行关联度分析。这些元数据包括：有多少人在读你的故事、做标签、和投你一票；一篇帖子的流行性如何&mdash;&mdash;从你的个人角度，你的圈子，以及所有读者的角度来说；还有就是链接数据和内容分析，等等。&rdquo;</em></p>
<p>这一变革的最终结果产生了关联引擎（relevance engines），过滤器（filters），推荐系统（recommendation systems），Web 2.0 软件，等等，等等。而Surowiecki则天才地把这些总结到了一起。 </p>
</div>
<!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description rdf:about="http://www.yeeyan.com/web-20-%e7%9a%84%e6%a0%b8%e5%bf%83%e6%80%9d%e6%83%b3"
dc:identifier="http://www.yeeyan.com/web-20-%e7%9a%84%e6%a0%b8%e5%bf%83%e6%80%9d%e6%83%b3"
dc:title="Web 2.0 的核心思想"
trackback:ping="http://www.yeeyan.com/web-20-%e7%9a%84%e6%a0%b8%e5%bf%83%e6%80%9d%e6%83%b3/trackback/"  />
</rdf:RDF>				-->]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=27</link>
			<title><![CDATA[白手起家的艺术]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Fri,10 Nov 2006 23:18:37 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=27</guid>	
		<description><![CDATA[<small class="metadata"><font size="2"><span class="chronodata">作者: 拙尘 发表于 2006年07月27日 </span><br /></font><span class="chronodata"><font size="2">分类: </font><a title="查看 创业 的所有文章" href="http://www.yeeyan.com/category/%e5%88%9b%e4%b8%9a/" rel="category tag"><font color="#2277dd" size="3">创业</font></a></span> <span class="chronodata"><font size="2">&nbsp;--&nbsp;&nbsp;[</font><a href="http://www.xd-tech.com/blog/javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape('{言多必得} 之 白手起家的艺术')+'&amp;u='+escape('http://www.yeeyan.com/%e7%99%bd%e6%89%8b%e8%b5%b7%e5%ae%b6%e7%9a%84%e8%89%ba%e6%9c%af')+'&amp;c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();" rel="nofollow"><font color="#2277dd" size="3">收藏入365Key</font></a><font size="2">]</font></span> </small>
<div class="itemtext"><blockquote>
<p><strong>原文作者</strong>：Guy Kawasaki<br /><strong>译者</strong>： 拙尘 @ yeeyan.com<br /><strong>原文链接</strong>：<a href="http://blog.guykawasaki.com/2006/01/the_art_of_boot.html" target="_blank"><font color="#2277dd" size="3">The Art of Bootstrapping</font></a></p>
</blockquote>
<p><em>(译者：关于 Guy Kawasaki，已经在<strong>雷声大雨点大</strong>翻译的另一篇文章<a href="http://www.yeeyan.com/%e5%88%9b%e4%b8%9a%e8%80%85%e7%9a%8410%e5%a4%a7%e8%b0%8e%e8%a8%80" target="_blank"><font color="#2277dd" size="3">《创业者的十大谎言》</font></a>里有过介绍了。在这篇文章里，作者对如何白手起家创业提出了11条建议。希望这些建议能对创业者们有所启迪。）<br /></em><br />有人曾经对我说，一个创业者得到风险投资的几率如同在一个晴天下站在游泳池里被闪电击中一样。这种比喻还是过于乐观了。</p>
<p>人们可能以种种借口拒绝投资你的企业：你们不是一个&ldquo;令人信服&rdquo;的团队，没有&ldquo;令人信服&rdquo;的技术，不在一个&ldquo;令人信服&rdquo;的市场里；或者你的公司根本就不具备 &ldquo;风险投资的潜质&rdquo;&mdash;&mdash;也就是说没有可能上市或者被巨资收购；再或者你的组织受到太多政府或环境因素的干扰。如果拿不到任何风险投资，你是否应该放弃呢？当然不！</p>
<p>我可以举出例子来说明，对于许多公司来说，太多的钱比太少的钱更糟糕&mdash;&mdash;这并不是说我不想有一天能运行超级碗（Super Bowl）那样的商业活动。但是直到那天成为现实之前，要想成功还必须白手起家（bootstrapping）。这个词来源于德国故事《吹牛大王历险记》，故事的主人公拉着自己的鞋后跟把自己从海里提了出来。下面是一些白手起家的艺术：</p>
<ol>
    <li>注重现金流而不是盈利性（Focus on cash flow, not profitability）。理论上讲，利润是生存的关键。问题是，理论不能用来付帐单。在现实中，你是用现金来付账单的，所以请把重点放在现金流上。如果你要白手起家，那么你的业务应该具备这些特点：必需的资金要少，销售周期和付款期要短，以及具有可重复增加的收入（recurring revenue）。这意味着你要放弃那些需要12个月的时间来完成定单、发货和收账的大单。现金对于白手起家者来说，就是一切。 </li>
    <li>自底向上的预测（Forecast from the bottom up）。很多创业者进行自顶向下的预测：&ldquo;美国有1亿5千万辆汽车。就算在第一年里只有1％的汽车装了我们的卫星收音系统，那就是150万套系统。&rdquo;而自底向上的预测是这样的：&ldquo;在第一年里，我们能够开设10个安装点。每个安装点平均每天安装10套系统的话，第一年的销售量将是 10个安装点 &times; 10套/天/安装点 &times; 240天 = 24000 套。&rdquo;24000和自顶向下中声称的150万保守估计显然相去甚远。你们觉得哪一个更有可能实现呢？ </li>
    <li>先发货，再测试（Ship, then test）。我已经听到批评的声音了：&ldquo;你怎么能够建议发送那些并不完美的货品呢？&rdquo;等等，等等。&ldquo;完美&rdquo;（perfect）是&ldquo;足够好&rdquo;（good enough）的敌人。当你的产品或服务足够好时，尽快向客户提交他们，以获得现金的流入。而且，花费更多的时间并不能保证产品的完美，只会产生更多不需要的功能。发货后，你也能了解到客户需要你真正解决什么问题。当然，这需要在你的信誉和现金流中做一个折衷：你当然不能向客户发送一堆垃圾，但也不能等待你的产品变得完美无瑕。注意：那些同生命科学有关的公司，请忽略这一条建议。 </li>
    <li>忘掉所谓&ldquo;令人信服&rdquo;的团队（Forget the &ldquo;proven&rdquo; team）。令人信服的团队要求太高&mdash;&mdash;特别是大多数人把这定义为一群在过去十年里为超级大公司工作的人们。这些人，习惯了某种特定的生活方式，但绝不是白手起家的生活方式。聘用那些年轻、便宜、渴望工作的人，那些上手快但并不一定有全面经验的人（people with fast chips, but not necessarily a fully functional instruction set）。当你实现了可观的现金流后，再聘用那些资深的管理者。在那之前，请使用那些你能够负担得起的人，并把他们培养成优秀的雇员。 </li>
    <li>从服务开始做起（Start as a service business）。假如你的想法是要最终成立一个软件公司，让人们花钱买你的软件。这当然是一个很清晰的业务并且有完善的商业模式。但是，在完成你的软件之前，你还可以提供基于你的中期产品的咨询服务等。这样做有两个好处：你可以立即获得收入并让真正的客户来测试你的产品。一旦你的软件经受住了各种各样的测试和考验，你就可以把公司转换为产品型了。 </li>
    <li>注重功能而不是形式（Focus on function, not form）。我喜欢好的&ldquo;形式&rdquo;。MacBooks；Audis；Graf skates；Bauer sticks；Breitling watches。你还可以举出很多。但是白手起家者们在买东西时，注重的是功能而不是形式。上面那些形式，相对应的功能分别是：计算；从点A移动到点B；滑冰；滑雪；了解时间。这些功能并不要求那些昂贵的形式。椅子就是用来让你的屁股坐在上面的；它并不需要看上去属于哪个现代艺术的博物馆。你要设计高贵的东西，但是要买便宜的东西。 </li>
    <li>有选择地战斗（Pick your battles）。白手起家者们有选择地战斗。他们不会在所有的战线上开战，因为他们承担不起。如果你要开设一所新的教堂，你真的需要一套10万美金的多媒体视听系统吗？还是从一座讲台上发出的福音？如果你要建设一个靠广告收入的网站（a content wet site based on the advertising model），你需要自己写客户广告发布软件（customer ad-serving software）吗？我不这样认为。 </li>
    <li>雇用尽可能少的员工（Understaff）。许多创业者为可能发生的最好情况而储备雇员。&ldquo;保守的估计（自顶向下），第一年卫星收音系统的销售量会是150万套。我们最好开设一个24小时营业的客户支持中心。&rdquo;结果怎样？你根本就不可能销售150万套系统，但你的确为此雇用了200个员工，培训他们，并且把他们安置在一个5万平方英尺的电子化市场中心里。白手起家者们雇用尽可能少的员工，因为他们知道任何糟糕的情况都可能发生。人手不足，按照在硅谷的说法，属于一个&ldquo;良性问题&rdquo;（a high quality problem）。相信我，当一个创业者因为销售激增而打电话要求更多的资金时，任何一个风险投资家都会对此惊喜若狂。而惊喜之所以称为惊喜，正是因为它们很少发生。 </li>
    <li>采用直销方式（Go direct）。在白手起家者和他的客户之间最好不要有第三方存在。的确，商店提供了接触消费者的途径，批发商们提供了货品分发的途径。但是上帝发明了电子商务（ecommerce），从而你可以直销你的商品并实现更高的边际利润。上帝的聪明之处还在于，通过直销，你能够了解更多的客户需求。商店和批发商们是用来满足需求的，他们并不创造需求。如果你能够创造足够的需求，你稍后总能找到办法来满足它；如果你不能创造足够的需求，那么所谓世界范围内的分发渠道对你来说毫无意义。 </li>
    <li>用业界的领先者来作比（Position against the leader）。没有钱来做长篇大论的广告吗？没关系。用业界的领先者来作比好了。Toyota是这样推销Lexus的：花一半的价钱，买Mercedes的品质。Toyota用不着解释什么是&ldquo;Mercedes的品质&rdquo;。想想看，这能为他们节省多少广告费！其它的像&ldquo;便宜的iPod&rdquo;和&ldquo;属于大众的Bose无噪音耳机&rdquo;，都有同样的效果。 </li>
    <li>直面惨淡的真相（Take the &ldquo;red pill&rdquo;）。正如Neo在The Matrix里做的决定一样。红色药丸会让你知道整个真相；而蓝色药丸则会使你像是醒来时觉得只是做了一场恶梦。白手起家者们没有那种奢侈去选择蓝色药丸。他们每天都在忙于知道真相&mdash;&mdash;这个兔子洞到底有多深。一个简单的计算公式是：现金总数除以烧钱的速度。因为这可以告诉你到底还可以活多久。就像我的朋友Craig Johnson喜欢说的：&ldquo;钱花光时你就玩完儿了。大多数的创业公司都是这样死掉的。&rdquo;只要你手里还有钱，你就没有出局。</li>
</ol>
</div>]]></description>
		</item>
		
			<item>
			<link>http://www.xd-tech.com/blog/default.asp?id=26</link>
			<title><![CDATA[通用时间格式转换]]></title>
			<author>jaddy0302@126.com(admin)</author>
			<category><![CDATA[搜索引擎]]></category>
			<pubDate>Tue,07 Nov 2006 10:13:52 +0800</pubDate>
			<guid>http://www.xd-tech.com/blog/default.asp?id=26</guid>	
		<description><![CDATA[<p>/*<br />&nbsp;* &lt;p&gt;Company: 线点科技 <a href="http://www.xd-tech.com.cn">www.xd-tech.com.cn</a> &lt;/p&gt;<br />&nbsp;* @author jaddy0302<br />&nbsp;* @version 0.25<br />&nbsp;* Created on 2006-9-20<br />&nbsp;* 搜索引擎 部分源代码<br />&nbsp;*/</p>
<p>import java.text.*;<br />import java.util.*;</p>
<p>public class DateUtil {<br />&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp;&nbsp; * GMT 时间转换 ， 0.2版本功能， 正则表达式 ， 部分存在 bug ， 去掉 时区标志<br />&nbsp;&nbsp;&nbsp;&nbsp; * 后续版本将会保留时区标志<br />&nbsp;&nbsp;&nbsp;&nbsp; *<br />&nbsp;&nbsp;&nbsp;&nbsp; * @param date<br />&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定时间字符串。<br />&nbsp;&nbsp;&nbsp;&nbsp; * @return 指定日期的下一个星期<br />&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp; public static synchronized java.util.Date getRegtime(String time) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer strb = new StringBuffer();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; time != null &amp;&amp; i &lt; time.length(); i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.charAt(i) != '?')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb.append(time.charAt(i));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb.append(&quot; &quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;UTC&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.indexOf(&quot;UTC&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.charAt(strb.length() - 1) == ' ') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.length() - 1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;EDT&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.indexOf(&quot;EDT&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.charAt(strb.length() - 1) == ' ') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.length() - 1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(time.indexOf(&quot;T&quot;)&gt;0 &amp;&amp; time.indexOf(&quot;Z&quot;)&gt;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.toString().replace('T',' ').replace('Z',' '))&nbsp; ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;CDT&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.indexOf(&quot;CDT&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.charAt(strb.length() - 1) == ' ') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.length() - 1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;GMT&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.indexOf(&quot;GMT&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.charAt(strb.length() - 1) == ' ') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.length() - 1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;CST&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.indexOf(&quot;CST&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.charAt(strb.length() - 1) == ' ') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.length() - 1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (time.indexOf(&quot;PDT&quot;) &gt; 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.indexOf(&quot;PDT&quot;)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strb.charAt(strb.length() - 1) == ' ') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(strb.substring(0, strb.length() - 1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SimpleDateFormat format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE MMM dd HH:mm:ss z yyyy&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{1,4}\\-[a-zA-Z]{1,}-\\d{1,2">\\d{1,4}\\-[a-zA-Z]{1,}-\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MMM-dd HH:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{1,4">\\d{1,4</a>} [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{1,}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //10 Sep 2006 16:00:00 GMT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;dd MMM yyyy HH:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{8">\\d{8</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyyMMdd&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,},\\d{2} <a href="http://www.xd-tech.com/blog/file://\\d{2">\\d{2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Sat,23 09 2006 13:19:52<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE,dd MM yyyy hh:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3}, <a href="http://www.xd-tech.com/blog/file://\\d{2">\\d{2</a>} [a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Sat, 23 Sep 2006 01:41<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE, dd MMM yyyy hh:mm&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{1},\\d{1,2">\\d{1},\\d{1,2</a>} [a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //0,17 Sep 2006 22:30:16<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.substring(time.indexOf(&quot;,&quot;)+1,time.length())) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;dd MMM yyyy hh:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{2}/\\d{2}/\\d{2">\\d{2}/\\d{2}/\\d{2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{2}:\\d{2}:\\d{2">\\d{2}:\\d{2}:\\d{2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //01/01/01 16:10:01<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;dd/MM/yy hh:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{1,2}/\\d{1,2}/\\d{4">\\d{1,2}/\\d{1,2}/\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{2}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //11/3/2002 10:02:13 PM</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;MM/dd/yyyy hh:mm:ss a&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}-\\d{1,2}-\\d{1,2">\\d{4}-\\d{1,2}-\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{3}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //2006-9-13 15:17:25 GMT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MM-dd hh:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}-\\d{1,2}-\\d{1,2}[a-zA-Z]{1}\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{4}-\\d{1,2}-\\d{1,2}[a-zA-Z]{1}\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //2006-09-16T22:16:00<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replace(&quot;T&quot;,&quot; &quot;)) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MM-dd hh:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3,}, <a href="http://www.xd-tech.com/blog/file://\\d{2">\\d{2</a>} [a-zA-Z]{3,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{3}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Wednesday, 20 September 2006 00:00 GMT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE, dd MMM yyyy hh:mm&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}-\\d{1,2}-\\d{1,2}T\\d{1,2}:\\d{1,2}:\\d{1,2}-\\d{1,2}:\\d{1,2">\\d{4}-\\d{1,2}-\\d{1,2}T\\d{1,2}:\\d{1,2}:\\d{1,2}-\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //2005-02-27T08:36:00-05:00<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replace(&quot;T&quot;,&quot; &quot;).substring(0,time.lastIndexOf(&quot;-&quot;))) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MM-dd hh:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}--\\d{1,2}-\\d{1,2}-T\\d{1,2">\\d{4}--\\d{1,2}-\\d{1,2}-T\\d{1,2</a>}: <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:-\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:-\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replace(&quot;T&quot;,&quot; &quot;).replace(&quot; &quot;,&quot;&quot;).substring(0,time.lastIndexOf(&quot;-&quot;))) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy--MM-dd-hh:mm:ss&quot;, Locale.US);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}-\\d{1,2}-\\d{1,2">\\d{4}-\\d{1,2}-\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;time:&quot;+time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MM-dd hh:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\w{4">\\w{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}[a-zA-Z]{2">\\d{1,2}:\\d{1,2}[a-zA-Z]{2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Jul 31st 2006 10:08PM<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;time&quot;+time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replace(&quot;st&quot;,&quot;&quot;).replace(&quot;nd&quot;,&quot;&quot;).replace(&quot;th&quot;,&quot;&quot;)) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;MMM dd yyyy hh:mma&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,2}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} -\\d{4}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.substring(time.indexOf(&quot;,&quot;)+2,time.length())) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;dd MMM yyyy HH:mm:ss Z&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[1]\\d{9}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;dd MMM yyyy HH:mm:ss Z&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(format.format(new Date(Long.parseLong(time)*1000)))&nbsp; ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3,}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{3,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{2}ST&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Saturday, 23 September 2006, 11:32:29 SAST<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE, dd MMM yyyy, HH:mm:ss Z&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}-\\d{1,2}-\\d{1,2">\\d{4}-\\d{1,2}-\\d{1,2</a>} [^\\x00-\\xff]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //2006-9-22 锟斤拷锟斤拷 08:40:18<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replaceAll(&quot;[^\\x00-\\xff]{1,}&quot;,&quot;&quot;)) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MM-dd&nbsp; HH:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{3,}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//Thu, 7 Sep 2006 22:23 GMT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE, dd MMM yyyy HH:mm&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}/\\d{1,2}/\\d{1,2">\\d{4}/\\d{1,2}/\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//2006/09/23 21:54<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy/MM/dd hh:mm&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{3}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{3} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//Tue, 19 Sep 2006<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE, dd MMM yyyy&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;<a href="http://www.xd-tech.com/blog/file://\\d{4}[^\\x00-\\xff]{1,}\\d{1,2}[^\\x00-\\xff]{1,}\\d{1,2}[^\\x00-\\xff]{1">\\d{4}[^\\x00-\\xff]{1,}\\d{1,2}[^\\x00-\\xff]{1,}\\d{1,2}[^\\x00-\\xff]{1</a>,}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replaceAll(&quot;[^\\x00-\\xff]{1,}&quot;,&quot;-&quot;)) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;yyyy-MM-dd&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//Sa, 23 Sep 2006 13:49:25<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(time.indexOf(&quot;, &quot;)&gt;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.substring(time.indexOf(&quot;, &quot;)+2,time.length())) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;dd MMM yyyy hh:mm:ss&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,} [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} [a-zA-Z ]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//Sat Sep 23 15:29:45 CD&nbsp; 2006<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Wed Sep 14 13:14:23 U C 2005<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(time);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,} [a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>} <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}:\\d{1,2">\\d{1,2}:\\d{1,2}:\\d{1,2</a>} [a-zA-Z]{1,}&nbsp; <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Sat Sep 23 15:29:45 CD&nbsp; 2006<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replaceAll(&quot;[a-zA-Z]{1,}&nbsp; &quot;, &quot; &quot;));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE MMM dd hh:mm:ss yyyy&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Wed Sep 14 13:14:23 U C 2005<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strb = new StringBuffer(time.replace(&quot; [a-zA-Z]{1} [a-zA-Z]{1} &quot;, &quot; &quot;));<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(strb.toString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;EEE MMM dd hh:mm:ss 'U C' yyyy&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(time!=null &amp;&amp; time.matches(&quot;[a-zA-Z]{1,} <a href="http://www.xd-tech.com/blog/file://\\d{1,2">\\d{1,2</a>}, <a href="http://www.xd-tech.com/blog/file://\\d{4">\\d{4</a>}, <a href="http://www.xd-tech.com/blog/file://\\d{1,2}:\\d{1,2}[a-zA-Z]{2">\\d{1,2}:\\d{1,2}[a-zA-Z]{2</a>}&quot;))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//September 20, 2006, 11:56AM<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = new SimpleDateFormat(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;MMM dd, yyyy, hh:mma&quot;, Locale.US);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs