搜索引擎实现(共11篇)
搜索引擎实现 篇1
0 引言
搜索引擎 (search engine) 是指根据一定的策略、运用特定的计算机程序搜集互联网上的信息, 在对信息进行组织和处理后, 并将处理后的信息显示给用户, 是为用户提供检索服务的系统。从上世纪90年代以来随着网络的发展及信息高速公路的建立, 各种信息以爆炸性的指数级增长, 如何在众多信息中找到个人所需成为大家的共同要求, 在这种背景之下具备各种功能的搜索引擎应运而生了。自1994年世界上首个专业搜索引擎Yahoo问世至今, 国内外相继出现了许多综合性搜索引擎和特定领域内的专业搜索引擎, 逐渐成为人们查找信息的首选工具。
在对信息进行搜索时, 由于汉字是以单个字为单位, 而英文等其他西文字符以词为单位, 使用搜索引擎检索中文信息时, 为了搜索出有效信息, 提高搜索引擎的查准率、查全率和搜索速度, 就需要涉及中文搜索引擎的分词技术、排序技术以及网络蜘蛛。
1 搜索引擎体系结构
搜索引擎工作原理如下:
(1) 从互联网上搜索网页。网络蜘蛛程序最大的作用在于其可以自动搜索互联网并且顺着网页中的所有地址链接到其它网页, 然后不断重复上述过程, 并把过程中得到的所有网页收集到服务器中;
(2) 根据搜索内容建立索引数据库。对网络蜘蛛收集的网页进行分析, 根据关键词提取相关信息, 得到每一个网页中页面内容及超链接关键词的相关度, 然后用这些相关信息建立网页索引数据库;
(3) 用户使用。当用户输入关键词并点击搜索后, 根据不同的搜索技术, 由搜索系统程序从网页索引数据库中找到能够切合这些关键词的所有相关网页;
(4) 处理搜索结果并根据相关度排序。在索引库中相关网页的关键词都有记录, 使用时只需综合相关信息和网页浏览量形成相关度数值, 然后进行排序, 相关度越高, 排名越靠前。
根据其工作原理我们可以得到它的体系构架图如图1所示:
下面从中文搜索引擎中的分词技术、排序技术和网络蜘蛛3个方面的相关技术做进一步说明。
2 分词技术
分词是将连续的字序列按照一定的规范重新组合成词序列的过程。由于英文单词之间以空格为分界符, 中文词之间没有分界符, 字与字之间容易引起歧异, 因此单词的划分要比英文麻烦很多。通过正确的分词技术, 可以将正确的语义提供给分析程序处理。
目前比较流行的分词算法大体可分为三大类:字符串匹配的分词方法、基于词义分词方法和统计的分词法。
2.1 基于字符串匹配的分词算法
字符串匹配的分词方法共有3种:正向最大匹配、反向最大匹配和最短路径分词法, 在分词的过程中, 由于词组是随机组合出来, 因此错误率较高。
2.2 基于词义的分词算法
这种其实就是一种机器语音判断的分词方法。实际操作时进行句法、语义分析, 利用句法信息和语义信息来处理歧义现象来分词, 它通常包括3个部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下, 模拟人对句子的理解过程。但在实际操作中由于汉语的复杂性, 该方法还目前处在试验阶段。
2.3 统计的分词法
根据对词组的统计, 就会发现两个相邻的字在词组中出现的频率最高, 那么这个词就可以作为用户提供字符串中的分隔符, 这样来分词通过字与字相邻共现的频率或概率反映成词的可信度。定义两个字的互现信息, 计算两个汉字X、Y的相邻共现概率。当概率值高于某一个阈值时, 就可能构成词。该方法只需对语料中的词组频度进行统计。
实际使用时由于这种方法对不是针对词的常用字组, 例如“这一”、“有的”、“我的”等, 识别精度差, 所以目前操作时一般统计分词系统将串频统计和串匹配结合起来, 使得分词块且消除歧义。
3 网络蜘蛛
这种程序实际是利用html文档之间的链接关系, 在Web上按照顺序一个网页、一个网页地爬取 (crawl) , 将这些网页抓到系统来进行分析, 然后按照关键词建立好索引, 每次搜索的结果都直接从数据库中查找, 然后把结果返回给浏览器。。
3.1 基本原理
根据搜索引擎的3个基本工作原理, 网络蜘蛛在抓取网页时, 一般会采用两种策略:广度优先和深度优先策略。
如图2所示, 如果采用广度优先策略:网络蜘蛛首先提取起始网页A中链接的所有网页, 然后再选择其中的一个链接网页, 继续搜索能通过此网页中链接的所有网页。在此过程中所有工作都是并行的, 因此可以极大地提高效率。采用广度优先策略在图例中的抓取顺序为:A-BCDEF-GKH-IJ。
同样在上图中, 如果采用的是深度优先策略:网络蜘蛛从起始页A开始, 按照顺序一个链接、一个链接顺序下去, 处理完其中一条线路之后再转入下一条线路, 重新开始上述过程继续跟踪链接。由此可见在这种策略中网络蜘蛛虽然效率降低, 但是相对于设计人员来说设计难度降低了。采用深度优先抓取策略时上图的抓取顺序为:A-D-G-I;E-K;F-H-J;C;B。
3.2 内容提取
搜索引擎建立网页索引, 处理的对象是文本文件。不同格式的文件抓取下来后, 需要提取文件中的文本信息。普通文本文档比较容易提取, 而对于多媒体、图片等文件, 一般是通过链接文本和相关的文件注释来判断这些文件的内容。
目前动态网页提取是网络蜘蛛工作难点所在, 如果要完善地处理好这些网页, 网络蜘蛛需要有自己的脚本解释程序。
4 排序技术
搜索引擎按照中文搜索结果的排序, 其中较常用的方法是PageRank的原理, 即:论文被引用的次数越多就越权威。如:
在某一网页中, A网页链接B网页, C网页也链接B网页, D网页也链接B网页, 则A网页的PageRank值就最高。其计算公式如下所示:
其中PageRank (A) 表示给定页面A的PageRank得分;
d为阻尼因子, 一般设为0.85;
PageRank (T1) 表示一个指向A页的网站其本身的PageRank得分;
C (T1) 表示该页面所拥有的导出链接数量;
PageRank (Tn) /C (Tn) 表示为每一个指向A页的页面重复相同的操作步骤。
由上述公式可以看出:如果通过用户搜索时链接指向A的网页越多, 那么A的级别越高;链接指向A的网页, 其链出的网页个数越多, A的级别越低。
还可以采用锚文本 (Anchor Text) 技术。锚文本即链接文本, 如在某一网页中采用"谷歌搜索"这个词链接www.google com, 则谷歌搜索就称为锚文本。锚文本可以收集一些搜索引擎不能索引的文件, 因此在网页中选择合适的锚文本, 会让所在网页和所指向网页的重要程度提升。
5 结束语
本文讨论了中文搜索引擎的实现原理及一些基本的实现方法。随着更多中文信息内容WEB化, 中文搜索引擎的索引量将超过20亿, 更多结构化的信息也变得可检索。在未来, 搜索引擎将会有以下几个方面的发展:更多的垂直内容将会在搜索引擎里提供;中文语言的处理技术将得到进一步的发展, 并会首先在中文搜索引擎上得到大规模的应用;搜索的个性化将得到进一步的重视和研究, 相关技术会有较大的发展。
参考文献
[1]余战秋.中文分词技术及其应用初探[J].北京:电脑知识与技术, 2004 (32) .
[2]梁循.数据挖掘算法与应用[M].北京:北京大学出版社, 2006.
[3]高济, 朱淼良, 何钦铭.人工智能基础[M].北京:高等教育出版社, 2002.
[4]中文搜索引擎比较研究[EB/OL].http://www.haiyan.com/steelk/navigator/it/gbcomp1.htm.
[5]Google——PageRank (网页级别) 技术解密[EB/OL].http://www.seochat.org/google/pagerank1.php.
[6]The Anatomy of a Large-Scale Hypertextual Web Search Engine[M].Sergey Brin and Lawrence Page.1998.
搜索引擎实现 篇2
一种铁路微机联锁进路搜索的实现方法
介绍一种微机联锁进路搜索的实现方法,对不同的信号节点进行分析、定义,给出如何避免往返搜索和防止搜索出错误迂回进路的方法,最后给出完整的.程序流程图并对每一步进行详细说明.
作 者:朱明 王晓明 ZHU Ming WANG Xiao-ming 作者单位:兰州交通大学,光电技术与智能控制教育部重点实验室,兰州,730070刊 名:铁路计算机应用 ISTIC英文刊名:RAILWAY COMPUTER APPLICATION年,卷(期):200716(11)分类号:U264关键词:计算机联锁 进路搜索 铁路信号 分析
搜索引擎实现 篇3
关键词:二分图;邻接矩阵;聚类;数据挖掘;搜索引擎
中图分类号:TP311.1 文献标识码:A
1 引言(Introduction)
众所周知,关键词数量越多,单个词越能清晰表达查询需求,搜索引擎就越能准确计算网页相关度,用户就越能准确得到所希望的查询结果。然而绝大多数用户在使用搜索引擎时,输入的关键词都少于三个,且很多情况下,关键词不能正确表达用户的查询需求,使得查询结果不尽如人意。本文采用概念聚类的方法,设计个性化搜索引擎,针对Web数据挖掘,能很大程度地提高搜索的准确率。
聚类就是将一个对象的集合通过某种算法分成几个类,分类后不同的类中的对象是不相似的,同一个类中的对象是相似的[1]。查询聚类是为了将相似需求的查询表达式聚为一类,从中选取关键词个数较多的作为这一类需求的表达,这样对查询表达式进行扩充,从而提高搜索的准确率[2]。
2 二分图及其存储(Bipartite graph and its storage)
设计中,联合考虑关键词和对应文本,即根据关键词所形成的词簇信息对文本进行聚类,聚类过程的数据结构定义如下:
定义1:设G=
对G采用实现存储,设eij为边[i,j]的权值,则记
(1)
为G的邻接矩阵。
3 聚类算法(Clustering algorithm)
使用中的很多搜索引擎在计算查询关键词与网页的相关度时,是根据网页内包含关键词的个数来定的,由于用户输入的关键词比较短,且一般不超过三个,加上有的关键词有歧义,而且由于网页内容的多样性,导致查询到的网页与用户的需求存在较大的差距。除了可以采用锚文本来对网页内容进行补充和描述的方法来提高查询准确率外,另一种有效的方法就是利用用户的点击率作为网页内容的补充了。从搜索引擎的日志中获取的用户点击数据可以在一定程度上反应关键词与页面之间联系,可以作为相关度计算的加权参数。
基于二分图的聚类算法有两种:基于超链接的聚类算法和基于概念的聚类算法。基于超链接的算法中,每当用户点击一个链接,就认为该链接和关键词是相关的,认为只要两个不同的关键词有相同的链接就将两个关键词聚类在一起,这样,由于关键词的语义多样性,很可能将语义不同的关键词进行聚类,加上Internet上很少有相同的链接,两个随机关键词被用户选择相同链接的概率仅为6.38*10-5,所以基于超链接的算法存在很大的缺陷[3]。
选择采用基于概念的聚类算法,对于设计一个高准确率的Web数据挖掘的个性化的搜索引擎系统,能达到更好的效果。构造概念聚类的二分图模型如下:
把所有的查询构造成顶点向量集合Q,关键词涉及的概念构造成顶点向量集合C,关键词与概念之间的关系构造成边集,即可得到概念聚类的二分图模型如图1所示。
例如当关键词为apple ipad、apple、apple iphone时,涉及的概念则包括ipad、fruit、iphone、product,构造的概念二分图如图2所示。
conceptual clustering
根据二分图,如果关键词涉及的概念相互重叠得越多,则关键词的相似度越高。设N(x)是节点x的邻节点的集合,N(y)是节点y的邻节点的集合,关键词的相似度按如下公式计算:
(2)
由式(2)可以看出,两个关键词涉及的概念集的交集越大,则查询的相似度越高。下面是构造二分图算法的伪代码:
4 系统模块设计(The system module design)
本系统的设计目的,是设计和实现一个为用户提供使用搜索引擎的平台,为用户提供搜索界面,并将用户输入的关键词提交给搜索引擎,再将搜索引擎的搜索结果反馈给用户。整个交互过程的数据比如查询关键词、搜索结果、用户点击的链接等数据都由该中间件收集起来并存储,为下一步的用户建模、查询聚类做准备[4]。
系统由四个主要模块组成:数据收集模块、数据库及管理模块、用户兴趣模块和查询聚类模块。系统流程分五步:数据收集、概念提取、用户建模、查询概念聚类、查询优化。系统各个模块的划分和模块之间数据传递方向如图3所示。
5 结论(Conclusion)
模拟五个用户,分别按表1输入查询关键词。其中第一二用户输入的关键词相同,但第一用户的兴趣点是apple数码产品,而第二用户的兴趣点是apple水果。
实验聚类结果如表2。结果表明,第一二用户虽然查询关键词相同,但由于兴趣点不同而被分到不同的类型中。类型0中的查询结果都与数码产品相关,而类型1中的结果都与水果相关,说明聚类结果能较好地按概念区分关键词。
实验表明,当聚类参数为0时,概念聚类的二分图中,低相关度的关键词被聚到一类,导致查准率比链接聚类查准率低;而当聚类参数较大时,概念聚类的查准率明显高于链接聚类的查准率,平衡保持在较高的范围内。
参考文献(References)
[1] 吴湖,等.两阶段联合聚类协同过滤算法[J].软件学报,2010,
21(5):1042-1054.
[2] 马恩穹.基于Web数据挖掘的个性化搜索引擎研究[D].南京
理工大学,2012.
[3] Guandong Xu,Yanchun Zhang,LinLi.Web Content Mining[J].
Web Information Systems Engineering and Internet
Teehnologies,2011,6(2):65-69.
[4] 王和勇,等.基于聚类和改进距离的LLE方法在数据降维中的
应用[J].计算机研究与发展,2006,43(8):1485-1490.
作者简介:
刘典型(1973-),男,硕士,副教授.研究领域:软件,网络
技术.
刘完芳(1972-),男,硕士,副教授.研究领域:数据库.
钟 钢(1975-),男,本科,高级实验师.研究领域:软件
FTP文件搜索引擎的实现(一) 篇4
1 问题简介
以单位内部文件共享为例子, 假设有若干个FTP服务器分布在单位内部, 通常情况下, 一般用户要实现从FTP上找到并下载文件, 至少需要记住FTP服务器的地址, 使用客户端登录到FTP, 找到文件所在路径和文件位置, 下载文件, 这虽然并不算复杂, 但如果FTP规模较大, 要方便找到自己需要的文件仍然不是一件容易的事情, 另外, 如果FTP数量众多, 那就更雪上加霜。使用比较高级的FTP客户端例如Flash FXP等商业软件可以使用其文件搜索功能, 相比IE等, 这已是一个飞跃, 但这同时又对使用者的计算机水平提出了更高要求。因此, 笔者认为构造一个Web上的FTP搜索引擎是一个比较好的方案。
2 总体架构
方案大体由两部分构成:服务器端的信息采集工具及基于ASP.NET的Web APP。其中服务器端信息采集工具用于将FTP上的文件信息转换到数据库中 (笔者使用SQL Server作为数据库引擎) , 而Web APP则提供用户通过浏览器访问FTP搜索引擎的界面。这里需要指出, 笔者在这里假设了用户对搜索结果的实时要求并不特别高, 因为从方案中可以看出, 服务器端采集工具得到的结果显然与用户通过浏览器搜索时FTP上的实时结果并不完全同步, 通过设置信息采集工具的运行频率可以使同步程度有所提高, 一般来说, 用户更关注的是搜索的快速和文件获取的便捷, 可以接受一定程度的同步延迟。
3 数据库
不管是服务器端的信息采集工具还是Web APP都要用到数据库, 下面详细介绍本实现方案中的数据库设计。考虑到后续编程的便捷性及本应用的规模等因素, 事实上该数据库相对较简单, 其中只有两张表File Info表及Setting表, 其中File Info表记录了每一个FTP文件的相关信息, 注意, 可能有多个FTP站点, 所有站点下的所有文件信息都记录在File Info表中, 其具体字段定义如表1所示。
这里须注意filepath字段记录了包括文件名和FTP站点信息在内的文件完整路径, 虽然这有些冗余, 但考虑应用程序的规模和编程的便捷性, 这是可以接受的, 由于这个字段可能很长, 因此使用了nvarchar (max) 来定义, max是SQL Server可接受的最长字符串长度。
Setting表记录了当前数据库的状态, 具体字段定义如表2所示。
请注意, Setting表事实上只有一条记录, 也可以利用磁盘文件来保存这些数据库状态信息, 将其作为数据库的一个表只是考虑到Web APP访问File Info表时可一并读取此表, 省去了Web APP去读取本地文件的操作。附带的源代码中Create Table.sql就是用于生成这两个表的脚本, 供读者参考。
4 服务器端信息采集工具
下面描述服务器端将FTP文件信息转换到数据库中的信息采集工具的实现。这个程序不需要界面, 笔者用C#设计了一个Cosole App, 其基本流程如下
(1) 读取FTP站点信息。
(2) 对每个FTP站点, 遍历所有目录, 对目录下的文件, 获取文件名、路径、大小、修改日期等信息后写入文本文件。
(3) 遍历所有站点并依次将ftp文件信息写入文本文件。
(4) 将所得的文本文件整体导入到数据库File Info表。
(5) 如果一切正常则更新Setting表的state字段和lastupdate字段, 如果上面任何步骤出错, 则设置Setting表state字段。
这里值得说明的是, 由于FTP站点下文件众多, 如果每找到一个文件, 就将这个文件的信息利用Insert语句插入到数据库中必然效率低下, 由于笔者采用了SQL Server数据库, 可以使用SQL中的Bulk Insert技术, 所谓Bulk Insert是利用本地文件将大量数据条目一次性地存入数据库的技术, 其基本语法如下:
Bulk Insert[数据库名.数据表]from‘本地文件名’
其中本地文件中有若干数据行, 每行对应到插入数据库的一条记录, 在一行中利用空格分隔成若干数据字段, 每个字段对应了要插入的数据表中的字段, 例如本文的例子中, 这个本地文件的某行类似下面的例子:
1地址.txtftp://abc:efg@xxx:21/公共下载/地址.txt622010-3-16 0:00:00公共下载
其分别对应了File Info表的各个字段, 利用Bulk Insert语句, 数千行的文件也只须几秒就可插入到数据库中。
另外, 信息采集定时进行, 每次采集时对于上一次采集的数据的处理, 笔者采用的方式是直接全部删除并重新导入, 这样做比起检测每条记录的有效性来说实际更为高效, 但这样做也存在一个问题, 即每次采集后数据库日志都会显著增大 (由于Delete和Insert大量记录) , 事实上数据库日志在本应用中并无太大作用, 为了防止日志不断扩大, 在每次信息导入后可以使用下面的语句来压缩日志dbcc shrinkfile[数据日志文件名]
下面列出部分源代码:
代码中有两个问题需要说明: (1) 开发机器上通常使用了SQL Server Express, 其实例一般为.SQLEXPRESS, 而部署到实际运行的机器上时通常使用SQL Server, 此时实例名就是., 因此代码中为了开发和部署的方便对此进行了特殊的处理。 (2) 代码中使用了Ftp Lib库及若干自定义的解析FTP文件信息的函数, 限于篇幅这里不详细解释, 读者有兴趣可参考笔者发表在本刊2011年10月上半月刊上的文章《如何解决FTP服务器的list指令解析中的问题》并结合附带的源代码来理解。
5 结语
搜索引擎实现 篇5
我们知道如果你在WordPress站点添加了自定义文章类型,这样在搜索结果中是看不到自定义文章类型的内容的,但要让搜索结果中看到自定义文章类型的内容也不难.
如果你的WordPress站点添加了自定义文章类型,请记得让WordPress默认搜索支持自定义文章类型,即可以搜索自定义文章类型的内容,实现的方法很简单,将下面的代码添加到主题的 functions.php 文件中即可.
让搜索支持自定义文章类型代码如下:
代码如下:function searchAll( $query ) {
if ( $query->is_search ) { $query->set( ‘post_type‘, array( ‘post‘,‘books‘, ‘product‘,‘works‘ )); }
return $query;
}
add_filter( ‘the_search_query‘, ‘searchAll‘ );
注意根据自己的实际修改第 3 行数组(array)中的文章类型别名.
搜索引擎实现 篇6
关键词:J2EE架构 工作流引擎 概述 设计实现
中图分类号:TP3文献标识码:A 文章编号:1674-098X(2012)12(c)-00-02
通常说来,工作流技术是企业进行业务管理和效益分析的过程,主要是通过建模的方式,对企业的运作情况进行仿真的优化设计,制定出最为合理的管理程序,以便实现企业的发展。其中主要包括三个方面的内容,一是定制的模块,二是具体流程的管理方式,三是工作流引擎,这三个方面是有机统一在整体中的。
基于J2EE架构的工作流引擎的概述
工作流引擎在整个工作流程的管理系统中处于核心的位置上,类似于一个动力机构,它不仅为工作流程的实施提供良好的运行环境,还为系统资源的优化配置提供必要的理论支持。工作引擎的运行内容主要有对流程图的科学解释、企业运营资源的分配和逻辑方面的控制等。工作流引擎在系统的整个运转过程中起着重要的作用,主要包括以下两个
方面:
第一点它是工作流程的状态转换机,对工作流程的状态进行实时的调整与监督,利用数据信息的驱动可以达到控制与管理的目的。在工作流程中,分布着很多的逻辑单元,且每一个单元通常都表示着一个具体流程的逻辑控制能力。在这一过程中工作流引擎的最基本的工作内容就是按照既定的规则控制好实例状态信息之间的转换。
第二点它通常是整个工作流程的路由控制器,每一个具体的流程在实际的应用中都对应着一条现实中进行顺利流转的业务程序,信息传输的过程中,实例的数据会对流程的传输路线带来一定的影响力,传输的方向会受到制约,因为在工作流程最初使用的时候,就已经规定好了流程的运转顺序,通常情况下,这些必要的规定都是在根据流程数据所制定的公式,而工作流程引擎的作用就是要对这些公式和相关的规则实施分析与设计,进而预测出工作流程下一步的运转方向。一般来说,工作流引擎的模型主要有三种形式,一是机构模型,二是信息模型,三是控制模型,这三种模型在应用的过程中有着各自的特色,要根据具体的情况来进行选择与
判断。
1 基于J2EE架构的工作流引擎的具体设计和实现
一般意义上的工作流就是对通常业务的处理,本质上就是将相关的数据信息进行分类处理,主要依据的就是上述的三种模型,在实际操作中,对数据的分析与划分也主要是三类,第一类是控制数据,第二类是相关数据,第三类是业务数据。通常情况下,控制数据一般指通过工作流管理系统进行控制的数据,有时还包括基于工作流引擎的控制数据。该种数据在实际的操作中具有不可更改的特征,控制数据也代表了在工作流程中的过程实例与节点实例的特征,并能够反映出工作项的具体状态信息,对工作流程的进行有着促进作用。业务数据与控制数据有所不同,它是专门用在工作应用系统中的,与工作流系统的关系不大,也不受工作流系统的支配,在使用中可以引用工作流流程的定义。工作流管理系统将各种数据进行必要的整理后有效传递到最终的应用环节,从功能上可以分成兩种情况,一种是系统保留的相关数据,另一种是用户自定义的相关数据。
在工作流程的管理系统中,相关数据有着非常重要的作用,一是可以确定工作流程的运作方向,二是可以设计流程中各个节点的属性,将特殊的数据进行标注,应用实例的属性也是由它来确定的,三是可以为下一步的工作流程的设计提供有力的依据,四是可以设置下一步的办理人,五是可以为下一步的转换提供有力的参考,如图所示。
在应用方面,相关数据可以为上下节点的沟通提供必要的渠道,例如可以传递文档号等,在进行定义的时候属于过程,在过程创建之后,相关的数据就被实例化了,应用则能够对相关的数据进行初始化的操作。在过程创建节点之时相关数据的副本将会被节点进行存留,待过程处理之后会传递给下一个办理步骤,这样进行着不间断的循环,其原本的功能与效用也在不断地提高。在工作流的整个组成结构中,实施动态设置流程的实例属性的方法有两种,一种是利用管理的工具对实例属性进行必要的修改,另外一种是在系统中设置相关数据对已经定义的属性进行再次的检查与修正。
工作流引擎可以为工作流管理系统提供业务流程的实例,以及相应的软件服务工具,在整个工作流的系统中处于核心的位置上,在具体的应用过程中起到的作用包括为工作流定制模型的实现进行特性的分析与运行实现期的预测,保证流程定制模块的的合理分配。另外还可以对工作流的概念做出比较合理的解释,所以这样有利于控制工作流程的实例的创建与实现,并增强流程引擎的激活和挂起行为,控制有效的终止运作。同时还可以对实例生存期的驱动流程进行必要的跟踪和监控以及督办等,并对行为的过程进行动态的督办和查询等。此外还能够确定工作项,并及时为用户反映相关的信息,维护各种数据的安全性,为工作流程的实例与节点的实例和工作项三者之间的相互转化提供有力的依据。工作流引擎同时还可以支持各种分布式的工作流引擎,优势还支持多引擎的合作工作程序,可以利用消息分发器的特点对多种引擎实施负载均匀的分配措施,还可以为整个工作流系统提供比较完善的安全保障机制,系统可以利用在运作过程中使用的数据包来进行密码的设置,从而可以为系统数据的安全性提供有力的保证。
工作流引擎的模块设计首先体现在层次上的划分,其次是逻辑功能上的划分。从层次划分角度来说,包括逻辑层和持久化层。持久化层主要的任务就是负责工作实体的持久化工作,内容有科学合理创建、存取、删除与更新对象实体的工作,这样还可以有效防止逻辑层对基本数据信息的影响。从逻辑功能角度上来说,主要的任务有过程定义、实例、日志、消息以及其他辅助功能的分析与判断,从而实现了工作流程的顺利进行,如图所示:
工作流程的服务对象的设计主要包括的内容有对过程的设计、节点的设计、工作项的设计以及其他辅助对象的设计等,对工作流引擎的逻辑分析与具体实现主要依靠的是就是对象的设计。在工作流程的设计与创建过程中,从静止的状态转变为动态的过程需要经过逻辑单元的定义以及过程节点的设计等环节,最后流程可以成为流转的形式的时候,则其流转的具体路径就在一定程度上决定着节点是否可以成为实例的状态。
2 结语
综上所述,工作流引擎的具体模块设计与对象设计的过程中不仅要遵从具体的模块的特点,还要从整个系统的角度去考虑每一环节的设计,以便达到最高效的工作效益。同时还要对工作流引擎中的经常出现的问题进行有效的处理,通常是要对异常现象进行有效的捕获,所以一般会使用Java的编写方式来进行工作流程的编写,同时还要对异常情况采用WEException来进行具体的描述。
参考文献
[1] 范延平,曾建鹰.基于J2EE架构的工作流引擎的分析与设计[J].武汉大学学报(信息科学版),2005(12)。
WEB搜索引擎分析设计与实现 篇7
从20世纪90年代互联网开始兴起, 人们在方便的获得网上信息的同时, 也越来越难搜索到对自己有价值的信息, 因此搜索引擎成为继电子邮件之后最典型的WEB应用。
因特网搜索引擎既是一门技术, 又是一项服务, 因此搜索引擎的发展应该包括搜索引擎产品技术的研发及其服务方式的改进与发展。提供经过甄别、筛选、评价和专家推荐的网站信息无疑是高质量搜索引擎永恒不懈的追求, 是搜索引擎智能化与专家系统交汇融合的结果。
2 搜索引擎概述
全文搜索引擎是名副其实的搜索引擎, 国外具代表性的有Google、Teoma、Wise Nut等, 国内著名的有百度 (Baidu) 。它们都是通过从互联网上提取的各个网站的信息, 检索与用户查询条件匹配的相关记录, 然后按一定的排列顺序将结果返回给用户。
目录索引虽然有搜索功能, 但在严格意义上算不上是真正的搜索引擎, 仅仅是按目录分类的网站链接列表而已。元搜索引擎在接受用户查询请求时, 同时在其他多个引擎上进行搜索, 并将结果返回给用户。著名的元搜索引擎有Info Space、Dogpile、Vivisimo等 (元搜索引擎列表) , 中文元搜索引擎中具代表性的有搜星搜索引擎。
3 搜索引擎的原理
现今主流的搜索引擎是上面讨论过的基于Robot的搜索引擎, 其构成一般由网络机器人程序, 网页过滤分析器, 查询器, 网页数据库, 索引数据库, 用户接口等部分组成。网络蜘蛛是通过网页的链接地址来寻找网页, 从网站某一个页面开始, 读取网页的内容, 找到在网页中的其它链接地址, 然后通过这些链接地址寻找下一个网页, 这样一直循环下去, 直到把这个网站所有的网页都抓取完为止。
在抓取网页的时候, 网络蜘蛛一般有两种策略:广度优先和深度优先。广度优先是指网络蜘蛛会先抓取起始网页中链接的所有网页, 然后再选择其中的一个链接网页, 继续抓取在此网页中链接的所有网页。深度优先是指网络蜘蛛会从起始页开始, 一个链接一个链接跟踪下去, 处理完这条线路之后再转入下一个起始页。
4 搜索引擎的分析
“So Edu”总体上将分为两个模块, 分别是“数据采集”模块和“搜索”模块, “数据采集”模块采用heritrix, “搜索”模块采用Lucene。
Heritrix是IA开放源代码的、可扩展的、基于整个Web的归档网络爬虫工程, 可加入一些可互换的组件。IA的目的是开发一个特殊的爬虫, 对网上的资源进行归档, 建立网络数字图书馆, 到目前, IA已经建立了400TB的数据。Heritrix中提供了一个标准的线程池Toe Pool, 它用于管理所有的抓取线程。Toe Pool和Toe Thread都位于org.archive.crawler.framework包中。Toe Pool的初始化, 是在Crawl Controller的initialize () 方法中完成的。以下代码是在CrawlController中用于对Toe Pool进行初始化的。toe Pool=new Toe Pool (this) ;//构造函数toePool.set Size (order.get Max Toes () ) ;//按order.xml中的配置启动线程Lucene是Apache软件基金会Jakarta项目组的一个子项目, 是一个开放源代码的全文检索引擎工具包。Lucene的目的是为软件开发人员提供一个简单易用的工具包, 以方便的在目标系统中实现全文检索的功能, 或者是以此为基础建立起完整的全文检索引擎。
5 搜索引擎的设计及实现
5.1 系统功能描述, 系统主要功能包括:
a.管理人员接口子系统;b.索引子系统;c.检索子系统;d.用户接口子系统。
5.2 系统架构:
网络蜘蛛 (爬虫) 从互联网上抓取网页, 把网页送入“网页数据集”, 反复循环直到把所有的网页抓取完成;系统从“网页数据集”中得到文本信息, 送入“文本索引”模块建立索引;索引库以页面评级的分数与词的相关度建立索引库;“用户”通过提交查询请求给“查询服务器”, 服务器在“索引数据库”中进行相关网页的查找, 同时“网页评级”把查询请求和链接信息结合起来对搜索结果进行相关度的评价, 通过“查询服务器”按照相关度进行排序, 并提取关键词的内容摘要, 组织最后的页面返回给“用户”。
5.3 实现过程
5.3.1 数据采集, 此系统将完全采用Her-
itrix开源程序, 从官方网站下载最新版本的Heritrix运行包, 解压到一个文件夹内。其中, Heritrix所用到的工具类库都存于lib下, 另外, 在Heritrix目录下有一个conf目录, 其中包含了一个很重要的文件:heritrix.properties。在heritrix.properties中配置了大量与Heritrix运行息息相关的参数, 这些参数主要是配置了Heritrix运行时的一些默认工具类。
5.3.2 索引子系统, “So Edu”利用Lucene建立索引的过程有以下3步:
提取文本;构建Document;分析并建立索引。提取文本, 建立索引的第一步是要把需要建立索引的文档数据转换成Lucene可以处理的类型-对各种资源文件提取文本信息, 以便下一步的工作;构建Document, 要对一些文本文件建立素引, 首先需要确定索引的数据源。对“So Edu”来说, 数据源是网页的URL, 网页的Title, 网页的抓取时间和网页的内容。对于每个不同的XML文件, 这些数据源将提供出不同的内容, 以便将来存储在索引中。
5.3.3 检索子系统, “So Edu”利用Lucene的Index Searcher实现检索功能, 有以下步骤:
初始化Index Searcher;构建“查询”-Query;检索结果“Hits”;结果显示。
6 结论
搜索引擎技术从诞生之日开始就一直是网络人关注的焦点, 发展也很迅速, 所以如今已出现了很多优秀的开源的项目, 例如本项目中的Heritrix和Lucene。由于时间紧迫, 有部分的实现采用了比较简单的方法, 以便于整个系统的顺利实现。
摘要:首先介绍了基于Internet的搜索引擎的系统结构以及主流搜索引擎的工作原理, 在对高性能的爬虫工具包Heritrix和可扩展的Java全文索引工具包Lucene进行系统分析的基础上, 设计了整个搜索引擎的构架, 并使用Java语言初步实现了“SoEdu”搜索引擎。
关键词:搜索引擎,Heritrix Lucene,索引
参考文献
[1]李晓明, 闫宏飞, 王继民.搜索引擎-原理技术与系统.
[2]李锐.搜索引擎发展综述.
搜索引擎实现 篇8
从2000 年开始,Web垂直搜索引擎开始赢得用户的亲睐[1⁃2]。视频、音乐、图片、软件、贴吧、地图分门别类展开搜索,专业性更强,主题相关性更高。然而Web垂直搜索引擎的应用主题并不局限,拥有非常广阔的发展空间,例如面对电子商务的商品搜索,数码产品信息搜索以及近年开始出现的微博搜索。垂直搜索的出现主要有两个方面的原因:一是通用搜索引擎索引Web的全部内容变得越来越难,而垂直搜索引擎索引数据量较小且专业,投入成本也相对较低;二是垂直搜索引擎提供的搜索质量较高,因为它可以搜索到通用搜索引擎不能搜寻到的页面,而且在可搜索页面上提供更强有力的搜索功能。垂直搜索引擎与通用搜索引擎的最大区别在于对网页信息进行结构化信息抽取,即将网页的非结构化数据提取成特定的结构化数据。构建一个垂直搜索引擎主要有两种方法:一种方法是通过爬虫爬取某种主题网页而构建专业索引;另一种方法是为用户提供专业化搜索的接口。
Web搜索引擎是种复杂、多组件信息检索系统的具体应用[3],也因其应用在拥有超大规模数据的互联网中,使构建Web搜索引擎变得比较困难。已有众多的研究者参与到Web搜索引擎的研究中,Brin和Page发表论文首次公开大规模Web搜索引擎Google的设计原型[4],提出Web搜索引擎的基本组件包括爬虫(Crawler)、索引组件、搜索组件、排序系统以及反馈组件。高效Web垂直搜索的关键之一在于爬虫能否精确爬取主题相关的Web文档,Soumen等人提出聚焦爬虫[5](Focused Crawl⁃er),利用一种能够评估网页是否与主题相关的分类器选择性地爬取与预定义主题相关的页面,实现了以目标为导向的爬取。文献[6]开发了一种潜语义索引分类器,将链接分析和文本内容结合起来,目的是抓取指定主题域的Web文档。文献[7]设计并实现了一种基于网格架构的大型Web搜索引擎,讨论实现流程和细节,对Web垂直搜索引擎的研究提供了宝贵的经验。信息检索领域的研究成果对Web搜索引擎有着较高的参照价值,特别是检索模型的研究更加重要,Web搜索引擎的排序组件好坏很大程度上决定了用户体验。信息检索模型得到了飞速发展,传统的检索模型包括布尔模型、向量空间模型、概率模型、语言模型。现代检索模型的建立大多通过排序学习方法得到,即利用机器学习技术在数据集上自动创建排序模型[8]。这些研究成果很多通过开源软件实现,这些工具不仅为开发软件提供先进的技术支持,而且大大缩短了开发周期。
本文提出了一种Web垂直搜索引擎的实现过程,以该过程为基础开发了一个查询与手机相关信息的Web垂直搜索引擎,并且对实现原理和细节进行了详细的阐述。此垂直搜索引擎可以为搜索手机相关信息的用户提供直观的、快捷的、有效的手机信息搜索服务,验证了这种实现过程的有效性和完整性。
1 Web垂直搜索引擎的实现过程
Web垂直搜索引擎与通用搜索引擎原理类似,都需要从互联网上下载网页、建立索引,响应用户查询。但是垂直搜索引擎可以返回结构化的数据,这些数据经过人工分析与整理再存入数据库中。本文将Web垂直搜索引擎的实现过程分为3 层,分别为:数据准备层、提供查询服务层、前台交互层。这3层可互相独立开发,最终整合到一起形成一套完整的Web垂直搜索引擎。图1 为一种Web垂直垂直搜索引擎实现过程。
1.1 数据准备层
数据准备层的目的是准备用于检索的数据,这些数据最终存放在关系数据库中并建立倒排索引。Web垂直搜索引擎的目的是为用户提供更专业、主题性更强的搜索服务,这种服务与大量主题相关的数据为基础,数据处理分为两个阶段,第一个阶段为采集原始数据,原始数据来自互联网某些主题性较强的、数据来源可靠的网站。原始数据大多是未经处理的无结构网页,这些原始网页无法支持搜索服务并返回给用户查看。第二阶段为数据分析与处理,将原始无结构网页中的数据转换为结构化数据,并将这些结构化数据存储在关系数据库中,这些存储在数据库中数据最终以更加直接的形式展示给用户。然而,关系数据库中模糊查询难以应对海量数据查询,所以需要建立一种面向词汇的数据结构,即倒排索引,以实现毫秒级的查询性能。
数据准备层主要包含以下5个过程:
(1)选择主题信息来源网站和网页
认真选择主题信息来源网站以确保原始数据的可靠性,通常需要遵循以下4 个原则:来源网站没有屏蔽爬虫对网页的爬取;网页内容不是Java Script动态生成的。爬虫不需要模拟浏览器解释脚本去生成网页内容,否则会严重影响爬虫效率;网站中网页URL有统一的风格。这样的URL更容易被爬虫抓取,数据更加准确;选择访问量比较大的知名网站,保证数据源可靠性。
(2)网站和网页内容分析
分析网页的目的是定向抓取网页,在确定主题信息来源网站之后,为了能够准确获取主题数据,需要对网站的URL结构进行分析,找出实际拥有主题信息的一级URL页面,该页面通常拥有该主题下全部子主题的二级URL链接,分析出这些二级URL链接作为种子链接交给爬虫。分析方法主要以人工观测为主,以程序分析为辅。通过观察一级网页URL规律,查看网页源码,再设计抽取二级URL的计算机程序,利用程序自动抽取种子链接。
(3)定向抓取网页
抓取网页的目的是把主题相关的网页下载到本地磁盘。爬虫是一种能够从互联网上自动抓取网页并下载到本地的程序,这种程序的输入是一些URL链接,这些链接也称之为种子,爬虫抓取种子网页的结果是将所有相关目标网页下载到本地磁盘中。
(4)分析并抽取网页内容到本地
将网页中无规则的数据规范地保存到本地文件中,数据保存采取统一的格式,使其能够存入数据库并建立全文索引。
(5)存入数据库并建立索引
格式化的数据不能仅存储在文本文件中,否则提取数据的开销非常大。将数据存储到数据库中,使用数据库统一管理所有数据,这样访问速度与安全性也大大增强。搜索引擎中数据准备过程中最关键的技术就是建立索引,用户查询首先访问的是索引而不是数据库,通过索引查找关键词然后返回结果文档的数据库ID,再到数据库中查找具体记录。
数据准备层的任务集中于数据采集、预处理、数据存储以及索引。这一层的活动对用户不可见,最终的产物是保存主题相关结构化数据的数据库以及这些数据上的倒排索引。
1.2 提供查询服务层
查询服务层首先将用户的查询字符串转换为可识别的对象,并进行预处理,然后发送给相应的查询方法处理,最后返回与查询字符串匹配的数据对象列表。要得到最后的数据对象列表实际经过2 次查询,第一次查询倒排索引得到所有相关文档ID,这次查询的时间复杂度是O(1),因为倒排索引的词典结构多为哈希表。第二次查询将文档ID发送至数据库引擎,根据文档ID查询文档的全部信息,并且将所有查询到的文档以对象的方式返回。
1.3 前台交互层
前台交互层的重点主要是加强用户输入和输出的体验,主要包含两个方面:一是随着用户按键自动弹出提示关键字列表;二是直接展示查询结果详细信息。列表提示功能使用Ajax异步响应,当onkeyup事件发生后,向数据库服务器发送模糊查询SQL语句,将查询结果列表返回给Java Script代码,Java Script修改dom将提示列表展示在搜索框下面。查询结果显示数据要直接,例如查询数码产品的结果中,产品图片和参数直接显示在页面上,技术上同样是利用Ajax技术减少延时来增加用户体验。
2 Web垂直搜索引擎具体实现
下面基于以上实现过程在Java平台上构建查询手机相关信息的Web垂直搜索引擎,构建过程分别按照图1 中的3 层进行实现,并对关键技术和实现原理进行总结和描述。
2.1 数据准备层实现
(1)选择主题信息来源网站和网页。根据选择主题网站的原则,最终确定选择太平洋电脑网(http://www.pconline.com.cn/)作为手机信息数据的来源网站,数据源网站可以有多个。作为一个综合性IT网站,手机频道的一级URL页面为:
http://product.pconline.com.cn/mobile/list.shtml
(2)网站和网页内容分析。通过查看一级URL页面源码,并且分析网站URL链接规律,得出手机信息数据所在的URL地址规格,如下所示:
手机信息:http://product.pconline.com.cn/mobile/品牌/编号.html。
手机图片:http://img.pconline.com.cn/images/prod⁃uct/编号
确定URL规格的目的是为了确定抓取哪些URL规格的页面。获取所有手机品牌的URL链接后将这些链接作为种子,送给爬虫抓取。
(3)定向抓取网页。爬虫的输入是待抓取URL种子链接,而爬虫抓取的结果就是将预定抓取的HTML和图片等资源下载到本地磁盘。本次开发使用开源爬虫框架Heritrix[9],它是一个开源的Java爬虫框架,它保留了各种各样的配置接口用于定制和扩展爬虫的功能,为了能够准确抓取目标资源,从官方文档中了解Heritrix本身运行机制并进行配置和定制。
(4)分析并抽取网页内容到本地抓取到的原始网页和图片不能被直接利用,需要将网页中的有用数据抽取出来并以一定的格式保存起来,这个过程可以称之为结构化数据提取。每一个有效的HTML文件都对应一个txt文件,txt文件的内容和文件名称都有固定的结构。本次开发中将文件名规范为这样的格式:“手机名⁃型号⁃时间字符串.txt”。txt文件的内容格式如下:
结构化提取包含3 个过程:一个是文件的I/O操作,此操作可以使用Java.io包实现;另一个是从HTML网页中提取数据,此操作可以使用开源解析软件实现;第三个过程是对图片进行转存处理,这个过程的目的是将手机信息和图片名称进行映射,新图片名将原图片名经过MD5 编码后得到。HTML元素之间是以分层嵌套的结构组织在一起的,HTML文档的这种结构称为HT⁃ML文档树。本次开发中使用开源HTML解析库Html⁃Parser[10],使用这个库可以方便快速地从HTML网页中提取标签节点,文本节点和和属性节点的值。同样,在开发过程中使用该解析包需要了解其API和调用机制,这些内容来源于官方文档。
(5)存入数据库并建立索引。磁盘中的数据文件是结构化数据,但是仍然不能直接作为查询的直接数据源,其原因在于磁盘I/O速度较慢。故而将这些文件的信息存入关系数据库中,数据库表的字段对应文件内容结构的字段,每一个文件的数据都对应表的一条记录。在查询数据库时按照产品的主关键字(如ID号)查询,查询效率较高。但是用户的查询是若干关键词,实际是字符串格式,如果直接将查询关键词放入SQL语句中,向数据库发送模糊查询匹配关键词,那么对于成千上万的记录来说效率非常低。所以,并不能直接对数据库进行查询关键词的模糊查询,而首先将查询发送给倒排索引进行查询。
倒排索引一种面向词汇的查找结构,通常使用哈希表存储,故查询效率非常高。倒排索引包括两个部分:一个部分是词典;另一个部分是倒排列表。建立索引的过程中,首先要使用分词程序对手机信息文本文件分词建立词典,每个词典项中包含一个指向对应倒排列表的指针,倒排列表由若干倒排项组成,倒排项存储的是包含该词汇的文档属性(文档ID,词频,单词在该文档中出现的位置)。
用户的查询首先由同样的分词程序切割为若干词汇,然后查询词典找出对应倒排列表,按照某种规则对倒排列表进行合并,然后将最后的文档列表ID发送给数据库查询整个文档信息,进而将数据库的返回结果展示给用户。 综上,用户的查询处理过程为:“ 查询索引”→“获取每个相关文档的数据库ID”→“查询数据库”→“返回给用户”。这种查询机制决定了必须先将手机信息存储在数据库,然后建立索引,构建索引和执行查询的机理如图2 所示。
本次开发中使用My SQL数据库存储数据,使用开源Java全文检索工具包Lucene建立索引[11],使用基于词库的字符串匹配分词模式,以正向最大匹配为分词算法,配合极易中文分词组件进行分词。基于词库的分词原理是使用正向最大匹配算法扫描待分词文本,将扫描出的词汇与词库中的词进行比对,按照一定的匹配粒度去判别该词汇是否被切分出来加入索引中,所以分词前必须在原有词库基础上增加主题相关的词汇作为词库的一部分,开发中首先解析所有txt文件名,将所有手机名称和不同的型号解析出来作为词汇单独存储在一个文本文件中,通过简单的配置即可将文件的词汇加入到极易分词的词库中,选用极易分词组件的另一个原因是它实现了Lucene标准分词解析器的接口,从而可以直接整合进Lucene[12]。对于查询字符串必须使用同样的分词程序去分词,以同样的规则切分出待查询词汇,在索引的词典中查询是否存在该词汇,如果存在则返回该词汇对应的倒排列表,否则返回空,对于多词汇查找的处理是根据逻辑运算对倒排列表进行合并后再返回。倒排列表中的文档排序模型是经典的向量空间模型,该模型以文档的TF*IDF值为向量的特征,实际参数可以在Lucene中按需设置。
2.2 提供查询服务层实现
提供查询服务作为一个中间层,在整个搜索引擎中起着非常重要的连接作用,它接收用户的查询字符串并预处理,然后在索引和数据库中查询相关文档并返回给用户。
通过图2 可知搜索模块和分词模块一起提供查询服务,实验中分词模块与建立索引所用分词的模块有相同的配置,而搜索模块承担查询索引和数据库的任务,由Lucene提供的搜索模块实现,开发中这2 个任务分别由2 个方法实现,它们是查询服务类中的2 个方法,查询索引方法的参数是查询关键词对象,返回的是相关文档列表对象,查询数据库方法的参数是整型的文档ID,返回文档对象,如图3 所示。
2.3 前台交互层实现
前台交互是直接面向用户的应用层,为了增加用户在输入和输出上的体验,分别实现2 种功能:一是用户每次敲击按键时都会提示关键词列表;二是结果列表页面上直接展示主要结果,包括图片和其他重要属性。开发中,列表提示的数据来源于已经抽取得到的手机相关词汇,将这些词汇存入My SQL数据库的一张表里,针对该表设计一个查询方法,参数是用户按键后提交的当前字符串,实现机理是向该表发送模糊查询,返回字符串数组(一般规定提示字符串个数不超过10)。
该方法的调用是通过用户触发onkeyup事件,随即以Ajax机制向服务器发送字符串并完成调用,前端通过Ajax代码接收返回的字符串数组作为显示数据,使用Java Script改变dom的方式将这些字符串以列表的方式显示在输入框的下面。当点击搜索按钮后,开始向服务器发送查询,前台交互层与中间层的交互如图3 所示,它们的交互通过Ajax框架DWR来完成,这样有效降低延时,能够明显提高用户体验。用户查询的关键字(query)以及每页的起始索引号(startindex)封装在Re⁃quest对象中,直接通过Ajax发送给查询服务层的Search Service Impl对象的get Search Results方法,该方法返回的Search Results对象包含了相关文档ID的列表,然后将文档的ID作为参数发送给get Search Result By Id方法查询数据库,返回文档全部信息并封装在Search Result对象中,最后将Search Result对象返回到前台展示给用户。
3 结论
实验中多次查询的平均时间在毫秒级,完成了整个Web垂直搜索引擎的设计目标。验证了这种实现过程的完整性和有效性。提出的三层架构面向的是构建主题相关的Web垂直搜索引擎,通过实现查询手机信息的Web垂直搜索引擎来提供一种可操作的实施方案,为成功构建其他面向其他主题的Web垂直搜索引擎提供理论依据和技术参照。整个实现过程利用了Java平台下的优秀开源软件包,包含了可定制爬虫Heritrix、网页解析库HTMLParser、索引及查询工具包Lucene、Ajax框架DWR、Bean容器Spring以及My SQL数据库,这些开源软件为搜索引擎的实现提供了强大的支持,对于这些软件的具体使用方法和过程本文没有详细赘述,而重点讨论了构建搜索引擎的实现过程、技术要点和方法。
由于垂直搜索引擎索引数据本身就是面向主题的,所以检索结果的主题相关度、正确率必然比通用搜索引擎高,而且展示数据的能力更强。纵观现有的研究成果,作者认为未来Web垂直搜索引擎主要的研究方向有以下几个方面:
(1)结构化数据提取自动化。爬虫应该能够自动发现、发掘Web上主题相关的来源网站,并能够自动对网站内容评级,能够实时监控Web主题网站的页面变化并更新本地的页面,通过自动化的爬虫的监控、爬取、抽取与更新操作增强搜索引擎的灵活性。
(2)用户个性化。个性化搜索引擎尽管理论上已经得到发展,但是从理论到实际应用还需要继续研究,搜索引擎应该能够自动识别用户种类、意图,对用户的需求进行精确预测,并对歧义进行自动矫正,重点在推荐系统、相关反馈方面进行完善。
(3)数据可靠性。由于垂直搜索引擎的返回结果大多是领域相关的内容,返回给用户的结果应该对用户负责,在医疗、问答、新闻、学术等领域的返回结果应保证数据来源的准确性,对排名靠前的结果应特别进行自动的审核,保证信息的可靠性。
本文通讯作者为田玉玲。
参考文献
[1]刘天娇,周瑛.浅析近年来网络搜索引擎研究现状:以2001至2010年为例[J].情报科学,2012(8):1192-1195.
[2]王文钧,李巍.垂直搜索引擎的现状与发展探究[J].情报科学,2010(3):477-480.
[3]王斌.从信息检索到搜索引擎[J].产品安全与召回,2009(4):38-43.
[4]BRIN S,PAGE L.The anatomy of a large-scale hypertextual Web search engine[J].Computer networks and isdn systems,1998,30:107-117.
[5]CHAKRABARTIA Soumen,VAN DEN BERGB Martin,DOMC Byron.Focused crawling:A new approach to topic-specific Web resource discovery[J].Computer networks,1999,31:1623-1640.
[6]ALMPANIDIS G,KOTROPOULOS C,PITAS I.Combining text and link analysis for focused crawling:An application for vertical search engines[J].Information systems,2007,32(6):886-908.
[7]CAMBAZOGLU Barla,KARACA Evren,KUCUKYILMAZ Tayfun,et al.Architecture of a grid-enabled Web search engine[J].Information processing&management,2007,43(3):609-623.
[8]LIU Tie-yan.Learning to rank for information retrieval[J].Foundations and trends in information retrieval,2009,3:225-331.
[9]白万民,苏希乐.Heritrix在垂直搜索引擎中的应用[J].计算机时代,2011(9):7-9.
[10]桂林斌.基于Html Parser抽取动态异构Web信息的研究与实现[J].计算机与数字工程,2009,37(7):161-164.
[11]张俊,李鲁群,周熔.基于Lucene的搜索引擎的研究与应用[J].计算机技术与发展,2013,23(6):230-232.
搜索引擎实现 篇9
关键词:jsp垂直搜索引擎,多线程
21世纪最最主要的发明是计算机的出现, 而在由计算机组成的庞大的网络中最重要的是信息。有这样一种说法:在这个世纪, 谁掌握的信息量大, 谁就能够有一番作为;由此可见信息的重要性。但信息又是什么?信息是用来消除随机不定性的东西。那又如何在互联网的庞大的信息量中如何精确的找到自己想要的信息是我们迫在眉睫的事情。传统的通用搜索引擎已经不能够满足人们日益增长的需要;使得对于特定的信息用特定的搜索引擎如春日的竹笋般快速成长。基于这样的情况, 结合compass, 开发了基于Lucene的垂直搜索引擎。
对于搜寻特定的信息的搜索引擎的讨论一直是各个研究者的主要话题之一。特定的搜索引擎的出现使得我们解决了常规搜索引擎中出现的一些问题, 提高了人们的查询质量。对于社会的进步有很大的帮助作用。
1 系统设计
1.1 系统构建与业务流程
垂直搜索引擎系统以web应用系统为基础平台。利用Lucene实现的索引库和Heritrix网络爬虫来实现信息的定位与信息的查找, 以及实现对搜索到的信息进行分析和存储;利用前台的web应用来实现信息的展现和分类, 并实现对所得信息的分析显示以及结构化显示与界面的美观化。以多态性为核心, 针对多个进程的查找的快速的、高效的实现信息的查找业务。如图1所示。
1.2 功能模块设计
(1) 信息更新模块。该模型包括了网络爬虫会自动更新索引库中商品的信息内容。
(2) 多线程抓取模块。改模块采取多个线程同时抓取网络中的资源, 使得我们能够更快的更新索引库中的信息, 并且有利于资源的管理。
(3) 使用开源的compass的搜索引擎框架模块。改框架提供了一套开源的、高性能的、可灵活配置的搜索框架, 从而为用户的应用程序提供搜索功能。
(4) 排序、过滤和分页模块。对检索的结果进行排序, 把优先度高的内容首先展现出来等。
(5) Word、excel、pdf的处理模块。网络爬虫通过对抓取的信息进行整理;使得我们的信息更加结构化。
(6) 索引库模块。主要包括是否建立索引、是否存储、是否分词;另外要注意的是在索引的建立和索引的读取是使用的分词方式一定要一致;防止采用不同的分词方式所造成的分词展现不同。
1.3 数据库设计
为了提高搜索引擎的检索效率, 将爬取到的数据格式化后存入数据库中。目前采用的数据库管理系统是My Sql5.0, 设计的实体表格主要有两个, 一个是商品的详细信息列表, 包括商品编号、商品名称、分类、价格、厂家、上市时间、品牌等31个字段。另一个是购买评价记录, 包括系统编号、商品编号、评价信息等字段。
2 基于Lucene的垂直搜索引擎的实现
采用开源lucene组件以及eclipse开发环境对垂直搜索引擎系统进行开发。
2.1 数据基础
21世纪最重要的是信息。信息是用来消除随机不定性的东西。而目前的像百度等这样的大型的通用搜索引擎虽然可以解决一些信息的查询问题;但不能够很精确的查找到特定的商品;故使得社会上对于特定的搜索引擎的需求量急剧增加。为了使得本文有一个更加良好可行的应用环境, 我们需要建立合适的索引库。首先对搜索到的信息是否建立索引、是否存储索引等问题有一个概念模型;并对索引搜索到的信息的存储在一个特定的路径下, 方便下次的查找。其次, 索引库的设计可以实现对jsp页面的查询提供一个可靠的服务。另外, 在建立索引库之前需要做好一系列的准备工作, 如寻找一两个主要的信息来源目标网站作为垂直搜索引擎的入口等。
2.2 系统运行实例
系统界面主要的功能是对特定商品的查询;通过爬取多个电子商务网站的同一类商品或同一种商品, 给用户展示出商品贪信息的对比, 尤其是对用户评价的对比, 为购买者推荐出性价比最高的商品。通过测试10000条商品信息与15000条商品购买评价记录, 基于Lucene的垂直搜索引擎可以很好地为用户推荐出性价比较高的商品。在搜索列表展示时, 主要使用开源的compass的搜索引擎框架模块、排序、过滤和分页模块, 并记录下用户的搜索行为, 分析用户的个性特征, 将用户对商品的浏览次数, 购买情况作为修改化推荐列表 (猜您喜欢) 的排序权重, 将与购买者最相关的商品排在前面, 方面购买者定位, 节约检索的时间。
3 结束语
通过使用开源的Lucene搜索引擎工具和j2ee技术开发的搜索引擎系统稳定易行;能够使人们在此搜索引擎中获得他们想要的精确的信息;可以减少他们的分析信息的时间;帮助他们在这个大数据时代中快速的利用信息。
垂直搜索引擎是基于Lucene的垂直搜索引擎的实现的具体实法, 采用了多线程抓取网页的方法抓取信息, 大大的增强了系统的处理信息的速度, 研发的基于Lucene的垂直搜索引擎可以为购买者推荐出合适的商品。
参考文献
[1]文必龙, 唐苏龙, 张浩.主题搜索引擎中特征模型技术的研究[J].计算机技术与发展, 2013.23 (4) :87-90.
搜索引擎实现 篇10
伴随着互联网的高速发展,互联网中的Web资源也在以几何级的形式增长,从事教育行业的工作人员可以在互联网上找到各种教育信息资源,互联网在给所有人带来便利的同时,一个亟待解决的问题也随之而来,即如何在这海量的信息资源中快速准确地找到自己所需要的资源。目前搜索引擎已经被广泛的采用,比如Google、百度,这些搜索引擎从互联网上收集网页信息,在服务器中建立索引数据库,并检索出与用户查询相匹配的记录,按照一定的排序规则向用户返回结果。但现在Google的数据库中存储的Web页面已经以百亿为单位,存储的信息量非常巨大,导致搜索范围覆盖的太广,会使其搜索质量下降,精度严重下降。本文提出了教育资源垂直搜索引擎,解决了综合搜索引擎数据量过大、查询不专业、重复信息多,搜索深度不够等问题,提了一种新的搜索引擎服务模式,满足教育工作者对于行业信息需求相对集中、分类更加详细的需求。
2 相关内容简介
按照领域分类,搜索引擎目前可以分为综合搜索引擎和垂直搜索引擎。综合搜索引擎的特点是搜索结果数量庞大,搜索覆盖范围广泛,涉及各行各业。垂直搜索引擎,是对某一领域的专业搜索引擎,单一收录某一行业的信息,相比综合搜索引擎的分层横向水平搜索,垂直搜索引擎是纵向的垂直搜索,是综合搜索引擎的延伸和细分。
搜索引擎的其它两个核心组件是索引子系统和搜索子系统,这两个组件分别完成搜索引擎对信息的整理和接受查询功能。本文使用了Apache软件基金会Jakarta的Lucene开源库来完成索引和检索。Lucene是用纯Java开发的,所以其具有很好的平台独立性。
中文分词(Chinese Word Segmentation)是指将一个汉字序列切分成几个独立的单独的词。举例:“北京大学生前来应聘”被分词后可以得到“北京/大学生/前来/应聘”,本文使用Lucene中已经集成了中文分词工具进行中文分词。
检索可以分为几步,首先是接收查询,然后是对查询语句进行词法分析,语法分析和语义处理,在得到一棵语法树后,在索引上进行搜索,得到符合语法树的文档,再根据得到的文档和查询关键词的相关性,对链表中的文档排序。排序的本质是对文档进行打分,分数越高的排名越靠前。不同的搜索引擎其打分机制不同,例如Google用的是Page Rank算法。
3 系统架构
本文的垂直搜索引擎通过自主设计和实现一个多线程网络爬虫并结合全文检索库Lucene来搭建一个面向教育领域的垂直搜索引擎,旨在满足教育工作者对教育资源的精准搜索需求。系统架构如图1。
系统中网络爬虫负责从互联网上抓取网页信息,获得的纯文本文档(将网页中的Html标签、Java Script代码及CSS样式表过滤掉的文本);索引子系统负责把文件夹中的纯文本进行索引,生成索引;检索模块从Jsp模块获得用户输入的关键词,并在索引中搜索,并把搜索到的文档传递给Jsp显示模块;Jsp显示模块负责搜索结果的显示和与用户的交互。
4 系统实现
4.1 索引模块
索引部分Lucene提供了5个基础的类来对文档进行索引:Document、Field、Index Writer、Analyzer、Directory。本文中的索引在建立的过程中,使用三个Field:title、path、content来分别表示一个网页的标题,在本地存储的路径和网页的内容。Path域的主要功能是能检索的时候可以从数据库中取出这path对应的url。这三个域可以保证在对索引检索的时候可以选择是检索title还是content或是两者都检索。
在本文中建立索引的过程中实现了类Index。在此类中使Lucene中的Index Writer类、Index Writer Config类、Simple FSDirectory类、Smart Chinese Analyzer类、Document类、Field类等。其中Field用来封装一个域,Document用来封装一个文档,而一个文档是由多个Field来构成的,用Document类中的add方法向Document中添加Field。Simple FSDirectory类是用来封装索引目录的,即索引会存储在这个目录中。Index Writer类是用来创建索引的,通过add方法把Document添加到索引中。Index Writer Config类的作用是对Index Writer进行配置,比如可以通过Index Writer Config来指定Index Writer是新建一个索引还是向原来的索引中添加文档。Smart Chinese Analyzer类的作用是对文档进行分词操作,把文档转变成词元流(Token Stream)。
4.2 检索模块
本文使用Lucene中的几点个基础类来来搜索文档:Index Searcher、Term、Query、Query Parser、Top Docs。Search类可以实现在索引结果中进行检索,在此类中使用Lucene中的Index Searcher类、Smart Chinese Analyzer类、Query Parser类、Simple FSDirectory类、Document类、Score Doc类、Simple HTMLFormatter类、Highlighter类等。Simple FSDirectory类类在检索中的作用是指定检索目录。Query Parser类的作用是将用户输入转化为多个Term,并根据布尔规则生成一个新的Query对象,将Query对象传递给Index Searcher类的search方法即可进行搜索。Score Doc类的作用是保存Index Searcher类的search方法返回的结果,其保存的是文档id。通过Document类可以获得文档中每个域的值。Simple HTMLFormatter类的作用是控制高亮显示关键词的方式。Highlighter类的作用是通过分词技术把文档的内容转变成词元流(Token Stream),然后对这些词元添加高亮标签。
4.3 结果展示
作为测试阶段,目前本地数据库中已经存了5000个网页。
5 总结
本文深入研究了Lucene高性能的、可扩展的信息检索工具库,并用Lucene的API实现了本文中的索引子系统和搜索子系统,实现了教育资源的垂直搜索引擎,解决了以往综合搜索引擎数据量过大、查询不专业、重复信息较多,搜索深度不够等问题,提出了一种新的搜索引擎服务模式,满足教育工作者对于行业信息需求相对集中、分类更加详细的需求,提高了教育工作者的工作效率,推进了搜索引擎在教育行业的发展。
摘要:如今互联网的信息量呈指数级增长,如何可以快速的获取信息成为了一个亟需解决的问题,搜索引擎应运而生。但是综合搜索引擎并不能提供准确且专业的搜索结果,针对教育资源的海量信息,综合搜索引擎并不适合,本文提出了面向教育资源的垂直搜索引擎,为从事教育行业的用户提供一个具有较高检索精度和较好交互性的搜索引擎,解决了教育工作者使用综合搜索引擎查找教育资源难的问题,满足教育工作者对于行业信息需求相对集中、分类更加详细的需求。
关键词:搜索引擎,垂直搜索引擎,教育资源,Lucene
参考文献
[1]W.Bruce Croft,Donald Metzler,Trevor Strohman.搜索引擎信息检索实战[M].刘挺等译.北京:机械工业出版社,2010.1-22.
用广度优先搜索算法实现路径搜索 篇11
关键词:广度优先搜索,VC语言
路径搜索是许多游戏特别是即时战略游戏的核心组成部分, 玩过即时战略游戏 (如红色警报) 的朋友们对此一定都不陌生。在这类游戏中, 玩家不需要控制游戏主角的每一步移动, 只需用鼠标点击一下目的地, 游戏主角就可以自己移动到那里。那么游戏是如何实现路径搜索的呢?实现路径搜索的算法又是什么呢?下文就以一个简单的路径搜索为例, 说明上述问题, 并给出VC++的程序实现。
1 路径搜索的实现方法
路径搜索是一个寻径问题, 所谓寻径问题, 就是在地图上的起始点A和目的点B之间寻找一条可通行的路径。显然, A和B之间可以有很多条路径, 目的就是用最短的时间找到一条最佳路径。寻找最佳路径, 其本质就是搜索, 是一个从初始节点出发, 沿着与之相连的边试探前进, 寻找目标节点的过程。
路径搜索的基本算法主要有盲目搜索和启发式搜索两种, 进行盲目搜索时, 扩展节点不估计路径代价, 是比较常用的方法, 下文采用一种盲目搜索算法——广度优先搜索算法来实现即时战略游戏中的路径搜索。
1.1 广度优先搜索算法简介
广度优先搜索算法把起点作为初始节点, 从初始节点开始, 应用算法生成第一层节点, 检查目标节点是否在这些后继节点中。若没有, 再用算法将所有第一层的节点逐一扩展, 得到第二层节点, 并逐一检查第二层节点中是否包含目标节点。如此依次扩展、检查下去, 直至发现目标节点为止。这里采用的原则是先生成的节点先扩展, 为满足这一要求, 采用“队列”这一数据结构来存储节点, 队列设置两个指针:open指针和closed指针, open指针指向扩展得到的节点, closed指向已检查过的节点。当open=closed时, 表示队列空, 当open大于队列长度时, 表示队列溢出, 如图1所示。
1.2 路径搜索的实现过程
为了具体说明广度优先搜索算法在即时战略游戏中的应用, 以一个简单的路径搜索为例, 构造一个二维地图, 如图2所示, 把地图均匀划分为若干个小方格, 在图2中共3*3个方格, 游戏主角位于一个方格中, 我们选中其他任一个方格作为目的地, 点击鼠标, 游戏主角自动选路移动到目的方格。为了更加逼近现实情况, 可以设置某些方格为障碍物, 即游戏主角必须绕过障碍才能前进。例如, 方格编号如图2所示分别为1、2、……、9, 游戏主角位于方格1中, 方格5为障碍物, 玩家要使主角移动到方格9中, 那么广度优先搜索算法把1加入队列, 此时队列包含{1}, 检查1是否目标节点, 不是目标节点则继续搜索, 从1开始搜索相邻节点, 这是第一层搜索, 得到方格2和4, 检查2和4, 不是目标节点, 则2、4进入队列, 队列包含{1, 2, 4};进行第二层搜索, 由2搜索相邻节点得到3, 也搜索到了5, 但是方格5是障碍物, 不能加入队列, 由4搜索到7, 检查3和7, 不是目标节点, 于是3、7进入队列, 队列包含{1, 2, 4, 3, 7};继续第三层搜索, 由3得到6, 由7得到8, 检查6和8, 不是目标节点, 于是6、8进入队列, 队列包含{1, 2, 4, 3, 7, 6, 8};继续第四层搜索, 由6得到9, 检查9是目标节点, 于是结束搜索。为了记住搜索的路径, 在搜索过程中, 设计数据结构记录每一个节点的前趋节点, 如2的前趋节点是1, 这样, 在找到9之后, 可以根据前趋节点回溯到节点1, 回溯过程是9、6、3、2、1。可以用“栈”这一数据结构保存回溯过程, 压栈顺序为9、6、3、2、1, 这时, 游戏主角可以按路径移动, 移动按出栈顺序进行, “栈”是后入先出的数据结构, 于是, 主角就按1-2-3-6-9的顺序完成移动。
2 程序实现
下面给出广度优先搜索的程序实现。选用VC++6.0作为程序开发平台, 建立基于对话框的工程。程序设计的关键是: (1) 编写广度优先搜索类, 用于随机生成二维地图, 并且实现路径搜索。 (2) 实现游戏主角在地图中移动。
2.1 实现广度优先搜索的类CBfs Map
下面依次介绍CBfs Map类的成员函数。
函数void Init Map () 用于初始化地图, 并随机设置障碍物。
函数void Search Path () 用于路径搜索:
2.2 实现主角在地图中移动
创建一个基于对话框的类CBfs Dlg, 在类中添加按下鼠标左键的消息响应函数On LButton Down () , 该函数根据鼠标左键点击的位置, 进行路径搜索, 代码如下:
程序运行情况如图3所示, 界面中红色栅格表示障碍, 白色部分表示通路, 当玩家点击任意空白处, 游戏主角能够自行移动到该位置。
3 结语
介绍了一种采用广度优先搜索算法实现路径搜索的方法, 并给出了原理及关键数据结构。虽然代码不多, 却实现了一个较为完整的路径搜索实例, 希望能对游戏编程爱好者们起到积极的参考作用。
参考文献