基于JAVA的小型中文分词系统

时间:2022-10-04 12:37:17

基于JAVA的小型中文分词系统

摘要:互联网信息飞速增长,网络资源不断增加,于是搜索引擎应运而生,它的出现为我们在网络上搜集我们所需要的资源提供了很大的方便,但是人们并不满足于早期的搜索引擎的功能和速度,于是搜索引擎开始不断地被更新和完善,而分词对于搜索引擎的更新和完善起着很重要的作用。分词作为搜索引擎的重要组成部分,对搜索引擎的查找正确率以及查找速度具有很大的影响。它将用户输入的语句分割成一个个词语和单字,这样检索程序就能很容易地理解用户所需要的信息,从而为用户返回正确且有价值的信息资料。本文通过对正向最大匹配、逆向最大匹配等分词算法以及词典的整词二分、TRIE索引树、逐字二分和双哈希构造方法进行理论分析,了解各种分词算法和词典构造方法的优点和缺点,并用Java编程实现正向最大匹配、逆向最大匹配的分词算法以及一维线性表、首字哈希、双哈希三种词典构造方法,最终整合实现了Java分词系统。

关键词:中文分词;词典;最大匹配;双哈希

中图分类号:G642.0 文献标志码:A 文章编号:1674-9324(2013)24-0151-04

一、绪论

对于搜索引擎来说,最重要的并不是找到所有结果,因为在上百亿的网页中找到所有结果没有太多的意义,也没有人能看得完,最重要的是把最相关的结果排在最前面,这也称为相关度排序。中文分词的准确与否,常常直接影响到对搜索结果的相关度排序。例如在搜索引擎上输入“和服”,得到的结果中就发现了下面这句话“通信信息报:卡巴斯基以技术和服务开拓网络安全市场”,这就是由于分词不准确所造成的问题。从这里看到中文分词的准确度,对搜索引擎结果相关性和准确性有相当大的关系。另外,在整个搜索过程中进场要进行词典的查询,所以分词对于搜索引擎的速度也是有影响的。

二、分词的方法

1.分词的意义。由于中文语句没有自然的将词语分开,所以计算机无法了解用户输入文字串的意思,我们需要将用户输入的内容拆分成词,这样计算机才能通过词语的比对来实现对信息的检索和查找。而这个将用户输入文字串拆分成词的过程就是分词。

2.目前的分词算法。现有的分词算法可分为三大类:基于字符串匹配、基于理解和基于统计的分词算法。基于字符串匹配的分词算法又叫做机械分词算法,它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。常用的几种机械分词算法有正向最大匹配法、逆向最大匹配法、最少切分。一般说来,逆向匹配的切分精度略高于正向匹配,遇到的歧义现象也较少。这种分词方法目前使用较多,我的程序也使用的是这种分词算法。

三、分词词典的构造

1.词典的作用。为了进行分词,我们首先要构建一个文本文件,这个文本文件中存放用来构造具体的词典所用的词,这些词可以通过词典程序构造一个词典,再通过分词程序的加载进行输入文本的分词操作。

2.目前的几种词典构造方法、简介及优缺点。目前分词主要有以下几种实现方法:整词二分法、TRIE索引树、逐字二分法、双哈希算法。我最终使用的是双哈希算法,所以我详细介绍双哈希算法,其他算法就不做介绍了。经分析发现中文词语中多字词较少,利用这种情况,我们得到了如下两种双哈希算法:第一种是建立首字哈希索引,然后再对次字建立哈希索引,后面的字组成类似于“整词二分”的“词典正文”的构造(如图3-1)。下面我们举例看一下双哈希查找词语的方法。例如查询“吃一堑长一智MP4行业标准年底即将出台。”中从“吃”字开始的最长词。①首先在首字Hash索引I1中通过Hash定位得到以“吃”字开头的索引项E1。②因为E1中的“是否为词”项值为“T”,所以“吃”是一个词。再由E1的“指针”项得到以“吃”字开头的所有词的次字哈希索引I2并通过类似(1)中的查找,找到“一”字相关信息,并找到剩余字串组W。③在W中查找第一个字为“堑”的词,得到范围W1而后逐字搜索后续的字“长”、“一”、“智”并缩小范围,最终得到语句S中从“吃”字开始的最长词为“吃一堑长一智”。

