基于opencms的中文搜索研究毕业论文.docx
- 文档编号:30553017
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:47
- 大小:344.07KB
基于opencms的中文搜索研究毕业论文.docx
《基于opencms的中文搜索研究毕业论文.docx》由会员分享,可在线阅读,更多相关《基于opencms的中文搜索研究毕业论文.docx(47页珍藏版)》请在冰豆网上搜索。
基于opencms的中文搜索研究毕业论文
论文题目:
基于opencms的中文搜索研究
ResearchSimplifiedChinese
SearchModuleBaseOnOpenCms
College:
ComputerandInformationScience
SpecialtyandGrade:
SoftWareEngineering,2008
Number:
081181064
Name:
WangFeifei
Advisor:
ProfessorChenChangjiang
SubmittedTime:
May,2012
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:
所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:
日 期:
指导教师签名:
日 期:
使用授权说明
本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:
按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:
日 期:
目录
中文摘要I
AbstractII
1引言1
2论文背景2
3实际分析3
3.1OpenCms中搜索的现状3
3.1.1、OpenCms现状3
3.1.2、OpenCms隐患3
3.2目前可用开源搜索引擎的分析和筛选4
3.3优化成中文搜索引擎的步骤4
3.3.1、中文搜索引擎4
3.3.2、中文搜索难点5
3.4中文分词算法的分类的筛选5
3.4.1、字符串匹配分词5
3.4.2、理解分词方法6
3.4.3、统计分词方法6
3.5中文分词中的难题7
3.5.1、歧义识别7
3.5.2、新词识别8
3.5.3、应用现状8
3.6可以嵌入OpenCms项目中的中文搜索工具的筛选8
3.6.1、StopAnalyzer9
3.6.2、StandardAnalyzer9
3.6.3、SimpleAnalyzer9
3.6.4、WhitespaceAnalyzer9
3.6.5、KeywordAnalyzer9
3.6.6、CJKAnalyzer9
3.6.7、ChineseAnalyzer9
3.6.8、PerFieldAnalyzerWrapper10
3.6.9、IKAnalyzer10
3.6.10、JE-Analysis10
3.6.11、ICTCLAS4J10
3.6.12、Imdict-Chinese-Analyzer10
3.6.13、PaodingAnalysis10
3.6.14、MMSeg4J10
3.6.15、IKAnalyzer11
3.6.16、Paoding(庖丁解牛分词)11
3.6.17、MMSEG4J11
3.6.18、盘古分词12
3.7嵌入OpenCms项目的中文搜索引擎的注意事项14
4解决方案20
4.1分析OpenCms代码构架20
4.2分析OpenCms代码中搜索实现部分22
4.3添加IKAnalysis中文支持包进入OpenCms的项目23
4.4添加配置切换文件中对IKAnalysis的支持23
5探索研究25
6结束语26
7参考文献27
致谢28
中文摘要
本论文描述了OpenCms这一个开源的项目在中国的实施情况并且在落地本土化的前景和之中会遇到的问题。
通过其中内嵌的Lucene搜索引擎未能很好的支持中文搜索而进行了一个分析,并指出了中文搜索在OpenCms本土化中的重要作用,且在本论文中对于中文搜索的现有前景和如何在OpenCms这一框架中嵌入中文分词搜索器进行了一个分析和模型的搭建,并且通过嵌入一个中文分词搜索器对Lucene的搜索原理有所了解,并且对于Lucene搜索中的中文分词的分词过滤,语法表达式等等有了深入的了解,也对于以后在算法的搜索方面有所了解。
关键词:
OpenCms;本土化;Lucene;中文分词;分词器
Abstract
ThispaperdescribestheOpenCms,anopensourceprojectimplementedinChina,landingthelocalizationoftheprospectsandproblemsencounteredamong.AnanalysisoftheLucenesearchengineisnotwellembeddedinthesupportofChinesesearch,andpointedouttheimportantroleoftheChinesesearchinthelocalizationofOpenCms,andinthispaperforChinesesearchexistingprospectsandhowtosub-wordsearchdevicecarryoutaananalysisandmodelofthestructuresembeddedintheOpenCmsthisframework,Chinese,andbyembeddingaChinesewordFindertheLucenesearchprinciple,beunderstanding,andtheLucenesearchChinesesub-wordofthesub-wordfiltersyntaxexpressions,andsoaninsightintothealgorithmsearchforlaterunderstanding.
Keywords:
OpenCms;Localization;Lucene,WordAnalysis
1引言
CMS是ContentManagementSystem的缩写,意为"内容管理系统",它具有许多基于模板的优秀设计,可以加快网站开发的速度和减少开发的成本。
CMS的功能并不只限于文本处理,它也可以处理图片、Flash动画、声像流、图像甚至电子邮件档案。
CMS其实是一个很广泛的称呼,从一般的博客程序,新闻发布程序,到综合性的网站管理程序都可以被称为内容管理系统。
根据不同的需求,CMS有几种不同的分类方法。
比如,根据应用层面的不同,可以被划分为:
一.重视后台管理的CMS
二.重视风格设计的CMS
三.重视前台发布的CMS
等等。
就目前已经存在的各种CMS来说,最终界面上都是大同小异,但是在编程风格与管理方式上来讲却是千差万别。
就CMS本身被设计出来的出发点来说,应该是方便一些对于各种网络编程语言并不是很熟悉的用户用一种比较简单的方式来管理自己的网站。
这虽然是本身的出发点,但由于各个CMS系统的原创者们自己本身的背景与对“简单”这两个字的理解程度的不同,就造成了现在没有统一的标准群雄纷争的局面。
简而言之,CMS就是可以让你不需要学习复杂的建站技术,不需要学习太多复杂的HTML语言,你就能够利用CMS构建出一个风格统一功能强大的专业网站。
而OpenCms这一框架就是在这一环境下应用而生的,但是OpenCms这一框架在实际使用中还是有一些各式各样的问题,所以,本论文就从对于中文搜索支持这一个方面进行分析和提出解决方案。
2论文背景
OpenCms[2,3]是1999年发布的,瑞典互联网顾问Framfab支持它。
Framfab在欧洲六个国家设有分支机构。
德国Framfab是OpenCms项目的主要发起人。
对于OpenCms的咨询和支持可以在Framfab以及其他的欧洲公司(比如Alkacon)那里获得。
现在,OpenCms已经被LGTBankofLichtenstein、BPSouthAfrica、和UNICEFNetherlands以及其他很多用户采用。
OpenCms作为一个Java为基础的企业级CMS系统,其本身跟其他同类型的CMS框架相比而言的优势在于:
OpenCms可以非常容易的帮助建立和管理复杂的网站而无需专业的HTML知识。
当使用一个复杂的模板引擎来规划站点,它提供一个类似于我们熟知的office应用的所见即所得编辑器来帮助使用者创建内容。
OpenCms是一个完全开源的软件,它不需要任何许可费用。
[6]
OpenCms基于JAVA和XML语言技术,因此它适合完全融入到现有的系统内部。
OpenCms可以非常好的运行在一个完全的开源环境中(例如:
Linux、Apache、Tomcat、MySQL).当然,也可以很好的运行于商业环境下(例如:
WindowsNT、IIS、BEAWeblogic、OracleDB)。
这样一个优秀的开源Cms框架在中大型企业中的市场地位和市场占有率本应该是举足轻重的。
但实际上在中国,应用和了解OpenCms这一框架的人并不多,而在欧洲的很多国家,它是一个政府企业相当喜欢的一个开源框架。
导致出现这种现状的原因归结起来有下面的几点:
一、国人对于Java的开源Cms项目的代码编写门槛抱有望而却步的态度:
中国市场上面的大多数Cms框架是asp或者php这种相对直观且容易上手的语言进行编写的,而Java编写的Cms框架对于从事php和asp多年的国内开发者来说,转换起来有一定的门槛。
二、在OpenCms中,其自身已经通过Template的方式解决了建站的问题,但是由于国人的英文水平参差不齐,导致接受纯英文的Cms框架有一定的难度。
三、也是我们本论文要讨论的问题就是:
OpenCms在对于中文的很多地方的支持都有一些问题。
而重中之重是在搜索中对于中文分词的检索和解析是很不准确的。
导致搜索出来的结果是牛头不对马嘴。
这样的一个现状很明显的导致了OpenCms在中国市场上的占有率基本为0的一个惨状。
本文就从OpenCms的搜索引擎中对于中文搜索的现状,中文搜索的本土化和可行性进行分析,并且通过一小部分代码来说明此项目的可行性和成品对于OpenCms项目的作用。
3实际分析
3.1OpenCms中搜索的现状
3.1.1、OpenCms现状
OpenCms目前的最高版本是8.0.2由于这个是属于新发布的测试版,功能不是非常稳定,可能有一些不确定的隐藏Bug,故本论文描述的是在8.0.1这一相对稳定的版本下面的OpenCms的搜索模块的功能。
[4,5]
目前的OpenCms搜索功能的界面如图3-1显示:
图31搜索界面
这是符合国人的网站浏览习惯的,故在界面的部分是不需要进行任何修改的。
建站模版出来的样式和实现的样式还是挺好的,而单独的搜索页面的样式也不需要进行特殊的改变,表面上看来搜索中文是没有问题的,其实里面暗藏着地雷。
3.1.2、OpenCms隐患
OpenCms的Api中明确说明了OpenCms使用的全文搜索引擎是Lucene这一功能强大的开源全文搜索引擎,并没提到说在Lucene中有使用第三方的包,这引起了我的质疑,所以我通过OpenCms的源码发现了下面的一段注释,在OpenCms的源代码的packageorg.opencms.search.galleries.CmsGallerySearchAnalyzer这个类中明确显示了这样的一个内容,如图3-2:
图32配置文件
这明确显示了多语言分析器中没有对于中文的关键词进行分析和解释的工作。
这就产生了一系列的隐患:
一、中文的关键词,如“的”,“和”,“与”,“跟”等等的在中文语境有有特殊意义的词在目前的OpenCms中是被当作一个全词来进行搜索的,这样会导致搜索如“小明的小狗”的时候不会搜索出“小狗”,“小明”等这样的按照等级来分的资料,而有可能搜索出“小明的牙膏”,“小明的小时候”这种和语境完全不同的结果,这跟客户希望实现的搜索会产生大相径庭的结果。
二、上面的这种情况还是比较好的。
下面来描述一个更糟的场景:
假设这是一个医药网站,这其中的药名有一些英文单字和中文夹杂着,药品搜索要求的是一个准确性,而最可怕的事情会出现,由于它只支持中文的单字搜索,要全意思才能解释搜索出所需要的单词,故这样会导致很多的药品是搜索不出来的。
这在实现上是一个很不可靠的过程。
故基于OpenCms中的Lucene搜索引擎没有对于中文搜索有很好的支持,而OpenCms本身的开源性和可插拔性就允许了我们对OpenCms的Lucene搜索引擎进行处理。
而个人想到的两种方式有:
一、用其他第三方中文搜索引擎替换Lucene,并且实现多语言搜索。
二、在Lucene搜索引擎中加入第三方的支持软件,实现多语言搜索[1]。
3.2目前可用开源搜索引擎的分析和筛选
通过在网络的资料的汇总和整理发现:
目前的开源搜索引擎框架Lucene的占有率是最大的,也是最完美的,故上文中的用第三方的开源框架来代替Lucene是不可行的。
如果使用付费的框架来进行开源项目的开发有悖于开源项目GPL的原则。
故只能在Lucene上面进行扩展,并且实现中文分词的效果。
Lucene官方的FAQ中明确说明了其在中文搜索中的不足和无能为力的态度。
并且在进行大数据量数据库搜索中的能力也表示不是很乐观。
故本文中没有讨论Lucene对于海量数据存储的性能问题的负载均衡的考量。
仅仅从中文搜索这一实现类关注点进行关注。
通过搜索参考资料得出的结论是,目前可用的搜索引擎框架的不二人选是Lucene,而这也减轻了开发人员在进行OpenCms的扩展的时候的代码量,而下面就要对如何在Lucene上面进行中文搜索引擎的扩展进行一系列的搜索,测试和使用了。
3.3优化成中文搜索引擎的步骤
3.3.1、中文搜索引擎
中文搜索引擎目前大多数做的还是在全文检索引擎上面加入中文分词器的实现方式。
全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式[7]。
主要分为按字检索和按词检索两种。
按字检索是指对于文章中的每一个字都建立索引,检索时将词分解为字的组合。
对于各种不同的语言而言,字有不同的含义,比如英文中字与词实际上是合一的,而中文中字与词有很大分别。
按词检索指对文章中的词,即语义单位建立索引,检索时按词检索,并且可以处理同义项等。
英文等西方文字由于按照空白切分词,因此实现上与按字处理类似,添加同义处理也很容易。
中文等东方文字则需要切分字词,以达到按词索引的目的,关于这方面的问题,是当前全文检索技术尤其是中文全文检索技术中的难点。
其难点在于:
3.3.2、中文搜索难点
1.与英文为代表的拉丁语系语言相比,英文以空格作为天然的分隔符,而中文由于继承自古代汉语的传统,词语之间没有分隔。
古代汉语中除了连绵词和人名地名等,词通常就是单个汉字,所以当时没有分词书写的必要。
而现代汉语中双字或多字词居多,一个字不再等同于一个词。
例如英语:
'Knowledgeispower“,可自然分割为Knowledge/is/power三个词。
而汉语里:
“知识就是力量”,由于没有词语之间的分隔符,书写时无法切分成:
知识/就是/力量
2.在中文里,“词”和“词组”边界模糊[8]
现代汉语的基本表达单元虽然为“词”,且以双字或者多字词居多,但由于人们认识水平的不同,对词和短语的边界很难去区分。
例如:
“对随地吐痰者给予处罚”,“随地吐痰者”本身是一个词还是一个短语,不同的人会有不同的标准,同样的“海上”“酒厂”等等,即使是同一个人也可能做出不同判断,如果汉语真的要分词书写,必然会出现混乱,难度很大。
故实现中文搜索引擎的步骤就是在Lucene框架上面嵌入一个中文分词的工具。
3.4中文分词算法的分类的筛选
现有的分词算法可分为三大类:
基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。
按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。
3.4.1、字符串匹配分词
这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。
按照扫描方向的不同,串匹配分词方法可以分为正向匹配和逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配;常用的几种机械分词方法如下:
1)正向最大匹配法(由左到右的方向);
2)逆向最大匹配法(由右到左的方向);
3)最少切分(使每一句中切出的词数最小);
4)双向最大匹配法(进行由左到右、由右到左两次扫描)
还可以将上述各种方法相互组合,例如,可以将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。
由于汉语单字成词的特点,正向最小匹配和逆向最小匹配一般很少使用。
一般说来,逆向匹配的切分精度略高于正向匹配,遇到的歧义现象也较少。
统计结果表明,单纯使用正向最大匹配的错误率为1/169,单纯使用逆向最大匹配的错误率为1/245。
但这种精度还远远不能满足实际的需要。
实际使用的分词系统,都是把机械分词作为一种初分手段,还需通过利用各种其它的语言信息来进一步提高切分的准确率。
一种方法是改进扫描方式,称为特征扫描或标志切分,优先在待分析字符串中识别和切分出一些带有明显特征的词,以这些词作为断点,可将原字符串分为较小的串再来进机械分词,从而减少匹配的错误率。
另一种方法是将分词和词类标注结合起来,利用丰富的词类信息对分词决策提供帮助,并且在标注过程中又反过来对分词结果进行检验、调整,从而极大地提高切分的准确率。
对于机械分词方法,可以建立一个一般的模型,在这方面有专业的学术论文,这里不做详细论述。
3.4.2、理解分词方法
这种分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果。
其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。
它通常包括三个部分:
分词子系统、句法语义子系统、总控部分。
在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断,即它模拟了人对句子的理解过程。
这种分词方法需要使用大量的语言知识和信息。
由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此目前基于理解的分词系统还处在试验阶段。
3.4.3、统计分词方法
从形式上看,词是稳定的字的组合,因此在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词。
因此字与字相邻共现的频率或概率能够较好的反映成词的可信度。
可以对语料中相邻共现的各个字的组合的频度进行统计,计算它们的互现信息。
定义两个字的互现信息,计算两个汉字X、Y的相邻共现概率。
互现信息体现了汉字之间结合关系的紧密程度。
当紧密程度高于某一个阈值时,便可认为此字组可能构成了一个词。
这种方法只需对语料中的字组频度进行统计,不需要切分词典,因而又叫做无词典分词法或统计取词方法。
但这种方法也有一定的局限性,会经常抽出一些共现频度高、但并不是词的常用字组,例如“这一”、“之一”、“有的”、“我的”、“许多的”等,并且对常用词的识别精度差,时空开销大。
实际应用的统计分词系统都要使用一部基本的分词词典(常用词词典)进行串匹配分词,同时使用统计方法识别一些新的词,即将串频统计和串匹配结合起来,既发挥匹配分词切分速度快、效率高的特点,又利用了无词典分词结合上下文识别生词、自动消除歧义的优点。
另外一类是基于统计机器学习的方法。
首先给出大量已经分词的文本,利用统计机器学习模型学习词语切分的规律(称为训练),从而实现对未知文本的切分。
我们知道,汉语中各个字单独作词语的能力是不同的,此外有的字常常作为前缀出现,有的字缺常常作为后缀(“者”“性”),结合两个字相临时是否成词的信息,这样就得到了许多与分词有关的知识。
这种方法就是充分利用汉语组词的规律来分词。
这种方法的最大缺点是需要有大量预先分好词的语料作支撑,而且训练过程中时空开销极大。
到底哪种分词算法的准确度更高,目前并无定论。
对于任何一个成熟的分词系统来说,不可能单独依靠某一种算法来实现,都需要综合不同的算法。
例如,海量科技的分词算法就采用“复方分词法”,所谓复方,就是像中西医结合般综合运用机械方法和知识方法。
对于成熟的中文分词系统,需要多种算法综合处理问题。
而由于OpenCms中的项目搜索量不是非常大,不需要进行基于统计的机器学习的算法和基于理解的算法,只要通过物理顺序进行分词操作就基本上可以在性能上最优,并且在用户体验上得到最大化的效果的方式。
3.5中文分词中的难题
有了成熟的分词算法,是否就能容易的解决中文分词的问题呢?
事实远非如此。
中文是一种十分复杂的语言,让计算机理解中文语言更是困难。
在中文分词过程中,有两大难题一直没有完全突破。
[9]
3.5.1、歧义识别
歧义是指同样的一句话,可能有两种或者更多的切分方法。
主要的歧义有两种:
交集型歧义和组合型歧义,例如:
表面的,因为“表面”和“面的”都是词,那么这个短语就可以分成“表面的”和“表面的”。
这种称为交集型歧义(交叉歧义)。
像这种交集型歧义十分常见,前面举的“和服”的例子,其实就是因为交集型歧义引起的错误。
“化妆和服装”可以分成“化妆和服装”或者“化妆和服装”。
由于没有人的知识去理解,计算机很难知道到底哪个方案正确。
交集型歧义相对组合型歧义来说是还算比较容易处理,组合型歧义就必需根据整个句子来判断了。
例如,在句子“这个门把手坏了”中,“把手”是个词,但在句子“请把手拿开”中,“把手”就不是一个词;在句子“将军任命了一名中将”中,“中将”是个词,但在句子“产量三年中将增长两倍”中,“中将”就不再是词。
这些词计算机又如何去识别?
如果交集型歧义和组合型歧义计算机都能解决的话,在歧义中还有一个难题,是真歧义。
真歧义意思是给出一句话,由人去判断也不知道哪个应该是词,哪个应该不是词。
例如:
“乒乓球拍卖完了”,可以切分成“乒乓球拍卖完了”、也可切分成“乒乓球拍卖完了”,如果没有上下文其他的句子,恐怕谁也不知道“拍卖”在这里算不算一个词。
3.5.2、新词识别
命名实体(人名、地名)、新词,专业术语称为未登录词。
也就是那些在分词词典中没有收录,但又确实能称为词的那些词。
最典型的是人名,人可以很容易理解。
句子“王军虎去广州了”中,“王军虎”是个词,因为是一个人的名字,但要是让计算机去识别就困难了。
如果把“王军虎”做为一个词收录到字典中去,全世界有那么多名字,而且每时每刻都有新增的人名,收录这些人名本身就是一项既不划算又巨大的工程。
即使这项工作可以完成,还是会存在问题,例如:
在句子“王军虎头虎脑的”中,“王军虎”还能不能算词?
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 opencms 中文搜索 研究 毕业论文