基于Lucene的教学资源垂直检索的研究与实现

2018-09-29 02:38安倩楠高东怀刘健
智能计算机与应用 2018年4期
关键词:教学资源

安倩楠 高东怀 刘健

摘 要:随着网络教学资源的与日俱增,如何在海量的教学资源中找到用户所需要的信息成为当下关注的热点。本文基于全文检索工具包Lucene,结合XML文档在教学资源中的广泛使用,设计并实现了一个面向教学资源的垂直检索系统。首先,设计系统总体架构和业务流程;然后,分析研究全文检索工具包Lucene和XML检索技术;最后,完成系统中索引模块和检索模块的实现。

关键词:教学资源; 垂直检索; Lucene; XML

Abstract: With the increasing number of teaching resources on the Internet, how to find the information needed by users in a vast amount of teaching resources has become the focus of attention. This paper is based on the full-text search tool package Lucene, combined with the extensive use of XML documents in teaching resources, designs and implements a vertical retrieval system oriented to educational resources. Firstly, it designs the overall structure and business process of the system; then, it analyzes and researches Lucene and XML retrieval technology of the full text retrieval toolkit; finally, it completes the implementation of the system indexing module and the retrieval module.

Key words: teaching resources; vertical retrieval; Lucene; XML

引言

随着信息技术的进步,网络上的教学资源数量逐年呈指数级增加,越来越多的用户通过互联网接受在线教育[1]。面对数目巨大的信息,用户需要快速准确地找到自己需要的教学资源。尽管传统的检索系统(如百度、谷歌等)信息覆盖面很广,但其检索结果的准确性较差,用户仍需要从浩瀚的结果中找出自己所需要的资源,而垂直检索系统可以提供针对某一行业或特定领域的更高质量的检索服务,提高用户的学习效率。

在上述背景下,本文结合XML文档在教学资源上的广泛使用,基于全文检索工具包Lucene,设计并且实现了一个面向教学资源的垂直检索系统,其目的是为广大学习者提供一个能够准确定位、交互性较好的信息检索服务。

1 教学资源垂直检索系统的设计

1.1 系统业务流程设计

信息检索系统的架构按照功能可以分为查询语句分析模块、搜索模块、建立索引模块和XML文档提取模块。本系统的业务流程主要分2部分。

(1)处理文档集合。首先将文档集合经过预处理和信息抽取后,转换成为Lucene可以读取的Document流,然后利用解析XML格式文档的开源工具——Dom4j提取文档部分内容,写入到相应的域中,最后选取文档中部分内容作为索引,并添加到索引庫。

(2)处理用户输入的查询。系统根据全文检索工具包Lucene内置的QueryPaser类,对用户输入的查询语句解析成为若干个关键字,在建好的索引库中找出关键字所在的位置及相应文档,并根据一定的排序算法给用户返回相应的文档[2]。

系统的体系架构如图1所示。

1.2 功能模块设计

1.2.1 文档提取模块

XML格式的文档带有特殊的结构,每一个开始标签和相对应的结束标签中间都是所对应的内容。实现自动化地读取并且提取标签之间的文本内容,是建立索引之前的一个重要工作。图2给出一篇XML文档的基本结构。

目前出现了多种对XML文档抽取信息的开源工具,其中Dom4j是一个用于读写XML文档的Java API工具。Dom4j是SourceForge旗下的一个开放源代码软件,专为Java平台设计,采用Java集合框架,如今Dom4j越来越多地被用来在Java环境下提取XML文档。所以,本系统采用开源工具包Dom4j去掉XML文档中的标签,并且将文档中的文本内容提取出来,为创建索引做好准备。

1.2.2 建立索引模块

建立索引是检索系统的核心部分[4],其具体步骤是:先对文档进行分词,去掉停用词和标点符号;然后创建一个存放索引的文件;接着,通过配置管理类和索引目录创建IndexWriter对象,IndexWriter类创建一个索引器,其是用来向索引中添加新的索引目录,同时还提供了对外实现创建索引的接口;最后,向document里面添加新建的索引文件。

1.2.3 更新索引模块

通常情况下,检索系统中的教学资源不是一成不变的,如果教学资源出现了新增、修改、删除等变化,那么在用户进行查询操作之前,就应该对索引库进行及时的更新,以保证用户能够及时获取最新的信息。

