论文部分内容阅读
随着数字信息时代的到来,搜索引擎的索引数据变得越来越大,其开发与维护的成本亦越来越高。开源的全文搜索引擎工具包Lucene作为一个优秀的全文检索核心框架,得到了越来越广泛的应用。但是,Lucene对中文信息处理能力的不足严重制约了它在中文搜索引擎项目中的有效应用。鉴于此,本文设计并实现了一个基于Lucene的具有添加同义词功能中文分词器MySameAnalyzer,用来提高Lucene对中文信息的处理能力。首先,在分析对比了现有中文分词算法的基础上,本文得出了对搜索引擎而言,目前中文分词最好的解决方案就是基于词典的机械分词法的结论,因此,本文提出并设计了一种优化的基于Trie索引树的分词词典机制—Map-Array联合Trie索引树词典机制,简称MACTIT词典机制。通过实验证明,该词典机制与传统的Trie索引树词典机制相比,其时间开销和空间开销都得到了极大的优化,从而有效地提高了分词算法的分词速度,节约了分词词典的存储空间。其次,鉴于Lucene搜索时采用的是倒排索引的索引结构,其搜索的速度优势在于“全词匹配”而非“like匹配”,因此,对于过于粗粒度的分词输出,尽管其分词结果好看,却常常会导致用户搜不到东西。针对上述问题,本文采用了特有的“正向迭代最细粒度”分词算法,对待分析的文本进行最细粒度的切分,以保证分词搜索过程中检索系统的召回率。再次,在分词过程中,歧义字段是普遍存在的,其中最常见的就是交集型歧义字段,因此,对搜索过程中常遇到的交集型歧义字段的处理,本文充分利用TreeSet数据结构的自定义排序功能,将分词过程中所产生的相交词块存放到TreeSet中,再根据六条歧义消除规则,贪心地选择其中不相交的、近似最优的一组分词结果来进行输出,该分词歧义消除方法并没有遍历TreeSet中所有可能的分词结果,以此来达到节省分词时间的目的。通过实验证明,本文所设计的分词算法和现有的实现了 Lucene接口的几款中文分词器的分词算法相比,其分词速度和分词精度的综合性能是最好的。最后,本文所设计并实现的MySameAnalyzer分词器,充分考虑了用户在实际的搜索行为中对各种产品以及名址信息搜索这一块的应用,因此,对MySameAnalyzer设计了三个子分词器,强化了中文分词中对英文、数字、英文数字混合以及中文数词量词的处理。同时,该分词器支持用户扩展词典、扩展停止词典的加载与更新,并支持用户添加自定义同义词的功能。通过实验测试表明,本文对MySameAnalyzer分词器所设计的这些扩展功能在实际的应用中均取得了良好的分词效果,为Lucene提供了灵活且可靠的中文处理支持,并有效地改善了 Lucene中文全文检索系统的查全率和查准率。