首页 > 范文大全 > 正文

基于NCFTP和Lucene的FTP搜索引擎的设计及实现

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于NCFTP和Lucene的FTP搜索引擎的设计及实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要:针对数量庞大的教育网FTP资源检索困难的问题,提出一种基于开源软件ncftplucene实现对教育网ftp服务器进行索引并提供检索服务的FTP搜索引擎设计实现的方法。用开源软件NCFTP从FTP服务器上抓取FTP站点信息,并把抓取的信息转化为Lucene数据接口规定的文档(Document)类型,作为Lucene的数据源,并且采用基于字典的正向最大匹配中文分词法进行索引的建立及信息的检索。该方法已对郑州大学六个FTP站点建立索引,并向全校师生提供FTP检索服务,取得了良好的效果。

关键词:FTP搜索引擎;NCFTP;Lucene;有限状态自动机

The Design and Implement of Ftp Search Engine Base on NCFTP and Lucene

ZHAO Ke ,LU Peng, LI Bing-yi

(School of Electrical Engineering , Zhengzhou University,Henan Zhengzhou 450000)

Key words: FTP Search Engine;NCFTP; Lucene;Finite State Automata

教育网有着丰富庞大的FTP资源,但是却没有提供相应的检索服务,而Windows操作系统自身的基于匹配模式的检索效率非常低下,本文针对该问题,提出了一种基于开源软件NCFTP和Lucene实现对FTP服务器进行索引并提供检索服务的FTP搜索引擎的设计和实现方法,该方法用配置好的有限状态自动机,自动将NCFTP抓取的信息转化为Lucene可识别的文档(Document)类型,作为Lucene的数据源,并且在索引和检索过程中采用基于词典的正向最大匹配中文分词法,保证了检索的准确性。该FTP搜索引擎采用的组件大多为开源免费组件,既节约了成本,提高了开发效率,又便于今后的维护和扩展,保证系统的稳定性。该方法已对郑州大学六个FTP站点建立索引,并向全校师生提供FTP检索服务,取得了良好的效果。

1 FTP搜索引擎结构

FTP搜索引擎主要由数据采集、数据分析和索引维护及数据查询等模块组成。如图1所示,该引擎首先用NCFTP从FTP服务器抓取服务器、文件及目录等各种信息保存到本地,经过处理转化后提供给Lucene分析建立索引,并将索引文件保存到本地。当客户端发送搜索请求时,经过WEB服务器对输入关键词处理后将搜索请求输入到Lucene进行查询,并将查询结果以友好的界面返回给客户端,完成搜索。

2 FTP站点信息的采集及处理

2.1用NCFTP进行信息采集

NCFTP是一个开源的实现FTP的协议的软件,他可以在命令行下进行各种操作,因此广泛应用于UNIX、WINDOWS等各种操作系统。

信息采集对于FTP搜索引擎是一个至关重要的环节,采集的信息的要完整、准确、清晰。因为NCFTP可以在命令行下进行操作,因此它可以很方便地被各种编程语言调用。当FTP搜索引擎接收到抓取请求时,将需要抓取的FTP站点信息输入到NCFTP中进行抓取,并将抓取信息保存成TXT格式储存到本地。例如要抓ftp://tv.zzu.省略/站点的所有信息,可以使用如下命令:

ncftpls.exe -R ftp://tv.zzu.省略/ > e:\list.txt

该命令把ftp://tv.zzu.省略/站点的整个目录和文件的树形结构抓取下来保存到E盘list.txt文件中。其中命令行参数-R的意义为抓取整个站点的目录和文件的树形结构。

2.2抓取信息的格式

抓取的站点信息格式如下:

.\办公软件:

10-29-0806:34PM<DIR> WPS

.\办公软件\WPS:

08-24-0801:19PM<DIR>软件信息

10-17-0806:56PM29420592 wps2007.exe

11-12-0212:00AM975 使用必读.txt

其中分为两种记录,一种以“.”开头,说明此条记录为下面文件或目录的父目录;另一种以数字开头,说明该条记录为文件或者目录,该记录分为三段,第一段为最后修改时间,第二段为标记字段,若该标记为<DIR>,表示该条记录为目录;否则该标记为文件的大小,以bit为单位,第三个字段为文件或目录名称,若是文件,则包含了文件的类型

2.3用有限状态自动机处理抓取信息

对于抓取信息的处理可以将所有记录一次性读取到缓存字符串中,然后逐条取出进行处理,这样避免了频繁的IO操作,从而提高了处理效率,又减小了在IO过程中出现异常的概率。

对于记录的处理,可以采用有限状态自动机和正则表达式进行字符串的处理及有效信息的提取,这样可以将有效信息封装到FTP搜索引擎指定的类中,该类可以很方便地作为LUCENE的数据源。

就本项目而言,项目定义了一个File类,用于封装提取出来的有效信息。该类包含有name、type、parentURL、URL、mdate、size等字段,用于存储文件或目录的名称、类型、父URL、本身的URL、最后修改时间以及大小等信息。对于NCFTP抓取的信息,可以采用具有两种状态的有限状态自动机,即初始状态和读取状态。当读取的记录字符串以“.”开头,则将自动机置为初始状态,并将该条记录设置为下面文件或者目录的父目录;否则,将自动机置为读取状态,并用正则表达式对记录字符串进行匹配,若匹配成功,则创建一个File类型的对象,并把提取的有效信息存储到该File类型的对象中去;若匹配不成功,则重新将自动机置于初始状态读取下一条记录。最后,即可把提取出来的所有File对象作为Lucene的数据源,然后将这个对象转化为Lucene可识别的文档(Document)类型输入Lucene进行进一步处理。

2.4增量式的信息抓取