第二种是先对文字长度进行哈希索引,再进行首字哈希索引。这个结构类似于上面一种方法,就不做图片和举例介绍了。

双哈希算法,速度虽和TRIE差不多,但是维护更为简洁方便,所以是一种比较好的算法。

四、系统实现

1.系统的实现。为了让看程序的人能够一目了然,我把词典和分词所用到的类和接口分别放在两个包中,他们分别建立在包processor和包dictionary中,两个包之间通过接口联系,在每个包中将不同的实现方法分别构造自己的类文件。具体我们设置两个包文件,我们分别在两个包中各建立一个接口,分别为DictionaryImpl和SegmentProcessorImpl。

2.两个包的UML图。下面分别画出词典包的UML图(图4-1)和分词包的UML图(图4-2)。

3.程序运行效果。程序运行环境:操作系统:Windows Vista JAVA环境:Java Development Kit 6.0。

WEB环境:Tomcat 5.5.20首先输入待分词文本:“在某些方面,Hashtable对象非常类似于ArrayList……”点击进行分词后输出结果:“在某些方面,hashtable,对象,非常,类似于,arraylist……”程序运行效果图如下(分词前效果如图4-3,分词后效果如图4-4)。

4.程序运行效率。测试文字长度:2491字。测试效率如下:①正向最大匹配出现错误词语26个。②逆向最大匹配出弧错误词语14个。③单哈希结构使用时间0分42.39秒。④双哈希结构使用时间0分18.42秒。

五、毕业设计总结

搜索引擎技术在目前越来越受到关注和重视,作为其重要组成部分的分词技术也是目前互联网研究方面的一个重要话题。通过这次对分词技术的研究使我对分词以及搜索引擎技术都有了很深的了解,同时也加深了我对Java语言的了解,还掌握了很多相关的知识技术,这是我离开学校前学校给我上的一堂很重要的课程,为我将从课本学到的知识运用的实际应用中又提供了很好的实践经验。本次设计也使我了解到自己在Java方面的不足,需要在以后多进行编程练习。

致谢:在我的毕业设计过程中,我的指导老师赵洋和刘博老师对我的毕业设计有很大的帮助。他们帮我分析设计思路,帮我找参考资料,耐心解答我在查看资料中遇到的不懂的问题,还帮助我完善程序。他们的耐心讲解以及严格要求为我顺利地完成我的毕业设计铺平了道路。同时,学校给提供的良好的设计环境以及同学之间的互相帮助也为我能够顺利完成毕业设计提供了很好的支持。在此向我的辅导老师赵洋和刘博老师,以及在毕业设中帮助我的老师和同学表示衷心的感谢,同时也衷心感谢学校给我提供这次有意义的实践机会,为我成功地步入社会增加了宝贵的经验。

参考文献:

[1]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,2003.

[2]耿祥义,张跃平.JAVA2实用教程(修订)[M].北京:清华大学出版社,2003.

[3]Thomas H.Cormen,Charles E.Leiserson,Ronald L.Rivest,Clifferd Stein.Introduction to Algorithms(Second Edition)[M].Americon:The Massachusetts Institute of Technology,2001.

[4]李江波,,陈祖舜.汉语词典的快速查询算法研究[J].中文信息学报,200,20:31.

[5]孙茂松,左正平,黄昌宁.汉语自动分词词典机制的实验研究[J].中文信息学报,1999,14:1.

[6]李庆虎,陈玉健,孙家广.一种中文分词词典新机制——双字哈希机制[J].中文信息学报,2002,17:13.

[7]陈小荷.自动分词中未登录词问题的一揽子解决方案[J].语言文字应用,1999,31:103.

上一篇:高校招生营销战略研究 下一篇:生源复杂院校中学生英语学习效率的研究与总结