APP下载

基于Lucene.net的农作物生产技术服务平台全文搜索引擎的设计与实现

2016-01-05黄菊姜大庆

电脑知识与技术 2015年29期

黄菊++姜大庆

摘要:该文针对农作物生产技术特定领域对资源检索功能的需求,对基于Lucene.Net 的全文检索关键技术进行了研究,运用盘古分词等中文分词开源工具包,集成到Lucene.Net 平台上,在此基础之上对其分词、索引建立、检索结果排序进行了改进和优化。提出了基于Lucene.net的农作物生产技术服务平台全文搜索的流程,并给出了搜索引擎的实现过程。

关键词:农作物生产技术服务平台;Lucene.net;中文分词

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2015)29-0177-02

传统的农作物栽培过程中,农民种植大多凭借个人的主观经验,或靠农技人员的手口相授,农户之间的口口相传,没有形成完整的生产技术知识体系,严重影响了农作物的产量。针对这一现状,提出建设农作物生产技术服务平台。平台主要提供各种涉农信息及农业生产新技术的普及,方便农户查询、学习先进生产技术、病虫害防治技术,并应用于生产实践。在功能上,除了实现业务功能之外,还需为农户提供高效的对生产技术、病虫草害防治技术的查询检索功能。

基于上述需求,传统的解决方案是通过全文检索来提供对信息的查询功能。但传统的全文检索是以文档的全部文本信息作为检索对象的一种信息检索技术。不考虑文档的具体内容而仅仅判断是否包含被检索关键词,灵活性不强。本文针对上述需求及传统解决方案的不足,基于Lucene.Net设计和实现了农作物生产技术服务平台全文搜索引擎。

1 农作物生产技术全文搜索引擎的框架设计

我们在数据访问层开发满足上述需求的搜索引擎,通过对Lucene.Net 的操作接口和数据访问接口的封装,为农户对生产技术、病虫草害防治技术的检索提供查询接口。

1.1 农作物生产技术知识获取与知识库的建立

平台数据的表现形式主要分为描述性文本数据和图谱数据及视频数据三类。以现有农作物科技信息作为平台系统的知识基础,选取领域农业专家正式出版的教材、图谱和视频等信息资源,围绕农作物生长的各个阶段进行划分,总结、提炼形成描述性文本数据的知识库。将图谱和视频资源构成多媒体数据库。在搜索引擎中,对于图谱和视频资源可以将图片和视频中的文字提取出来,然后按文字来索引图谱和视频。

1.2 基于关键词的索引的建立

为便于搜索,在知识库的组织形式上,将平台中所有的数据资源分类编号形成索引。索引算法的好坏直接影响平台的响应速度和农户查询结果的质量。本平台采用的是以关键词为单位进行索引的建立,有效提高查全率和查准率。Lucene.net采用倒排索引,记录关键词的所属文档和在文档中的位置及频率。创建关键词索引时,按关键词顺序从小到大写入字倒排文件中,然后按词顺序将相应的索引信息顺序写入索引倒排文件中。

关键词的提取主要从以下几个方面判断:利用TF[1]*IDF[2],统计词频和词在所有文档中出现的总次数;标题中出现的词比内容中的词更重要;利用位置信息;把出现的名词按语义聚类,提取出有概括性的词作为关键词。

1.3 中文分词算法的选择

本平台中利用Lucene.net提供的中文分词接口实现农作物技术服务平台特有的中文分词模块,实现对农作物品种名、病虫草害名、症状、使用的农药多个关键词的组合来完成非精确推理。

目前常用的中文分词算法有基于字符串匹配的分词法、基于统计的分词法、基于理解的分词法和基于语义的分词法。本平台采用的是基于字符串匹配的分词法,又叫机械分词法,按照一定的策略将待匹配串与一个特定词库进行匹配,若在词库中找到某个字符串,则匹配成功(识别)一个词。根据分词库、匹配原则和扫描顺序的不同,又可分为:最大正向匹配分词法、最大逆向匹配分词法、双向匹配分词法、全切分算法等。

本平台采用Lucene中提供的位置匹配算法“检索词首字直接匹配算法”。首先使用“折半查找”在字表中找字,再在字表中检索以该字为首字的词,采用正向减字最大匹配算法,快速查找该词,得到其在数据库中的标记号和位置值,从而在索引文件中找到该词,定位到具体记录,找到目标结果。

1.4 检索结果排序的改进

Lucene在IndexSearcher中提供了一个explain方法,返回检索结果每一条文档的详细评分内容。通过调整或者修改排序算法、增减不同文档的权值,可以达到我们期望的排序结果。