在全文检索工具包Lucene中,IndexWriter类封装了对索引的几个基本操作:增加索引和删除索引。但是Lucene本身并不支持对索引的更新,更新索引的方法是:首先删掉之前建立好的所有索引,然后利用Lucene内置的方法重新对文档集合建立索引表。由于手工更新索引费时费力,所以一般可以设置定时器,3天进行1次或者每周进行1次索引更新。一般来说,索引更新的时间应该挑选在客户端比较空闲的时候,夜晚进行索引库的更新能够降低对用户使用的影响。

2 Lucene与XML技术研究

2.1 Lucene介绍

Lucene由Dong Cuutting开发,在2001年成为Apache软件基金会的一个项目[5]。Lucene并不是一个完整的应用程序,而是由Java编写、具有高性能、可扩展性的全文检索工具包。

从组织结构来看,Lucene主要包含索引核心、对外接口、基础结构封装3个部分,其中设计者将源码分成了7个子模块,每个模块功能定义明确、复用性强、相对独立。各源码块之间的关系如图3所示。

上图中,Org.apache.lucene.index(索引)模块主要负责对初始文档进行建立索引、删除索引、更新索引等操作,其中包含IndexReader和IndexWriter 2个类,IndexReader主要对已生成的索引进行优化、删除、更新等操作,IndexWriter主要对文本创建索引。

Org.apache.lucene.search(搜索)模块主要负责将用户查询(query)在Analysis模块解析后,在生成的索引文件进行搜索,并按照一定的评分机制,对结果排序返回给用户。对索引的检索利用IndexSearch类来实现。

Org.apache.lucene.analysis(分析)模块主要负责对用户查询和建立的索引中的文本内容进行切词、去掉停用词和标点符号、过滤等一系列操作,最终都转换成基本单元Term。

Org.apache.lucene.queryPaser(查询解析)模块主要负责对用户查询请求进行语法解析,完成词项之间的逻辑计算。

Org.apache.lucene.store(数据存储)模块主要负责创建索引时底层的I/O操作。

Org.apache.lucene.document(文档)模块主要负责存储索引时的文本文件管理,把各个类型的文本经过解析器转换为Document流。

Org.apache.lucene.util(工具)模块主要提供了相关公用的工具类,如高亮显示查询项等。

2.2 XML文档提取

XML(eXtensible Markup Language)是一种可扩展标记性语言,可以用来标记电子文档并使其具有结构特点。随着互联网上信息的大幅度增加,XML技术已经在各行各业中得到深入、广泛的应用,传统的基于纯文本和HTML的检索系统已无法满足人们的信息获取需求。XML具有简单性、高可扩展性、互操作性强和开放性等优势,在某些应用领域中正在逐渐替代纯文本和HTML,成为网络上信息表示的主要形式之一。

XML文档是具备严格语法规则的结构化文档,所以对XML文档的检索就是结构化检索[6]。结构化检索相对于非结构化检索的一大难点是用户希望返回文档的其中一部分,而不是整篇文档。比如,用户在书架中查找一本书,用户可能更希望得到的信息是书名,而不是作者和出版社。返回文档的哪些部分给用户,所对应的问题是,对于文档的哪些部分建立索引。这都需要在具有嵌套关系的XML文档中提取出文档的部分内容。可见,提取包含信息的最小单位的文档内容是具有极大价值和难度。

XML解析就是从XML文档中提取出部分需要的数据。现在出现了多种对XML文档抽取信息的开源工具,Dom4j是一个用于读写XML文档的Java API工具。由于Dom4j具备性能卓越、功能强大、操作简单便捷等优点,已经越来越多地被用在Java环境下提取XML文档。

根據图2中所示的XML文档,要提取该文档中< abstract >…< abstract >标签中的内容,实现代码如下所示:

SAXReader iread = new SAXReader();------------------①

Document document = iread.read( fileList.get(i)); ------------------②

Element root = document.getRootElement();-----------------③

String abStract=root.selectSingleNode("/article/front/article-meta/abstract/p").getText();-----------------④

① 创建SAXReader对象。

② 读取一篇文档,并且转换成为Document。

③ 获取根节点元素对象。