本项目中,信息采集采用增量式的采集模式,利用map.txt记录FTP站点与保存FTP站点信息的信息文件的对应关系,当接收到采集请求时,首先在map.txt中检查该站点是否有相对应的信息文件,若没有,则说明先前未对该站点采集过信息,然后将建立一个新的信息文件,并保存该从该站点抓取的信息;若有,则说明先前已经对该站点采集过信息,然后系统只将该站点的信息文件进行更新,而其它站点的信息文件仍不会丢失。这样保证了信息不会在抓取过程中丢失,有利于FTP搜索引擎规模的扩大。

3 基于Lucne的索引建立及处理

3.1Lucene的信息采集

Lucene不是一个完整的全文索引应用,而是一个用Java写的完全开放源码的全文索引引擎工具包,它提供了灵活多样的API,可以方便的嵌入到各种应用,实现针对应用的全文索引和检索功能。

Document含义为文档,它代表一种逻辑文件,Lucene无法直接都物理文件建立索引,而只能识别并处理Document类型的对象,Document将作为数据源的集合,向Lucene提供要索引的内容。

Field含义为字段,一个文档(Document)可以包含多个字段(Field),字段(Field)是用来识别当前数据源的各种属性,存储来自数据源的各种信息。

该FTP搜索引擎中,已经将NCFTP抓取下来的信息进行提取存储到File类型的对象中,File类型可以很方便将信息转存到Document中的Field中。如图2所示:

转化完成后,即可调用Lucene的索引器IndexWriter对这些Document组成的集合建立索引。

3.2倒排索引的建立

倒排索引是一种面向单词的索引机制,通常它由词(关键字)和出现情况两部分组成,对于索引中的每个词(关键字),都跟随一个列表(位置表)和出现频率。

例如,假设两篇文档:

A:Its color is red.

B:Red is a kind of color.

从表格中可以很直观的看出来在倒排索引中,关键字的数量并非随着文本内容的增长也线性增长,这样有利于降低索引文件的占用空间,提高检索效率。

3.3中文分词的实现

JE分词组件是一种基于词典的正向最大匹配算法的免费组件,它全面兼容Lucene,提供的简单实用的API,可以方便的被Lucene调用。

例如,对于句子"据路透社报道,印度尼西亚社会事务部一官员星期二(29日)表示,日惹市附近当地时间27日晨5时53分发生的里氏6.2级地震已经造成至少5427人死亡,20000余人受伤,近20万人无家可归",分词效果如下:

据 | 路透社 | 报道 | 印度尼西亚 | 社会 | 事务 | 部 | 官员 | 星期二 | 29日 | 表示 | 日惹 | 市 |附近 | 当地时间 | 27日 | 晨 | 5时 | 53分 | 发生 | 里氏 | 6.2级 | 地震 | 已经 | 造成 | 至少 |5427人 | 死亡 | 20000 | 余人 | 受伤 | 近 | 20万人 | 无家可归 |

中文分词的正向最大匹配中文分词法原理如下:对于一个字符串S,按从前到后的顺序扫描,对扫描的每一个字,从词库中寻找最长的匹配。例如S=“印度尼西亚社会事务部”,词库中有“印度尼西亚”,“印度”,“社会”,“事务”等词。当扫描到“印”字,那么从“印”字开始,向后分别取1、2、5个字(“印”,“印度”,“印度尼西亚”),词库中最长的匹配为“印度尼西亚”,所以分词取最长的匹配,就从“亚”字后面分开,扫描器下一次扫描“社”字。

此外,JE分词具有学习功能,可以将新词加入到词典当中,这个功能对于FTP搜索引擎分词功能的扩展具有非常重要的作用。

4 搜索功能的设计及实现

FTP搜索引擎接受到来自客户端搜索请求时,将客户端输入的查询关键字进行处理,如去除多余空格,识别特殊符号等,然后将处理过的关键字输入到Lucene的查询分析器QueryParse r中,该查询分析器将调用由JE分词组成的分析类实现分词,分析后将生成Lucene内部的查询条件类Query,然后将Query传递给IndexSearcher类进行搜索,最后将搜索结果以Hits类型返回。Hits类型为一链式存储结构的容器。

5 结束语

本文中介绍的原理已经应用于郑州大学首个FTP搜索引擎的建设,把郑州大学所有FTP服务器建立了索引并向全校师生提供FTP搜索服务。该FTP搜索引擎基于NCFTP 和Lucene的二次开发利用,并将NCFTP和Lucene做了很好的衔接。由于NCFTP和Lucene都是开源组件,既降低了项目成本,提高了开发效率,又可以方便的进行扩展和完善,稍加修改即可应用于各种提供索引和检索的系统中去,具有很高的应用价值。不过该系统在某些方面仍有些不足,如分布式的信息采集,索引的删除与修改等方面,可以在数据规模,用户体验方面继续完善。

参考文献:

[1]邱哲,符滔滔.开发自己的搜索引擎[M].北京:人民邮电出版社.2007.

[2]李刚,宋伟,邱哲.Ajax+Lucene构建搜索引擎[M].北京:人民邮电出版社.2006.

[3]Bruce Eckel. Thinking in Java[M]. Prentice hall,2003.

[4]郭一平,向晖,王亮.基于Lucene的Ftp搜索引擎的设计[J].图书情报工作,2006,50(4):122-125.

[5]Chuck Cavaness. Programming Jakarta Struts[M]. Oreilly & Associates Inc.2004.

[6]Thomas H.Cormen , Charles E.Leiserson , Ronald L.Rive st,Clifford Stein .Introduction to Algorithms[M]. The MIT Press. 2007.

(本文系郑州大学大学生创新性实验资助项目,项目编号:2008CXSY086)