评分公式如下:

Score(q,d)=coord(q,d)*queryNorm(q)*∑(tf(t in d)* idf(t)*getBoost(t.field in d)*lengthNorm(t.field in d)

其中文档频率tf(t in d)是每个(t:term)在结果文档(d)中出现的次数,idf(t)是检索匹配文档数量的反向函数,Boost因子是索引项的权重,lengthNorm长度因子是某个索引词在域中的总长度决定的。queryNorm是调节因子,让排序结果在不同查询条件之间可以比较。Coord函数是一个协调因子,表示文档(d)中term(t)出现的百分比。

在农作物技术检索的实际应用中,可以通过实现Lucene中的SortComparatorSource接口和ScoreDocComparator接口来完成自定义排序的功能。

2 农作物生产技术全文搜索引擎的实现

本文通过扩展 Lucene.Net 的分词接口,采用基于字符串匹配的中文分词算法来实现农作物生产技术服务平台的中文分词模块。

2.1 创建索引

创建一个提供全文检索功能的索引库,使用FSDirectory类指定索引库文件存放的位置。首先,使用IndexWriter类来写索引文件,其中参数Analyzer是对文档进行词法分析和语言处理的。这里使用的是PanguAnalyzer。

其次,创建一个Document用来表示要索引的文档。

然后,将不同的Filed通过Add(Field field)添加到文档中。

最后,使用IndexWriter对象调用addDocument将索引写到索引文件中。

2.2 实现搜索

农作物技术服务平台需实现对农作物品种名、病虫草害名、症状等多个关键词的组合查询。在搜索生产技术的过程中,农户经常会使用一些当地的俗语。通过同义词搜索来实现语义扩展搜索。实现的方法是通过查询扩展方式来实现。比如当农户输入“番茄”搜索的同时,通过查找同义词库,按照“西红柿”、“番茄”、“洋柿子”等多个同义词查找。当农户输入“除草剂”的同时,也能按照“乙草胺”、“甲草胺”等进行下位词的扩展。

实现语义搜索的基本步骤如下:

1)准备农作物生产技术相关的语义词库,使用同义词词林的格式;

2)把语义词库按s(synset_id,w_num,'word',ss_type,sense_number,tag_count)转换成wn_s.pl格式,再转换成Lucene同义词索引库;

3)通过SynonymAnalyzer调用这个同义词索引库来实现同义词扩展查找。

使用IndexSearcher类实现搜索功能。其方法Search包括(查询条件Query,过滤条件Filter,检索过后存放容器Collector)。PhraseQuery用于多个关键词的拼接类,且关键词间是and(且)的关系。BooleanQuery实现关键词间的or(或)关系。

2.3 自定义搜索结果

通过实现SortComparatorSource接口来完成农作物生产技术搜索结果的自定义排序功能。我们定义搜索结果先按匹配相似度排序,再按时间排序。

Lucene.Net.Search.SortField[] sortF =

new SortField[]{ Lucene.Net.Search.SortField.FIELD_SCORE,

new Lucene.Net.Search.SortField("postdate",

Lucene.Net.Search.SortField.STRING, true) };

Lucene.Net.Search.Sort scoreSort = new

Lucene.Net.Search.Sort(sortF);

hits = searcher.Search(query, scoreSort);

3 总结

本文针对农作物生产技术服务平台全文搜索的需要,基于对Lucene.Net 的全文检索关键技术的研究,在此基础之上对其分词、索引建立、检索结果排序和检索效率进行了改进和优化。在数据访问层之上,设计实现了一个提供多种检索方式的农作物生产技术服务平台全文检索引擎的框架,为农户检索农作物技术提供了极大的便利。

注释:

[1] TF表示词频,词在文档中出现的次数

[2] IDF表示文档频率的倒数

参考文献:

[1] 李光敏. 文献搜索引擎中特征项及权重的应用[J]. 计算机系统应用, 2014,23(5):188-191.

[2 ] 吴青,夏红霞, 赵广辉,刘春燕. 基于 Lucene 全文检索引擎的应用与改进.武汉理工大学学报, 2008, 30(7):145-148.

[3] 何国斌, 赵晶璐. 基于最大匹配的中文分词概率算法研究[J]. 计算机工程, 2010, 36(5):173-175.

[4] 宋佳, 诸云强, 刘润达. 一种基于Lucene改进的全文检索工具包[J]. 计算机工程与应用, 2008, 44(4): 172-175.