基金项目:本文系广州市教育科学“十二五”规划课题项目“关于用开源软件实现OPAC 20的研究”(项目编号:11A147)研究成果之一。
作者简介:王泽贤(1972-),男,副研究馆员,研究方向:图书馆计算机自动化、知识管理,发表论文10多篇。·业务研究·
〔摘要〕针对基于Lucene实现中文书目搜索系统的项目中,如何选择最合适的Lucene中文分析器进行了研究。通过大量实验,对Lucene自带的3个分析器及开发活跃度较高的两个第三方中文分析器,从分词效果,建立索引的时间和空间,检索的时间、检全率和平均检准率等方面进行了分析比较。综合实验分析结果,指出ik分析器总体性能最优,为最佳选择。
〔关键词〕Lucene;书目搜索;中文分词;分析器
DOI:10.3969/j.issn.1008-0821.2014.04.030
〔中图分类号〕G25071〔文献标识码〕A〔文章编号〕1008-0821(2014)04-0132-05
Comparative Study on Application of Lucene Chinese
Analyzer in Bibliographic RetrievalWang Zexian
(Library,Guangzhou University,Guangzhou 510006,China)
〔Abstract〕How to choose the most appropriate Chinese analyzer Lucene in Chinese bibliographic Retrieval system which bases on Lucene?With a lot of experiments,the author has compared three analyzers and two kinds of third party Chinese analyzers that are development of high active,which were all owned by Lucene.From the effect of Chinese segmentation,indexing time and space,and time retrieval,recall and average precision,etc.the author deemed that the IK analyzer was the best selection,due to its best overall performance.
〔Keywords〕lucene;bibliographic retrieval;chinese segmentation;analyzer
Lucene作为Apache软件基金会的一个顶级项目,是一个开放源码的全文检索工具包。Lucene以其开源可免费使用、架构清晰、扩展性高、索引结构优异、性能高、跨平台、易使用等优点,近年来越来越广泛地被应用到各类应用系统中,实现全文索引和搜索功能。基于Lucene开发书目搜索系统,实现对书目信息任意关键词进行全文检索,可提高书目搜索的查全率、查准率,并简化读者的查询操作,是一个较好的解决方案。
分词技术对于搜索引擎来说是一个非常重要的指标。中文信息和英文信息有一个明显的差别:英语单词之间用空格分隔;而在中文文本中,词与词之间没有天然的分隔符,中文词汇大多是由2个或2个以上的汉字组成的,并且词句是连续书写的[1]。因为中文文本中词和词之间不像英文一样存在边界,所以中文分词是一个专业处理中文信息的搜索引擎首先面对的问题[2]。中文语言虽然句子间有标点分隔,但词与词之间没有分隔符,需要靠程序切分出词。Lucene中通过分析器(Analyzer)进行词法过滤和分析,实现对文本分词,选择一个合适的分析器是基于Lucene实现中文搜索系统成功的关键。在CNKI中检索,目前只有2篇文献专门对Lucene的中文分析器的比较研究:文献[3]只是对6种主流中文分词器分别进行测试,简单地从分词结果、分词速度进行对比;文献[4]较为深入,对基于Lucene的中文分析器,从对语句分词、分词速度、建立索引的空间与时间、检索结果以及检索速度等方面进行比较。这2篇文献都是针对一般中文文本进行评测,并且没有从开发活跃度等方面进行研究。本文针对基于Lucene实现书目搜索系统的项目中,如何选择最合适的Lucene中文分析器实现中文书目搜索进行研究:首先,根据开发活跃度选定了参与本文研究的Lucene中文分析器;然后,使用大量的中文书目数据,通过详尽的实验对这些分析器从分词效果,建立索引的时间和空间,检索的时间、检全率和平均检准率等方面进行了分析比较;最后,综合分析、比较实验结果,选择出最佳的Lucene中文分析器。
1参与评测的Lucene中文分析器
11选取参与评测的Lucene中文分析器
Lucene保持了较高的开发活跃度,每一新版本都会带来较大的性能提升和功能增强。Lucene为了保证最高的性能与更多的功能,牺牲了部分向后兼容性,新版本的接口可能会有所改变,使得一些未能及时更新的分析器在高版本中会无法使用。目前Lucene的最新版本是44,在30、40、42等版本的分析器接口都有所改变。所以对于实现中文书目搜索,选择Lucene分析器的首要条件是可处理中文文本外,有较高的开发活跃度也是首要考虑条件之一,使其能紧密跟进Lucene版本变动,适应最新版本的接口,以便在系统中应用最新的Lucene技术。所以本文首先对Lucene中文分析器从最近更新时间、更新版本、支持Lucene版本这几个指标进行开发活跃度的比较分析,选取开发活跃度高,符合最新Lucene 44版接口的分析器参与下一步的深入评测。
目前较常见的支持中文的Lucene分析器有Standard Analyzer、CJK Analyzer、Smart Chinese Analyzer、ik[5]、mmseg4j[6]、paoding[7]。Standard Analyzer、Chinese Analyzer、CJK Analyzer、Smart Chinese Analyzer是Lucene自带分析器,与Lucene保持同步更新,所以不用参与本步测试而直接通过。开放活跃度的比较主要针对ik、mmseg4j、paoding这些第三方提供的分析器进行,通过访问这些分析器的原始网站,获取它们的开发、发布信息,比较结果如表1所示。Lucene的内部分析器Chinese Analyzer功能与Standard Analyzer差不多,并且在Lucene 31版开始已被不赞成使用,并在Lucene 50开始会移出Lucene[8];还有一种早几年较多人谈论的MM Analyzer,目前能找到的最新版本是153,在2009年开始原始网站已经找不到下载,并且声明不提供维护和支持[9]。所以Chinese Analyzer、MM Analyzer在本文不参与比较。表1分析器开发活跃度比较
分析器最后更新日期最新版本支持Lucene版本ik2012-10-292012 FF40mmseg4j2013-01-18191431paoding2010-01-203030
endprint
paoding主要在1x、2x版的Lucene应用比较多,最后提供的运行包是在2008年6月3日提供的204版,只能在Lucene的2x版运行;在2010年1月20日,针对Lucene的30版提供了SVN方式下载的源程序包,之后再无更新。ik与mmseg4j开放活跃度相对较高,其中mmseg4j最高,可以直接支持Lucene 44,而ik要另行下载修改程序,才能在Lucene 44版运行[10]。所以在第三方提供的分析器中,本文只选取ik与mmseg4j参与评测。
12参与评测的Lucene中文分析器概述
Lucene处理中文分词的常用切分方式有3种:(1)单字方式,1个中文单字为1个词;(2)二元覆盖方式,相邻的2个中文单字为1个词;(3)分词方式,按照一定算法,把中文的句子切分成有意义的词。Standard Analyzer是单字方式,CJK Analyzer是二元覆盖方式,Smart Chinese Analyzer、ik、mmseg4j都是分词方式。分词式切词算法可分为机械分词方法、基于统计的分词方法和基于理解的分词方法三大类。机械分词方法是目前较常见的分词算法,它是按照一定的策略将待分析的汉字串与词典中的词条进行匹配,若在词典中找到某个字符串,则识别出一个词。按照扫描方向的不同,机械分词方法可以分为正向匹配和逆向匹配;按照不同长度优先匹配的情况,可以分为最大匹配和最小匹配等。常用的几种机械分词方法有:(1)正向最大匹配法;(2)逆向最大匹配法;(3)最少切分,使每一句中切出的词数最小;(4)最大切分,使每一句中切出的词数最大。实验已经证明,逆向最大匹配的准确率会比正向最大匹配的准确率略高,正向最大匹配分词算法的匹配错误率是1/169,而逆向最大匹配分词算法的匹配错误率是1/245[11]。ik分析器采用正反向匹配方式,提高了匹配正确率,它提供了细粒度与智能2种分析器:以IK Analyzer()方式建立的是细粒度分析器;以IK Analyzer(true)方式建立时是智能分析器(本文下面用IK Analyzer()表示ik的细粒度分析器,IK Analyzer(true)表示ik的智能分析器)。mmseg4j根据分词算法的不同,提供了Simple Analyzer、Complex Analyzer、Max Word Analyzer 3种分析器。表2是参与本文评测的Lucene中文分析器概述。表2分析器概述
分析器分词方式说明Standard Analyzer单字方式,根据空格和符号来分割原始的文本信息,一个中文单字为一个词还可以完成数字、字母、E-mail地址、IP地址的分析,支持过滤词表CJK Analyzer二元覆盖方式,根据空格和符号来分割原始的文本信息,相邻的两个中文单字为一个词Smart Chinese Analyzer基于隐马尔科夫模型,根据汉语词汇的词频和跳转概率对整个汉语句子进行分词,是中国科学院计算技术研究所的ICTCLAS中文分词程序的java实现是原来的imdict-chinese-analyzer。带有ICTCLAS 10词库,暂不支持用户自定义词库ikIK Analyzer()细粒度分析器,以词典为基础的正反向最大切分方式分词IK Analyzer(true)智能分析器,以词典为基础的正反向最大匹配方式分词自带的默认主词典有近27万的词汇量,可以通过API以及配置文件指定词库文件实现词库扩充mmseg4jSimple Analyzer基于Tsai Chih-Hao的MMSeg算法,正向最大匹配分词Complex Analyzer是在Simple模式上加了4个过虑规则,词语的正确识别提高到了9841%Max Word Analyzer在Complex基础上实现了最大切分方式分词自带的主词典是将近15万的sogou词库,支持用户自定义词库
2分析器比较
实验环境为Windows 7操作系统,Intel T7250处理器,3G内存,Lucene版本为44。
21分词效果比较
分别对《开发自己的搜索引擎:Lucene 20+Heritrix》、《中华人民共和国专利法实施细则》这2本书的题名进行分词,比较结果见表3:
表3分词效果比较
分析器题名1分词结果题名2分词结果Standard Analyzer开/发/自/己/的/搜/索/引/擎/lucene/20/heritrix中/华/人/民/共/和/国/专/利/法/实/施/细/则CJK Analyzer开发/发自/自己/己的/的搜/搜索/索引/引擎/lucene/20/heritrix中华/华人/人民/民共/共和/和国/国专/专利/利法/法实/实施/施细/细则Smart Chinese Analyzer开发/自己/的/搜索引擎/lucen/2/0/heritrix〖〗中华人民共和国/专利法/实施/细则IK Analyzer()开发/发自/自己/搜索引擎/搜索/索引/引擎/lucene/20/heritrix中华人民共和国/中华人民/中华/华人/人民共和国/人民/共和国/共和/国/专利法/专利/法/实施细则/实施/细则IK Analyzer(true)开发/自己/搜索引擎/lucene/20/heritrix中华人民共和国/专利法/实施细则mmseg4j的Simple Analyzer开发/自己的/搜索/引擎/lucene/2/0/heritrix中华人民共和国/专利法/实施细则mmseg4j的Complex Analyzer开发/自己的/搜索/引擎/lucene/2/0/heritrix〖〗中华人民共和国/专利法/实施细则mmseg4j的Max Word Analyzer开发/自己/的/搜索/引擎/lucene/2/0/heritrix中华/华人/人民/共和/国/专利/法/实施/细则
从表3可以看出,这些分析器都会将标点符号去除,都能正确地将英语单词切分出来,也都能将数字切分出来,但相对来说Standard Analyzer、CJK Analyzer、ik分析器对数字的切分更加准确。Standard Analyzer采用单字方式,CJK Analyzer采用二元覆盖方式,而基于分词方式的Smart Chinese Analyzer、ik、mmseg4j分词效果明显较好,其中Smart Chinese Analyzer和ik分词最为准确,都能将“搜索引擎”和“中华人民共和国”准确切分出来。ik的IK Analyzer()可以切分出最多的词;mmseg4j的3种分析器中,Max Word Analyzer相对于Simple Analyzer和Complex Analyzer也可以切分出较多的词。
22建立索引比较
该实验对广州大学图书馆最新的10万条中文书目记录内容建立索引:首先,将这10万条书目记录从ILAS Ⅲ中导出,并生成一个文本文件,该文件大小为758MB,每一条书目记录按格式“书目记录号:书目文本内容”生成一行文本数据,书目文本内容是书目MARC记录的题名、责任者、出版者、主题词、简介等所有数据字段的文本内容。然后,使用各分析器,通过该文本文件逐行按书目记录号、书目文本内容建立索引。各分析器建立索引占用的时间、空间的结果见表4。表4建立索引的时间、空间比较
endprint
分析器时间(ms)空间(MB)Standard Analyzer64 847821CJK Analyzer73 189880Smart Chinese Analyzer387 615774IK Analyzer()112 541918IK Analyzer(true)106 237744mmseg4j的Simple Analyzer75 612748mmseg4j的Complex Analyzer76 140747mmseg4j的Max Word Analyzer78 734756
由实验结果可以看出,Standard Analyzer的算法最简单,耗时最小,而Smart Chinese Analyzer和ik的分词算法复杂,所以建立索引耗时较长;IK Analyzer()采用最大切分算法得到的词最多,所以占用的空间最大;mmseg4j的采用的是正向匹配,近乎是将原句在若干个位置进行切分,分词后的词语冗余少,所以在建立索引的时间和空间性能方面,综合最优。
23检索结果比较
该实验分别使用上面实验各分析器建立的索引,对书目文本内容进行检索。对IK Analyzer()建立的索引分别用IK Analyzer()、IK Analyzer(true)对检索词进行解析(IK Analyzer()表示用IK Analyzer()解析,IK Analyzer()-IK Analyzer(true)表示用IK Analyzer(true)解析),其它的,采用与建立索引对应相同的分析器对检索词进行解析;查询解析器缺省的逻辑操作为“与”(Query Parser.Operator.AND);分别用检索词“平凡的世界”和“平凡世界”进行检索《平凡的世界》一书的书目信息。实验结果见表5,表中的时间单位为毫秒(ms),检全率=检索结果中的相关记录÷系统中存在的相关记录,平均检准率按文献[12]的无干扰的平均检准率计算方法得出。
表5检索结果比较
分析器平凡的世界平凡世界检索
时间返回
记录数检全率平均
检准率检索
时间返回
记录数检全率平均
检准率Standard Analyzer81371002447741100190CJK Analyzer583101556000Smart Chinese Analyzer68241003635425100306IK Analyzer()552810030652000IK Analyzer()-IK Analyzer(true)55281003065728100306IK Analyzer(true)61211004405521100440mmseg4j的Simple Analyzer55181005175519100340mmseg4j的Complex Analyzer55191004405420100306mmseg4j的Max Word Analyzer57261003065327100254
由实验结果可以看出,Lucene的检索速度优异,Standard Analyzer需较长的检索时间,也只需81毫秒就可从10万条书目记录中检索出所需记录。当检索词与所检内容一致时,所有分析器都可以成功检索出结果,并且CJK Analyze的平均检准率最高;但当检索词较为模糊时,CJK Analyzer与IK Analyzer()都容易出现检索不到结果的情况,这主要是因为它们都有可能将检索词分解出无关词参与检索,例如检索词“平凡世界”会分解成“平凡?凡世?世界”3个词进行检索,从而检索不出结果。所以使用ik分析器时,无论是用IK Analyzer()或IK Analyzer(true)建立索引,进行检索词解析时,都应使用IK Analyzer(true)解析器,避免出现检索不出结果的情况。综合考虑,Smart Chinese Analyzer、ik和mmseg4j这些基于分词方式切词的分析器检索结果较好,都可在较短时间内完成检索,并且检全率和平均检率都较高,其中,ik分析器最优。
3结语
本文为了选择最合适的Lucene中文分析器实现中文书目搜索,选定了Lucene自带的中文分析器:Standard Analyzer、CJK Analyzer、Smart Chinese Analyzer,和开发活跃度比较高的第三方中文分析器:ik、mmseg4j,并通过大量实验数据对这些分析器进行分析比较。综合考虑分词效果,建立索引的时间和空间,检索的时间、检全率和平均检准率,ik分析器总体性能最优,而且它可以简便地实现词库扩充,从而可以将书目信息中的作者姓名、出版社等提取出来用于扩充ik词库,进一步提高书目搜索的检全率和检准率。Smart Chinese Analyzer和mmseg4j分析器也有较好的表现,特别是Smart Chinese Analyzer由Lucene自带,可以保证与Lucene的同步更新,有一定优势,但它建立索引花费时间太长,并且不支持用户扩展词库。该研究结果对其它基于Lucene、Solr实现中文全文搜索的项目中,选择中文分析器时也有一定的参考价值。
参考文献
[1]李晓明,闫宏飞,王继民.搜索引擎:原理、技术与系统[M].北京:科学出版社,2012:58.
[2]罗刚.解密搜索引擎技术实战:Lucene & Java精华版[M].北京:电子工业出版社,2011:166.
[3]黄翼彪.实现Lucene接口的中文分词器的比较研究[J].科技信息,2012,(12):246-247.
[4]义天鹏,陈启安.基于Lucene的中文分析器分词性能比较研究[J].计算机工程,2012,(22):279-282.
[5]ik-analyzer-java开源中文分词器-Google Project Hosting[EB/OL].http:∥code.google.com/p/ik-analyzer/,2013-08-22.
[6]mmseg4j-MMSEG for java lucene chinese analyzer,or for solr-Google Project Hosting[EB/OL].http:∥code.google.com/p/mmseg4j/,2013-08-22.
[7]paoding Lucene中文分词“庖丁解牛”Paoding Analysis-Google Project Hosting[EB/OL].http:∥code.google.com/p/paoding/,2013-08-22.
[8]Chinese Analyzer(Lucene 440 API)[EB/OL].http:∥lucene.apache.org/core/440/analyzers-common/index.html,2013-08-22.
[9]Lucene中文分析器的中文分词准确性和性能比较[EB/OL].http:∥approximation.iteye.com/blog/345885,2013-08-22.
[10]与lucene,solr版本同步的ik分词[EB/OL].https:∥github.com/qingw/ik-analyzer/,2013-08-22.
[11]汤国锋,徐振伟,张华熊.基于Lucene的中文分词技术研究[J].电脑编程技巧与维护,2012,(10):4-5,12.
[12]常娥,侯汉清.平均检准率研究[J].情报科学,2006,(4):627-631.
(本文责任编辑:马卓)
endprint
分析器时间(ms)空间(MB)Standard Analyzer64 847821CJK Analyzer73 189880Smart Chinese Analyzer387 615774IK Analyzer()112 541918IK Analyzer(true)106 237744mmseg4j的Simple Analyzer75 612748mmseg4j的Complex Analyzer76 140747mmseg4j的Max Word Analyzer78 734756
由实验结果可以看出,Standard Analyzer的算法最简单,耗时最小,而Smart Chinese Analyzer和ik的分词算法复杂,所以建立索引耗时较长;IK Analyzer()采用最大切分算法得到的词最多,所以占用的空间最大;mmseg4j的采用的是正向匹配,近乎是将原句在若干个位置进行切分,分词后的词语冗余少,所以在建立索引的时间和空间性能方面,综合最优。
23检索结果比较
该实验分别使用上面实验各分析器建立的索引,对书目文本内容进行检索。对IK Analyzer()建立的索引分别用IK Analyzer()、IK Analyzer(true)对检索词进行解析(IK Analyzer()表示用IK Analyzer()解析,IK Analyzer()-IK Analyzer(true)表示用IK Analyzer(true)解析),其它的,采用与建立索引对应相同的分析器对检索词进行解析;查询解析器缺省的逻辑操作为“与”(Query Parser.Operator.AND);分别用检索词“平凡的世界”和“平凡世界”进行检索《平凡的世界》一书的书目信息。实验结果见表5,表中的时间单位为毫秒(ms),检全率=检索结果中的相关记录÷系统中存在的相关记录,平均检准率按文献[12]的无干扰的平均检准率计算方法得出。
表5检索结果比较
分析器平凡的世界平凡世界检索
时间返回
记录数检全率平均
检准率检索
时间返回
记录数检全率平均
检准率Standard Analyzer81371002447741100190CJK Analyzer583101556000Smart Chinese Analyzer68241003635425100306IK Analyzer()552810030652000IK Analyzer()-IK Analyzer(true)55281003065728100306IK Analyzer(true)61211004405521100440mmseg4j的Simple Analyzer55181005175519100340mmseg4j的Complex Analyzer55191004405420100306mmseg4j的Max Word Analyzer57261003065327100254
由实验结果可以看出,Lucene的检索速度优异,Standard Analyzer需较长的检索时间,也只需81毫秒就可从10万条书目记录中检索出所需记录。当检索词与所检内容一致时,所有分析器都可以成功检索出结果,并且CJK Analyze的平均检准率最高;但当检索词较为模糊时,CJK Analyzer与IK Analyzer()都容易出现检索不到结果的情况,这主要是因为它们都有可能将检索词分解出无关词参与检索,例如检索词“平凡世界”会分解成“平凡?凡世?世界”3个词进行检索,从而检索不出结果。所以使用ik分析器时,无论是用IK Analyzer()或IK Analyzer(true)建立索引,进行检索词解析时,都应使用IK Analyzer(true)解析器,避免出现检索不出结果的情况。综合考虑,Smart Chinese Analyzer、ik和mmseg4j这些基于分词方式切词的分析器检索结果较好,都可在较短时间内完成检索,并且检全率和平均检率都较高,其中,ik分析器最优。
3结语
本文为了选择最合适的Lucene中文分析器实现中文书目搜索,选定了Lucene自带的中文分析器:Standard Analyzer、CJK Analyzer、Smart Chinese Analyzer,和开发活跃度比较高的第三方中文分析器:ik、mmseg4j,并通过大量实验数据对这些分析器进行分析比较。综合考虑分词效果,建立索引的时间和空间,检索的时间、检全率和平均检准率,ik分析器总体性能最优,而且它可以简便地实现词库扩充,从而可以将书目信息中的作者姓名、出版社等提取出来用于扩充ik词库,进一步提高书目搜索的检全率和检准率。Smart Chinese Analyzer和mmseg4j分析器也有较好的表现,特别是Smart Chinese Analyzer由Lucene自带,可以保证与Lucene的同步更新,有一定优势,但它建立索引花费时间太长,并且不支持用户扩展词库。该研究结果对其它基于Lucene、Solr实现中文全文搜索的项目中,选择中文分析器时也有一定的参考价值。
参考文献
[1]李晓明,闫宏飞,王继民.搜索引擎:原理、技术与系统[M].北京:科学出版社,2012:58.
[2]罗刚.解密搜索引擎技术实战:Lucene & Java精华版[M].北京:电子工业出版社,2011:166.
[3]黄翼彪.实现Lucene接口的中文分词器的比较研究[J].科技信息,2012,(12):246-247.
[4]义天鹏,陈启安.基于Lucene的中文分析器分词性能比较研究[J].计算机工程,2012,(22):279-282.
[5]ik-analyzer-java开源中文分词器-Google Project Hosting[EB/OL].http:∥code.google.com/p/ik-analyzer/,2013-08-22.
[6]mmseg4j-MMSEG for java lucene chinese analyzer,or for solr-Google Project Hosting[EB/OL].http:∥code.google.com/p/mmseg4j/,2013-08-22.
[7]paoding Lucene中文分词“庖丁解牛”Paoding Analysis-Google Project Hosting[EB/OL].http:∥code.google.com/p/paoding/,2013-08-22.
[8]Chinese Analyzer(Lucene 440 API)[EB/OL].http:∥lucene.apache.org/core/440/analyzers-common/index.html,2013-08-22.
[9]Lucene中文分析器的中文分词准确性和性能比较[EB/OL].http:∥approximation.iteye.com/blog/345885,2013-08-22.
[10]与lucene,solr版本同步的ik分词[EB/OL].https:∥github.com/qingw/ik-analyzer/,2013-08-22.
[11]汤国锋,徐振伟,张华熊.基于Lucene的中文分词技术研究[J].电脑编程技巧与维护,2012,(10):4-5,12.
[12]常娥,侯汉清.平均检准率研究[J].情报科学,2006,(4):627-631.
(本文责任编辑:马卓)
endprint
分析器时间(ms)空间(MB)Standard Analyzer64 847821CJK Analyzer73 189880Smart Chinese Analyzer387 615774IK Analyzer()112 541918IK Analyzer(true)106 237744mmseg4j的Simple Analyzer75 612748mmseg4j的Complex Analyzer76 140747mmseg4j的Max Word Analyzer78 734756
由实验结果可以看出,Standard Analyzer的算法最简单,耗时最小,而Smart Chinese Analyzer和ik的分词算法复杂,所以建立索引耗时较长;IK Analyzer()采用最大切分算法得到的词最多,所以占用的空间最大;mmseg4j的采用的是正向匹配,近乎是将原句在若干个位置进行切分,分词后的词语冗余少,所以在建立索引的时间和空间性能方面,综合最优。
23检索结果比较
该实验分别使用上面实验各分析器建立的索引,对书目文本内容进行检索。对IK Analyzer()建立的索引分别用IK Analyzer()、IK Analyzer(true)对检索词进行解析(IK Analyzer()表示用IK Analyzer()解析,IK Analyzer()-IK Analyzer(true)表示用IK Analyzer(true)解析),其它的,采用与建立索引对应相同的分析器对检索词进行解析;查询解析器缺省的逻辑操作为“与”(Query Parser.Operator.AND);分别用检索词“平凡的世界”和“平凡世界”进行检索《平凡的世界》一书的书目信息。实验结果见表5,表中的时间单位为毫秒(ms),检全率=检索结果中的相关记录÷系统中存在的相关记录,平均检准率按文献[12]的无干扰的平均检准率计算方法得出。
表5检索结果比较
分析器平凡的世界平凡世界检索
时间返回
记录数检全率平均
检准率检索
时间返回
记录数检全率平均
检准率Standard Analyzer81371002447741100190CJK Analyzer583101556000Smart Chinese Analyzer68241003635425100306IK Analyzer()552810030652000IK Analyzer()-IK Analyzer(true)55281003065728100306IK Analyzer(true)61211004405521100440mmseg4j的Simple Analyzer55181005175519100340mmseg4j的Complex Analyzer55191004405420100306mmseg4j的Max Word Analyzer57261003065327100254
由实验结果可以看出,Lucene的检索速度优异,Standard Analyzer需较长的检索时间,也只需81毫秒就可从10万条书目记录中检索出所需记录。当检索词与所检内容一致时,所有分析器都可以成功检索出结果,并且CJK Analyze的平均检准率最高;但当检索词较为模糊时,CJK Analyzer与IK Analyzer()都容易出现检索不到结果的情况,这主要是因为它们都有可能将检索词分解出无关词参与检索,例如检索词“平凡世界”会分解成“平凡?凡世?世界”3个词进行检索,从而检索不出结果。所以使用ik分析器时,无论是用IK Analyzer()或IK Analyzer(true)建立索引,进行检索词解析时,都应使用IK Analyzer(true)解析器,避免出现检索不出结果的情况。综合考虑,Smart Chinese Analyzer、ik和mmseg4j这些基于分词方式切词的分析器检索结果较好,都可在较短时间内完成检索,并且检全率和平均检率都较高,其中,ik分析器最优。
3结语
本文为了选择最合适的Lucene中文分析器实现中文书目搜索,选定了Lucene自带的中文分析器:Standard Analyzer、CJK Analyzer、Smart Chinese Analyzer,和开发活跃度比较高的第三方中文分析器:ik、mmseg4j,并通过大量实验数据对这些分析器进行分析比较。综合考虑分词效果,建立索引的时间和空间,检索的时间、检全率和平均检准率,ik分析器总体性能最优,而且它可以简便地实现词库扩充,从而可以将书目信息中的作者姓名、出版社等提取出来用于扩充ik词库,进一步提高书目搜索的检全率和检准率。Smart Chinese Analyzer和mmseg4j分析器也有较好的表现,特别是Smart Chinese Analyzer由Lucene自带,可以保证与Lucene的同步更新,有一定优势,但它建立索引花费时间太长,并且不支持用户扩展词库。该研究结果对其它基于Lucene、Solr实现中文全文搜索的项目中,选择中文分析器时也有一定的参考价值。
参考文献
[1]李晓明,闫宏飞,王继民.搜索引擎:原理、技术与系统[M].北京:科学出版社,2012:58.
[2]罗刚.解密搜索引擎技术实战:Lucene & Java精华版[M].北京:电子工业出版社,2011:166.
[3]黄翼彪.实现Lucene接口的中文分词器的比较研究[J].科技信息,2012,(12):246-247.
[4]义天鹏,陈启安.基于Lucene的中文分析器分词性能比较研究[J].计算机工程,2012,(22):279-282.
[5]ik-analyzer-java开源中文分词器-Google Project Hosting[EB/OL].http:∥code.google.com/p/ik-analyzer/,2013-08-22.
[6]mmseg4j-MMSEG for java lucene chinese analyzer,or for solr-Google Project Hosting[EB/OL].http:∥code.google.com/p/mmseg4j/,2013-08-22.
[7]paoding Lucene中文分词“庖丁解牛”Paoding Analysis-Google Project Hosting[EB/OL].http:∥code.google.com/p/paoding/,2013-08-22.
[8]Chinese Analyzer(Lucene 440 API)[EB/OL].http:∥lucene.apache.org/core/440/analyzers-common/index.html,2013-08-22.
[9]Lucene中文分析器的中文分词准确性和性能比较[EB/OL].http:∥approximation.iteye.com/blog/345885,2013-08-22.
[10]与lucene,solr版本同步的ik分词[EB/OL].https:∥github.com/qingw/ik-analyzer/,2013-08-22.
[11]汤国锋,徐振伟,张华熊.基于Lucene的中文分词技术研究[J].电脑编程技巧与维护,2012,(10):4-5,12.
[12]常娥,侯汉清.平均检准率研究[J].情报科学,2006,(4):627-631.
(本文责任编辑:马卓)
endprint