④ 从根节点出发,按照XML结构提取出文档摘要这一单个节点的内容。

3 教学资源垂直检索系统实现

3.1 创建索引

建立索引是构建教学资源检索系统的关键环节,通过Lucene的IndexWrier索引器可以进行创建索引、删除索引等操作。创建索引的具体过程如图4所示。

[PS安倩楠4.EPS;S*2;X*2,BP#]

实现建立索引的主要功能代码如下:

Directory directory = null;

indexWrite = null;

directory = FSDirectory.open(new File("D:\\\\LuceneDemo\\\\aaa"));------------------①

indexWrite = new IndexWriter(directory, indexWriteConfig); ------------------②

Field abstract=new TextField("abStract", entry.getValue(), Store.YES,

Field.Index.NOT_ANALYZED);-----------------③

①创建存放索引的文件,存放在"D:\\\\LuceneDemo\\\\aaa"路径下

② 创建索引器

③ 针对文档摘要(abstract)建立一个域

如果索引器IndexWriter检测到directory目录中还没有建立索引时,就会自动创建一个新索引;如果directory目录中已经包含索引时,那么IndexWriter就会向已经生成的索引只增加新的内容。

3.2 检索

进行检索时,系统会先对用户输入的查询做分析处理,将整个查询语句划分为几个关键词(检索时用的分词器与建立索引时的分词器是一致的);随后在之前建立的索引文件中依次遍历,找出每一个关键词在索引文件所对应的位置和出现频率等信息;接下来在数据库中提取出与关键词匹配的文档信息;最后,根据Lucene中的匹配算法和排序算法,将相关文档返回给用户。

下面给出实现检索功能的一个例子:

Directory directory = null;

directory = FSDirectory.open(new File("D:\\\\LuceneDemo\\\\aaa"));------------------①

DirectoryReader dReader = DirectoryReader.open(directory);

QueryParser parser = new QueryParser(Version.LUCENE_43, "abstract", analyzer); ------------------②

Query query = parser.parse("biological");-----------------③

TopDocs topDocs = searcher.search(query,50); -----------------④

① 打开建立好的索引文件

② 输入要搜索的域

③ 用户输入的查询关键词

④ 查找满足条件的前50条记录

[LL]3.3 界面呈现

教学资源垂直检索系统界面主要功能是和用户交互,包括一个输入框和一個“检索”按钮。用户在输入框中输入查询关键词,并点击“检索”按钮,就可以把查询请求交给系统处理。例如,输入查询关键字“lung cancer”,点击“检索”按钮,系统将跳转到显示结果的列表页面。检索出的前3条结果列表如图5所示,从图中可以看出,每一条检索结果都包含文档标题和文档摘要2个部分,当返回的检索结果比较多时,可以进行分页处理,也可以预览文档的缩略信息。

4 结束语

本文基于全文检索工具包Lucene,结合XML文档在教学资源中的广泛应用,实现了一个面向教学资源的垂直检索系统,避免用户在海量的信息资源中逐一筛选,从而提高学习效率。同时,该系统的实现也对其它提供教学资源检索服务的各类平台具有较强的借鉴意义。

参考文献

[1] 叶浩明. 面向高等教育领域的垂直搜索引擎的设计与实现[D]. 成都:电子科技大学,2014.

[2] 张锦. 基于教育领域的垂直搜索引擎的研究与设计[D]. 兰州:兰州交通大学,2014.

[3] 刘喜平. XML文档搜索中的查询处理技术研究[D]. 南昌:江西财经大学,2010.

[4] 杨月华,杜军平,平源. 基于本体的智能信息检索系统[J]. 软件学报,2015,26(7):1675-1687.

[5] 王屾. 基于Lucene的同义词扩展检索的研究与实现[D]. 天津:天津财经大学,2011.

[6] 王磊. 基于XML的Web信息采集系统设计与实现[J]. 齐齐哈尔大学学报(自然科学版),2017,33(2):25-28.

猜你喜欢
教学资源
新能源汽车技术专业教学资源开发
高职教学翻转课堂中数字化教学资源的开发
新型教学资源在综合课程中的应用
新型教学资源在语文教学中的应用
初中数学数字化教学资源的建设与应用
对初中数学教学资源开发与利用的思考