SlideShare a Scribd company logo
1 of 32
Download to read offline
编号




      南京航空航天大学


  毕业论文
题 目       中文分词算法设计与实现



 学生姓名          彭立勋


 学    号       040630520


 学    院     信息科学与技术学院

 专    业     计算机科学与技术


 班    级        0406305


 指导教师         徐敏 副教授



           二〇一〇年六月
南京航空航天大学
       本科毕业设计(论文)诚信承诺书

  本人郑重声明:所呈交的毕业设计(论文)(题目:中文分词算

法设计与实现)是本人在导师的指导下独立进行研究所取得的成果。

尽本人所知,除了毕业设计(论文)中特别加以标注引用的内容外,

本毕业设计(论文)不包含任何其他个人或集体已经发表或撰写的成

果作品。



          作者签名:             2010 年 6 月 6 日

           (学号):040630520
毕业设计(论文)报告纸



               中文分词算法设计与实现

                           摘    要
   中文分词在计算机实现的重要问题是,中文在书写时并不会显式的给出单词边界,由于
单词是一个基本的语义单位,因此在中文信息分词处理的时候,必须先识别文本中的单词,
以便进行进一步的处理。本文结合作者工作实际分析了目前几种流行的中文分词算法,包括
MMSeg、统计分词算法,比较其各方面优劣和适用场景,并结合实际应用,给出利用 MySQL
的 UDF(User Defined Function,用户自定义函数)和插件机制,实现 MySQL FullText 索引
支持中文分词的方法。




关键词:中文分词,语言统计模型,MMSeg,MySQL




                                                             i
毕业设计(论文)报告纸



        Chinese Segmentation Algorithm Design and
                    Implementation

                                             Abstract
    An important problem in computational analysis of Chinese text is that there are no word
boundaries in conventionally printed text. Since the word is a fundamental linguistic unit, it is
necessary to identify words in Chinese text so that higher-level analyses can be performed. This
article is based on the analysis of the current practice of several popular Chinese segmentation
algorithms, including MMSEG and statistical segmentation algorithm. By comparing their good
point, weak point, and application scene, and by combing with actual application, UDF of
MySQL(User Defined Function) and plugin mechanisms, the MySQL FullText index supporting the
Chinese word segmentation method has been realized.



Key Words: Chinese word segmentation; Statistical language models; MMSeg; MySQL




                                                                                               ii
毕业设计(论文)报告纸


                                        目 录
摘    要 ....................................................................... i
Abstract ..................................................................... ii
目   录 ...................................................................... iii
第一章       引 言 ................................................................ 1
    1.1    分词介绍.............................................................. 1
          1.1.1 西方语言分词 ..................................................... 1
          1.1.2 东方语言分词 ..................................................... 1
    1.2    中文分词的特点........................................................ 1
    1.3    中文分词的作用........................................................ 2
    1.3    中文分词的应用........................................................ 2
第二章       中文分词相关算法介绍 .................................................. 4
    2.1    中文分词算法分类...................................................... 4
          2.1.1 基于理解(语义)的分词 ........................................... 4
          2.1.2 基于规则(字符串匹配)的分词 ..................................... 4
          2.1.3 基于统计的分词 ................................................... 4
    2.2    中文分词算法优劣指标.................................................. 5
          2.2.1 歧义识别 ......................................................... 5
          2.2.2 新词识别 ......................................................... 5
          2.2.3 是否需要附加库 ................................................... 5
          2.2.4 算法复杂度 ....................................................... 5
          2.2.5 技术成熟度 ....................................................... 5
          2.2.6 实施复杂性 ....................................................... 5
          2.2.7 分词准确性 ....................................................... 6
第三章       中文分词算法的设计 .................................................... 7
    3.1    基于理解的中文分词算法设计............................................ 7
    3.2    基于规则的中文分词算法设计............................................ 7
          3.2.1 MMSeg 分词算法.................................................... 7
    3.3    基于统计的中文分词算法设计........................................... 11
          3.3.1 语言统计模型分词算法 ............................................ 11


                                                                               iii
毕业设计(论文)报告纸
    3.4    混合处理的中文分词算法设计........................................... 12
          3.4.1 结合规则分词与统计分词的综合分词算法 ............................ 12
第四章        中文分词算法的实现 ................................................... 14
    4.1    MMSeg 分词算法实现 ................................................... 14
          4.1.1 每个 Chunk 的长度计算 ............................................ 14
          4.1.2 每个 Chunk 的平均词长度 .......................................... 14
          4.1.3 每个 Chunk 的方差 ................................................ 15
          4.1.4 每个 Chunk 的自由语素度之和 ...................................... 15
    4.2    语言统计模型分词算法实现............................................. 16
          4.2.1 预处理统计信息 .................................................. 16
          4.2.2 分词处理 ........................................................ 18
    4.3    综合分词算法实现..................................................... 19
    4.4    综合分词算法与 MySQL 数据库的实现..................................... 19
第五章        总结 ................................................................. 23
    5.1    工作总结............................................................. 23
    5.2    各种分词算法的优劣比较............................................... 24
    5.3    分词算法发展展望..................................................... 24
参 考 文 献 .................................................................. 25
致         谢 .................................................................... 26 




                                                                                  iv
毕业设计(论文)报告纸




                  第一章   引   言


1.1   分词介绍
      词语是语言的基本组成单位,分词就是将一段文本中具有独立含义的词条拆分开来,
  这是对语言信息处理的基础。在不同的语系中,由于语言习惯的差异,对“词”的定义
  不一样,文本中词的边界标识也不一样。在大部分西方语言中,一个由字母组成的字串
  即被认为是一个单词,词与词之间用空格分开。而在很多东方语系中,例如中文、日文、
  韩文等,若干个独立的字组成的一个具有独立含义的字串被认为是词,并且书写时,词
  与词之间没有明显的边界。
1.1.1 西方语言分词
      在大部分西方语系中,每一个由字母组成的单词就具有独立含义,所以基本上都认
  为由空格分开的字串即为单词,于是分词的方法也极为简单,把一个句子中的字串按空
  格分开,得到的一组字串,就是分词的结果。例如 MySQL 数据库 MyISAM 存储引擎的
  FullText 全文索引(只支持西方语言)就是采用的这种方式分词建立倒排索引。
1.1.2 东方语言分词
      与西方语言不同,大部分东方语言,词语是由基本的单个文字组成的,某些单字也
  可能是一个独立的词,大部分词由两个以上的字组成,另外句子之中也没有明显的分隔
  符(例如空格)作为词的边界,于是对东方语言的分词处理就相对复杂。
      东方语言大都存在一字多义,一词多义的现象,需要联系上下文才能正确的分出词
  汇,甚至可能联系上下文,都会因为个人习惯不同,而不同人之间有不同的分词结果。
  因而东方语言的分词需要考虑更多的内容进行判断,例如人为定义的语言规则、基于大
  量文本的统计结果等等,甚至需要引入语义分析。

1.2   中文分词的特点
      中文与大部分东方语言一样,存在一些特殊的性质:
      (1)语义丰富、一词多义的现象非常普遍。


                                              -1-
毕业设计(论文)报告纸
      (2)句子时常存在歧义,经常可以有多种分词方式,甚至可能都能合理的表达一个
      语义,甚至有时人都需要通过上下文理解,才能正确的分词;
      (3)存在口语化的语言习惯,难以定义出一套统一的语法来适合所有能被人理解的
      文本;
      (4)新增词汇多,需要词库的分词算法如果不及时更新词库,就会无法识别出新词,
      导致分词的结果准确性下降。
      由于这些特点,中文分词的难度较西方语言大得多。

1.3   中文分词的作用
      要想说清楚分词的意义和作用,就要提到人工智能(AI)技术。人工智能技术涉及
  的学科包括物理学、数学、计算机科学、电子机械、通讯、生理学、进化理论和心理学
  等等。简单的说,人工智能就是让机器具备人类一样的智能,能像人类一样的思考。要
  想实现这样的一个目标,就必须让机器理解人类的语言,只有机器理解了人类的语言文
  字,才使得人与机器的交流成为可能。再反观我们人类的语言中,
                              “词是最小的能够独立
  活动的有意义的语言成分”,所以对于中文来讲,将独立的词条拆分开来,是理解自然语
  言的第一步,只有跨越了这一步,中文才能像英文那样过渡到短语划分、概念抽取以及
  主题分析,以至于自然语言理解,最终达到智能计算的最高境界,实现人类的梦想。
      从现阶段的实际情况来看,英文由于存在明显的单词边界,很快跨越了分词这一步,
  也就是说在词的利用上已经先我们一步,并且已经展现了良好的应用前景,无论是信息
  检索还是主题分析的研究都要强于中文,究其根本原因就是中文要通过分词这道难关,
  只有攻破了这道难关,我们才有希望赶上并超过英文在信息领域的发展,所以中文分词
  对我们来说意义重大,可以说直接影响到使用中文的每一个人的方方面面。

1.3   中文分词的应用
      中文分词主要应用于信息检索、汉字的智能输入、中外文对译、中文校对、自动摘
  要、自动分类等诸多方面。下面就以应用最广的信息检索为例来说明中文分词的应用。
      近几年的互联网发展,互联网上的信息在急剧的膨胀,让我们进入了信息时代。在
  这海量的信息中,各类信息混杂在一起,要想充分利用这些信息资源就要对它们进行整
  理,如果由人来做这项工作,以目前的信息量,已经是不可能的,而如果面对中文信息
  采用简单的全模糊匹配而不采用分词技术,那么整理的结果就过于粗糙,从而导致资源

                                          -2-
毕业设计(论文)报告纸
不可用。
  例如:“南京市长江大桥欢迎您”和“市长江大桥出席会议”中都有“市长”,而被
当作同一类来处理,结果是检索关于“市长”的相关信息的时候,它们都会被检索到,
在信息量少的情况下,还能通过手动分拣来排除这些问题,但是面临现在的海量信息,
根本不可能靠手工处理这样的错误数据。通过引入分词技术,就可以使机器对海量信息
的整理更准确更合理,在“南京市长江大桥欢迎您”中“市长”不会被当成一个词来处
理,那么检索“市长”当然不会将它检索到,使得检索结果更准确,效率也会大幅度的
提高。所以中文分词的发展应用与我们的科技生活息息相关。




                                      -3-
毕业设计(论文)报告纸




                第二章   中文分词相关算法介绍


2.1   中文分词算法分类
      中文分词算法目前主要分为三大类:基于理解(语义)的分词方法、基于规则(字
  符串匹配)的分词方法和基于统计的分词方法,同时也存在一些将两种或三种算法结合
  起来取长补短的方法。
2.1.1 基于理解(语义)的分词
      分词人们容易想到的办法就是,让计算机模拟人类进行学习——学习人类的语法,
  分析语句的方法等等。基于理解的分词是希望通过让计算机模拟人对句子的理解,达到
  识别词的效果。其基本思想就是在分词时进行句法、语义分析,利用句法信息和语义信
  息来处理歧义现象。尤其是在乔姆斯基(Noam Chomsky)提出 “形式语言” 以后,人
  们更加坚信利用语法规则的办法进行文字处理的方法。遗憾的是,目前为止,基于理解
  的分词算法还没有重大突破。
2.1.2 基于规则(字符串匹配)的分词
      基于规则分词是按照一定的策略将有待分析的中文字串与一个“充分大的”机器词
  典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。按照
  扫描方向的不同,串匹配分词方法可以分为正向匹配和逆向匹配;按照不同长度优先匹
  配的情况,可以分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程
  相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。常用的几种方法
  有
      (1)正向最大匹配法(由左到右的方向)。
      (2)逆向最大匹配法(由右到左的方向)。
      (3)最少切分(使每一句中切出的词数最小)。
2.1.3 基于统计的分词
      基于统计的方法是基于若干个汉字同时出现的概率,通过对语料库(经过处理的大
  量领域文本的集合)中的文本进行有监督或无监督的学习,可以获取该类文本的某些整


                                             -4-
毕业设计(论文)报告纸
      体特征或规律,如果能够充分地利用这些统计现象、规律,就可以构造基于语料库的统
      计学信息。抽取算法、统计的分析方法可以多种多样,近来研究的热点主要集中于由随
      机过程发展而来的理论和方法,其中最重要的是应用隐马尔科夫模型(HMM)进行自然
      语言处理的方法。

2.2    中文分词算法优劣指标
2.2.1 歧义识别
        歧义识别指一个字符串有多种分词组合,计算机难以给出到底哪一种分词算法才是
      正确的分词系列。如“南京市长江大桥”可以分为“南京 / 市长 / 江大桥”或“南京市
      / 长江大桥”,计算机无法判断哪一种才是准确的分词组合。
2.2.2 新词识别
        新词识别也称作未登录词识别,指正确识别词典中没有出现的词语。姓名、机构名、
      地址、称谓等千变万化,词典中常常不能完全收录这些词语,另外,网络中出现的流行
                           “犀利哥”是出现在网络中,并迅速流
      用语也是一种未登录词的常见来源,如“打酱油”
      行开来的新词。大量的研究证明新词识别是中文分词准确性的一个重要影响因素。
2.2.3 是否需要附加库
        (1)词典:是记录已知词汇的词库,提供给程序读取,词库中词汇的越全,依赖词
      典的分词算法分词就越准确。
        (2)语料库:大量领域文本的集合,经过筛选的领域高质量文本集合对依赖语料库
      的分词算法非常重要。
        (3)规则库:计算机理解文本的文法规则集合,对于依赖规则库的分词算法,规则
      库的完备、准确至关重要。
2.2.4 算法复杂度
        算法复杂度包括编码的复杂度,算法运行所占用的系统空间和所消耗的时间,算法
      复杂度低的算法可以更快的被实现,有更快的处理速度、更低的系统占用。
2.2.5 技术成熟度
        算法理论的完善性决定了这种分词技术的成熟度,细节问题解决尚不全面的分词算
      法,其技术成熟度较低,反之则技术成熟度高。
2.2.6 实施复杂性


                                              -5-
毕业设计(论文)报告纸
     实施复杂度基本上依赖于技术成熟度和算法复杂度,算法复杂度越高、技术成熟度
  越差,实施的复杂性就越高,反之则实施的复杂性低。
2.2.7 分词准确性
     将机器分词结果与人分词的结果对比,机器分词结果越接近人分词结果,则分词算
  法的准确性越高。
2.2.8 分词速度
     分词速度一般以“KB/s”或“字(词)/s”衡量,分词速度很大程度上依赖于算法复
  杂度,算法复杂度高的分词算法分词速度慢,算法复杂度低的分词算法分词速度就快。




                                           -6-
毕业设计(论文)报告纸




                        第三章 中文分词算法的设计


3.1    基于理解的中文分词算法设计
           基于理解的分词系统通常包括三个部分:分词子系统、句法语义子系统、总控部分。
      在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词
      歧义进行判断,即它模拟了人对句子的理解过程,这种分词方法需要使用大量的语言知
      识和信息,例如规则库。由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织
      成机器可直接读取的形式,因此目前基于理解的分词系统还处在试验阶段,没有成熟的
      算法可以参考。

3.2    基于规则的中文分词算法设计
           基于规则的分词是目前技术比较成熟的分词方法,有基于单一规则的简单匹配算法,
      例如正向、逆向最大匹配,也有基于多种规则的复杂匹配算法,例如 MMSeg 算法将多种
      规则组合在一起提高分词的准确性。
3.2.1 MMSeg 分词算法
           MMSeg 算法是台湾认知心理学家蔡智浩在文献[16]中提出的一种复杂规则匹配算
      法。
         MMSeg 算法中一个关键的概念是 Chunk,它包含依据上下文分出的一组词和相关的
      属性,包括长度(Length)、平均长度(Average Length)
                                         、标准差的平方(Variance)和自
      由语素度(Degree Of Morphemic Freedom)。表 1.1 列出了这 4 个属性的计算方法:
                            表 1.1 MMSeg 算法属性计算方法

                            属性                          含义

                        长度(Length)                Chuck中各个词的长度之和

                   平均长度(Average Length)            长度(Length) / 词数

                    标准差的平方(Variance)                同数学中的定义

             自由语素度(Degree Of Morphemic Freedom)   各单字词词频的对数之和



                                                                     -7-
毕业设计(论文)报告纸
   Chunk 中的 4 个属性采用 Lazy 的方式来计算,即只有在需要该属性的值时才进行计
算,而且只计算一次。
   MMSeg 分词算法中的另一个关键的概念是规则(Rule),它实际上是一个过滤器
(Filter),过滤掉不符合要求的 Chunk。表 1.1 列举了 MMSeg 分词算法中的 4 个规则。
                           表 1.2 MMSeg 算法分词规则

      编号                                   描述

      规则1                    最大匹配(Maximum matching)

      规则2              最大平均词长(Largest average word length)

      规则3           词长的方差最小(Smallest variance of word lengths)

                                单字词自由语素度之和最大
      规则4
            (Largest sum of degree of morphemic freedom of one-character words)

   这 4 个规则符合汉语构词规则的基本习惯。
   MMSeg 算法包含两种匹配方式:简单最大匹配(Simple maximum matching)和复杂
最大匹配(Complex maximum matching)。
   简单最大匹配仅仅使用了规则 1。复杂最大匹配先使用规则 1 来过滤 Chunks,如果
过滤后的结果多于或等于 2,则使用规则 2 继续过滤,否则终止过滤过程……依次使用四
个规则,如果使用规则 4 得到的过滤结果依然多于或等于 2,则抛出一个表示歧义的异常,
否则终止过滤过程。算法流程如图 1.1 所示。




                                                                                  -8-
毕业设计(论文)报告纸




          图 1.1 MMSeg 复杂最大匹配方式的处理流程

最后通过一个例子来简述一下 MMSeg 算法复杂最大匹配方式的分词过程。
要分词的句子:“研究生命起源”。
           表 1.3.1 MMSeg 算法实例.获取 Chunks
              编号      Chunk     长度
              1    研/究/生        3
              2    研/究/生命       4
              3    研究/生/命       4
              4    研究/生命/起      5
              5    研究/生命/起源     6
              6    研究生/命/起      5
              7    研究生/命/起源     6
使用规则 1 过滤后得到 2 个 Chunk,需要继续过滤。

                                                  -9-
毕业设计(论文)报告纸
                   表 1.3.2 MMSeg 算法实例.应用规则 1
                     编号              Chunk              长度
                     5       研究/生命/起源                   6
                     7       研究生/命/起源                   6
  对规则 1 过滤后的 Chunks 计算平均长度。
               表 1.3.3 MMSeg 算法实例.计算平均词长
               编号            chunk            长度            平均长度
               5         研究/生命/起源             6             6/3=2
               7         研究生/命/起源             6             6/3=2
  使用规则 2 过滤后得到 2 个 Chunk,需要继续过滤。
                   表 1.3.4 MMSeg 算法实例.应用规则 2
               编号            chunk            长度            平均长度
               5         研究/生命/起源             6             2
               7         研究生/命/起源             6             2
  对规则 2 过滤后的 Chunks 计算词长的方差。
               表 1.3.5 MMSeg 算法实例.计算词长方差
           编号             Chunk           长度        平均长度             方差
           5        研究/生命/起源              6        2                 0
           7        研究生/命/起源              6        2                 4/9
  使用规则 3 过滤后只剩下 1 个 Chunk。可以停止过滤。
                   表 1.3.6 MMSeg 算法实例.应用规则 3
           编号             Chunk           长度        平均长度             方差
           5        研究/生命/起源              6        2                 0
  只剩 1 个 Chunk,匹配过程终止。最终取“研究”成词,以相同的方法继续处理“生
命起源”。最终可以获得分词结果:“研究/生命/起源”。
  在特殊情况下,规则 4 也会被用到,例如文本:“主要是因为”,计算方差后依然无
法区分。
                    表 1.4.1 MMSeg 算法规则 4 实例
           编号            Chunk        长度          平均长度              方差
           1        主要/是/因为           5           5/3               0.4714
           2        主/要是/因为           5           5/3               0.4714
  两个句子都有一个单字单词和一个双字单词,哪个更正确呢。在这里我们把焦点集
中在单字单词上。中国汉字的语素自由度不同,一些很少使用的汉字被用作自由语素,
但其它汉字则有较大的自由度。一个汉字的出现频率可以作为它的语素自由度的索引。

                                                                             - 10 -
毕业设计(论文)报告纸
      一个高频率的汉字更可能是一个单字单词,反之亦然。
        编号 1 的 Chunk 中,“是”的词频比“主”肯定高,因而“是”的自由语素度更大,
      所以选择编号 1 的 Chunk 作为这次过滤的结果。

3.3    基于统计的中文分词算法设计
        基于统计的分词算法以统计语言模型(Statistical Language Models)为代表,这是一
      种纯数学方法来处理语言问题,Google 已将这种模型广泛应用于中文分词、机器翻译、
      拼写纠错、汉字输入等应用中,其算法可并行的特点,利用 MapReduce 模型在分布式系
      统上处理速度非常快,非常适合在云计算平台上对海量数据进行精确分词。
3.3.1 语言统计模型分词算法
        假设 S 表示一连串特定顺序排列的词 W1,W2,…,Wn,也就是说,任何一个有意义
      的句子 S,都是由一连串按特定顺序排列的词而组成的。
        于是根据概率公式可以算得一个句子在任意文本中出现的概率为:

        P  S   P W1  P W2 | W1  P W3 | W1W2   P (Wn | W1W2 Wn 1 )

        其中 S 是由 W1W2…Wn 组成的句子,P(S)是句子 S 在文本中出现的概率,P(Wi)是词
      语 Wi 在文本中出现的概率,P(Wk|Wi…Wj)是 Wi…Wj 词汇依次出现后,Wk 词汇出现的概
      率。不难看出,到了词 Wn,它的出现概率取决于它前面所有词。
        从计算上来看,各种可能性太多,无法实现。因此我们假定任意一个词 Wi 的出现概
      率只同它前面一个词 Wi-1 有关(即马尔可夫假设),于是问题就变得很简单了。
        基于马尔可夫假设,S 出现的概率就变为:

        P  S   P W1  P W2 | W1  P W3 | W2   P (Wn | Wn 1 )

        这样计算起来就变得非常简单,如果希望考虑更高的关联性,也可以增加一个前向
      关联词汇,即向前再关联一个词汇,但通常这样做的意义不大。
        接下来的问题就是如何估算 P(Wi|Wi-1),只要有了大量随机读文本后,这个问题变得
      很简单,只要计算这对词(Wi-1,Wi)在统计的文本中出现了多少次,以及 Wi-1 本身在同样的
      文本中前后相邻出现了多少次,然后用两个数一除就可以了:

        P Wi | Wi 1   P Wi 1 , Wi  / P Wi 1 

        当我们分词的时候,每读到一个词 Wi,就去预先算好的统计信息数据库中读取 P(Wi),


                                                                                  - 11 -
毕业设计(论文)报告纸
      再继续向文本后读一个词 Wj ,然后从数据库中读取 P(Wi,Wj),再计算出 P(Wj|Wi) =
      P(Wi,Wj)/P(Wi)。比较 P(Wj|Wi)和 P(Wi),看哪个大,如果 P(Wi)大,那么应该吧 Wi,Wj
      单独拆出,如果 P(Wj|Wi)大,那么应该把 WiWj 作为一个词。
         例如,假设“中华”一词在文本中出现的概率为 P(中华)=0.0008,“人民”一词在文
      本 中 出 现 的 概 率 为 P( 人 民 )=0.0012 , 而 P( 中 华 人 民 )=0.000015 , 可 得 P( 人 民 | 中
      华)=0.000015/0.0008= 0.01875,远大于 P(中华)和 P(人民),于是“中华人民”暂时作为一
      个词,后面又读到“共和国”这个词,查得 P(共和国)=0.00003,(人民共和国)
                                         P      =0.000008,
      可得 P(共和国|人民)=0.000008/0.00003= 0.267,远大于 P(人民)和 P(共和国),于是“人民
      共和国”是一个词,组合前面的“中华人民”,得到“中华人民共和国”。
         可见,统计模型会使匹配的结果符合人们普遍的口语习惯的,新词出现的多了,频
      率高了以后,就会作为新词被算法直接识别,所以分词的结果的准确性要高。

3.4     混合处理的中文分词算法设计
         基于规则的分词算法实现简单,但准确度不如基于统计的分词算法高;基于统计的
      分词算法虽然准确度很高,但是算法复杂度较基于规则分词高。于是我们可以综合两种
      算法的优点,先用基于规则的分词算法,分出多种备选的分词组合,然后利用统计分词
      算法判定最终选择哪个组合,可以有效的降低统计分词算法的运算量,同时获得较好的
      分词准确性。
3.4.1 结合规则分词与统计分词的综合分词算法
         首先基于 MMSeg 算法的规则,然后将规则 4 修改为用语言统计模型来判断概率,选
      择最高概率的分词方式,这样就可以避免 MMSeg 算法应用完所有规则后依然有多个
      Chunk 的异常。
                             表 2.1 综合分词算法处理规则

                   编号                       描述

                   规则1          最大匹配(Maximum matching)

                   规则2     最大平均词长(Largest average word length)

                   规则3   词长的方差最小(Smallest variance of word lengths)

                   规则4           分词组合下句子出现概率最高

         算法流程如图 2.1 所示。

                                                                            - 12 -
毕业设计(论文)报告纸




                  图 2.1 综合分词算法的分词处理流程

  例如出现了上文中 MMSeg 算法应用规则 3 后依然有方差一致的情况,就可以利用语
言统计模型处理。
                       表 2.2 综合分词算法实例
   编号     Chunk   长度    平均长度   方差            P(S)
   1    主要/是/因为   5     5/3    0.4714 P(主要)P(是|主要)P(因为|是)
   2    主/要是/因为   5     5/3    0.4714 P(主)P(要是|主)P(因为|要是)
  遇到这种情况后,查询语料统计信息数据库,获取 P(主要),P(是|主要),P(因为|是),
P(主),P(要是|主),P(因为|要是)的统计值,然后分别计算
  P(主要/是/因为)=P(主要)P(是|主要)P(因为|是)
  P(主/要是/因为)=P(主)P(要是|主)P(因为|要是)
  取其中值大的一个作为最终的分词结果。




                                                            - 13 -
毕业设计(论文)报告纸




                                第四章 中文分词算法的实现


4.1    MMSeg 分词算法实现
        MMSeg 算法的实现,主要就是实现其核心的四条规则,需要计算的内容分别是:每
      个 Chunk 的长度,每个 Chunk 的平均词条长度,每个 Chunk 的方差,以及每个 Chunk 的
      自由语素度之和。
4.1.1 每个 Chunk 的长度计算
        每个 Chunk 的长度即是 Chunk 中个各个词的长度之和,所以计算公式为
         Length  Chunk                        Length Words i 
                               Word [ i ]Chunk


        代码实现如下:
        int getLength() {
             int length = 0;
             for (int i = 0; i < words.length; ++i) {
                  length += words[i].getLength();
            }
             return length;
        }
4.1.2 每个 Chunk 的平均词长度
        每个 Chunk 的平均词长度即是 Chunk 中个各个词的长度总和除以词数,等到平均每
      个词的长度,所以计算公式为

                          Length(Chunk )
         Avg (Chunk ) 
                          Length(Words )

        代码实现如下:
        double getAverageLength() {
             double averageLength = (double) getLength() / (double) words.length;


                                                                                    - 14 -
毕业设计(论文)报告纸
           return averageLength;
       }
4.1.3 每个 Chunk 的方差
       每个 Chunk 的方差即是 Chunk 中词长的标准差平方,用各个词条的长度减去平均长
  度的差的平方的和,再除以词条数目,所以计算公式为
                          Length (Words )
       Var (Chunk )  (        
                               i 0
                                            (Words[i ]  Avg (Chunk )) 2 ) / Length(Words )

       代码实现如下:
       double getVariance() {
           double tempVariance = 0.0;
           for (int i = 0; i < words.length; ++i) {
                double temp = (double)words[i].getLength()-getAverageLength();
                tempVariance += temp * temp;
            }
            double variance = Math.sqrt(tempVariance / (double) words.length);
            return variance;
   }
4.1.4 每个 Chunk 的自由语素度之和
       每个 Chunk 的自由语素度之和即是 Chunk 中每个单子词条词频的对数之和,所以计
  算公式为
       DMF (Chunk )                        
                        Words[ i ]Chunk  Length (Words[ i ]) 1
                                                                    log( Frequency (Words[i]))

       代码实现如下:
       double getDegreeOfMorphemicFreedom() {
           double degreeMorphemicFreedom = 0D;
           for (int i = 0; i < words.length; ++i) {
                if (words[i].getLength() == 1) {
                     degreeMorphemicFreedom +=
                     Math.log((double) words[i].getFrequency());


                                                                                                 - 15 -
毕业设计(论文)报告纸
                    }
          }
          return degreeMorphemicFreedom;
      }

4.2       语言统计模型分词算法实现
          语言统计模型算法的实现,主要分为两个部分,预处理统计信息和分词部分。预处
  理统计信息部分需要一个语料库,语料库中存储了大量的高质量领域文本,程序首先读
  取这个语料库,分析出需要的统计信息,存入统计信息数据库。分词部分从统计信息数
  据库读取统计信息,用于分词的时候运算分词需要的概率值。
4.2.1 预处理统计信息
          预处理统计信息需要分为两个步骤,
          (1)采集领域文本,这个过程一般采用网络爬虫来完成,在选择的领域网站内抓取
  大量文本,存入语料库。
          (2)计算统计信息,统计信息主要是词条在文本中出现的概率。
          如何计算出词条的概率,计算哪些词条的频率?如果预置词库,统计固定的词条频
  率,那么遇到新词就会比较难处理,所以需要一个方法来避免使用词库,纯粹从文本中
  挖掘出词条。
          于是,可以使用迭代的方法处理,
          (1)假设每个字都是一个词,统计出语料库中每个单字及其与后一个字组成的词条
  的频率。
          (2)重新对语料库做第二遍分析,这一次利用前一次计算出来的频率,可以计算出
  一部分两个字的词条。
          (3)这个过程可以反复迭代,不断从文本中挖掘新词,挖掘更长的词。
          算法实现的伪代码:
          void firstAnalyze() {
               // 采集每个字及其与后一个字组成词条出现的次数
               while ( 语料库还未分析完 ) {
                    string text = getPageFromDB; //从语料库中抓出一篇文章


                                                                 - 16 -
毕业设计(论文)报告纸
              for (int i=0; i < text.Length()-1; ++i) {
                   ++counts[text[i]]; //把读到的词计数加 1
                   markAsWord(text[i]); // 将单个字标识为词
                   ++counts[text[i]+text[i+1]]; //将当前的字与后一个字组成的字串加入计
数器
              }
         }
         foreach (word in counts) {
              p[word] = counts[word] / DB.AllWordNumber; //计算每个词条出现的频率
         }
         DB.Store(p); //将第一次统计的信息存入数据库
     }


     void loopAnalyze() {
         // 采集每个词出现的次数
         while ( 语料库还未分析完 ) {
              string text = getPageFromDB; //从语料库中抓出一篇文章
              vector<string> words = SplitTextToWords(text); //将文章按词库最长匹配分词
              // 依赖前一次的结果,挖掘新词
              for (int i=0; i < words.Length()-1; ++i) {
                   // 如果连续两个词组成的字串比当前的词频率高,
                   // 标记这个字串为词并加入计数器
                   if (p[words[i]+word[i+1]] / p[words[i]] > p[words[i]]) {
                        markedAsWord(words[i]+words[i+1])
                        ++count[words[i]+words[i+1]];
                   }
              }
         }
         foreach (word in counts) {
                                                                              - 17 -
毕业设计(论文)报告纸
              p[word] = counts[word] / DB.AllWordNumber; //计算每个词出现的频率
         }
         DB.Store(p); //将第一次统计的信息存入数据库
     }
4.2.2 分词处理
     有了预处理的统计信息,分词就非常简单了。
     (1)首先将要分词的句子打散为任何可能的组合方式,例如 S 可以分为(A1,A2…An),
  也可以分成(B1,B2…Bn)等等。
     (2)然后将每种分词方式都根据统计信息计算 P(S),认为 P(S)最大的就是最后的分
  词结果
     伪代码如下:
     void segmentWords() {
         // 将句子拆分为任意分词组合
         vector<vecotor<string> > sentences = SplitSentenceToWords(Sentence);
         psmax = 0;
         // 根据统计信息处理每个分词组合
         foreach words in sentences {
              // 对每个分词组合计算 P(S)
              ps[words] = p[words[0]];
              for (int i=1; i < words.Length(); ++i) {
                  ps[words] += p[words[i-1]+words[i]] / p[words[i-1]];
              }
              if (ps[words] > maxps) {
                   result = words;
                   psmax = ps[words];
              }
          }
          print result; // 选择 P(S)最大的分词结果输出
     }
                                                                                - 18 -
毕业设计(论文)报告纸
      但是这种枚举分词结果然后判断的方法,是非常消耗资源的,这里面有一个实现的
  技巧,如果我们穷举所有可能的分词方法并计算出每种可能性下句子的概率,那么计算
  量是相当大的。因此,我们可以把它看成是一个动态规划(Dynamic Programming) 的问
  题,并利用 HMM 的 Viterbi 算法快速地找到最佳分词。
      除此之外,还有一个更好的优化方法,就是抛弃枚举,采用增量识别的方法,每次
  从文本中读取一个字,记为 Wi,然后读取下一个字 Wi+1,然后计算 P(Wi+1|Wi),只要
  P(Wi+1|Wi)>P(Wi),就认为 P(Wi+1|Wi)比 P(Wi)更合适作为一个词,然后用 WiWi+1 再加入
  Wi+2 判断,直到无法满足 P(Wk+1|Wk)>P(Wk)时,认为 Wi..Wk 就是一个词,然后开始下一
  个词的识别,直到把句子 S 读完。

4.3   综合分词算法实现
      综合分词算法就是结合上述两种算法的各一部分,词库利用语言统计模型算法在预
  处理统计信息阶段生成的词组成,然后利用 MMSeg 算法的前三个规则对句子进行分词,
  得到的多个结果,再利用统计语言模型分词算法的分词部分,分别计算出 P(S),取大的
  一个作为结果。

4.4   综合分词算法与 MySQL 数据库的实现
      综合分词算法同时具备统计语言模型算法的准确性和 MMSeg 算法的简易性,配合
  MapReduce 模型的并行化,在服务器端运行预处理统计信息,将统计信息分发到各个客
  户端,与 MySQL 数据库结合,可以实现数据库层的高效分词,适合云计算发展趋势下的
  分布式分词需求。
      MySQL 的 MyISAM 引擎内置了全文索引(FullText),我们只需要重载 FullText 的分
  词解析部分即可让 FullText 支持中文分词。
      首先编写 MMSeg 算法和语言统计模型的分词部分算法,提供好外部调用接口,然后
  在 MySQL Server 端实现调用分词接口的 UDF
                              (用户自定义函数) 然后作为插件 Plugin)
                                       ,      (
  载入 MySQL,在定义表结构时,只需要使用“WITH PARSER 自定义函数名”即可重载
  FullText 索引。
      语言统计模型算法的预处理部分,可以并行的跑在云计算平台(例如 Google App
  Engine) 通过 MapReduce 模型,
         ,                首先将统计任务拆分,例如一组文章给一个 Job 去运行,
  每个 Job 统计完以后,再依次归并所有 Job 的统计结果,新的结果被分发到每个 MySQL

                                                            - 19 -
毕业设计(论文)报告纸
服务器端,客户端连接 MySQL 使用全文索引查询,就可以通过 UDF 自动的调用中文分
词算法了。




                  图 3.1 MySQL 全文索引添加中文分词支持的架构

  实际测试的结果:
  (1)在 MySQL 中加载插件,INSTALL PLUGIN plx_parser SONAME 'libmysqlft.so';
  (2)建立测试表,CREATE TABLE `test` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(200) DEFAULT NULL,
  `body` mediumtext,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `ft_utf8` (`title`,`body`) WITH PARSER plx_parser
  ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  (3)载入测试数据。
  (4)测试中文 FullText 索引,见图 3.2。




                                                                   - 20 -
毕业设计(论文)报告纸




         图 3.2 MySQL 支持中文的 FullText 全文索引测试结果

(5)测试分词效果,见图 3.3。




                                               - 21 -
毕业设计(论文)报告纸




图 3.3 MySQL 中通过 UDF 添加的分词函数分词效果




                                  - 22 -
毕业设计(论文)报告纸




                     第五章    总结


5.1   工作总结
      基于统计的分词和基于规则的分词算法实现不是一个新兴的课题,但是将它们与数据库
结合起来,还是非常有价值的东西。对我来讲,几个月来一边工作实习,一边将工作与毕设
结合起来,紧张而又有条不紊的进行毕业设计,使我对计算机专业的基本理论、专业知识和
基本技术有了更深入的了解和体会,使我在四年中所学到的知识得到了系统的总结,真正达
到了学以致用, 特别是对概率论和算法设计有了深深的体会。
      本毕业设计工作所取得的结论主要有以下几个方面:
      (1)在做算法设计之前,需要对算法的核心进行有效性验证,避免程序已经完成大部分
的时候,发现算法的指标达不到要求。在验证算法核心的时候,当发现某些指标达不到要求
时,需要立刻研究解决的办法,如果无法解决,应该及时的更换算法,靠编程技巧的优化无
法给整个程序效率带来数量级的提升,只有算法的优化才可能带来数量级的优化。
      (2)对于程序架构的设计应该尽可能减少层次,程序调用的层次越多,程序越容易出现
问题,更改代码的时候也容易牵一发而动全身,不利于代码重构。程序的结构应该尽可能的
扁平化,实现“高内聚、低耦合”,使程序的调用结构尽可能呈“扇形”结构。
      (3)统计模型算法服务器端预处理统计信息部分的开发,第一次在分布式环境下进行编
程,这与单机编程有很大的不同。每个 Worker 可能运行在不同的机器上,如果使用全局变量,
那么 Worker 程序就会得不到全局变量,因为内存地址已经不一样了,参数的传递必须靠实参
的方式传递,不能使用任何显式或隐式的地址传递数据。所以编译调试的时候经常会出现单
机调试通过,传到分布式平台去运行就报内存错误或程序 Crash 的情况,后来所有的参数传
递全部通过 stringstrem 来序列化到一个 string 对象,然后将对象的数据全部传走,子程序接
收到以后再通过 stringstrem 反解析出来,就没有再出现问题。同时多个任务并行跑的时候,
某些任务跑完了需要归并任务结果,这里需要非常的注意效率问题,如果大量任务同时开始,
容易出现集中结束的峰值,那么会出现归并操作的峰值,很可能导致集群 Crash,需要慢慢的
依次开始任务,让归并操作一直在进行,将压力分散开来,像流水线一样。这是非常有价值

                                                  - 23 -
毕业设计(论文)报告纸
的经验。

5.2   各种分词算法的优劣比较
      经过上面的比较和实践,我们可以对三种分词算法给出如下的比较。
                  表 4.1 各种分词算法优劣比较
          分词算法   基于规则的分词   基于理解的分词   基于统计的分词
          歧义识别     较差        很好        较好
          新词识别     很差        很好        好
          需要词典     需要       不需要       不需要
         需要语料库      否         否         是
         需要规则库      否         是         否
         算法复杂性     简单        很难        一般
         技术成熟度     成熟       不成熟       较成熟
          实施难度     容易        很难        一般
         分词准确性     一般        准确        较准
          分词速度     快         慢         较快

5.3   分词算法发展展望
      经过上面的分析可以看出,目前基于规则的分词算法已经基本发展到了它所能达到
  的最高水平,对于歧义的处理、新词的处理,基于规则的分词算法基本无能为力,从目
  前的发展来看,无法通过添加有限的规则来实现这些功能。
      基于理解的分词算法,依赖于语义分析技术的发展,目前语义分析方面的研究进展
  缓慢,短时间内很难有大的突破。
      基于统计的分词算法,是目前分词技术发展的主流,算法虽然简单,但十分有效,
  在新词处理、歧义处理上,有非常好的效果,但其算法复杂度较高,没有强大计算集群
  的情况下,很难及时的获取到精确的统计信息,结合基于规则的分词算法,减少基于统
  计的分词算法的计算量,是有效解决统计算法复杂度高的有效途径。




                                               - 24 -
毕业设计(论文)报告纸


                                             参 考 文 献
[1] Kenneth H.Rosen 著, 袁崇义;屈婉玲;王捍贫;刘田 译. 离散数学及其应用 [M]. 原书第 5 版,北京: 机
     械工业出版社, 2007. 637~644.
[2] 威廉·费勒 著, 胡迪鹤 译. 概率论及其应用[M]. 第 3 版, 北京:人民邮电出版社, 2006.
[3] 傅祖芸. 信息论基础[M]. 北京: 电子工业出版社,1989.
[4] 郭进. 统计语言模型及汉语音字转换的一些新结果[J]. 中文信息学报,1993,7(1)                                                 :18~27.
[5] 郑延斌. 书面汉语自动分词及歧义分析[J]. 河南师范大学学报: 自然科学版,1997,25(4)                                                   :90~93.
[6] 梁南元. 书面汉语自动分词系统—CDWS[J] . 中文信息学报,1987,1(2)                                         ,101~106.
[7] 俞士汶. 中文输入中语法分析技术的应用. 中文信息学报,1988,2(3)                                           :20~26.
[8] 黄昌宁. 计语言模型能做什么[J] . 语言文字应用,2002, :77~84.                       (1)
[9] 曾华琳等. 一种基于提取上下文信息的分词算法[J]. 2005,25(9)                                   :2025~2027.
[10] 刘春辉等. 基于优化最大匹配与统计结合的汉语分词方法[J]. 燕山大学学报,2009,33(2)-.
[11] 胡军成. 面向语言的程序设计在中文信息处理中的应用[J]. 中国科教创新导刊,2007,                                                  (12)  :2~3.
[12] 刘迁;贾惠波. 中文信息处理中自动分词技术的研究与展望[J]. 计算机工程与应,                                               2006, (3) 175~177.
                                                                                                   42    :
[13] Guo, J. Critical tokenization and its properties[J]. Computational Linguistics, 1997, 23(4): 569~59.
[14] Sun,M.S.,Shen D.Y.,et Chinese word segmentation without using lexicon and hand-crafted training data[C].
     Proceedings of the 17th international conference on Computational linguistics, 1998, 2: 1265~1271.
[15] 高军. 汉语语言模型的研究与应用[D]. 北京:北京邮电大学博士学位论文,1998.
[16] Tsai, C. H. (2000). MMSEG: A Word Identification System for Mandarin Chinese Text Based on Two
     Variants of the Maximum Matching Algorithm [On- line]. Available: http://technology.chtsai.org/mmseg/
[17] 吴军. http://www.google.cn/ggblog/googlechinablog/2006/04/blog-post_7327.html
[18] 吴军. http://www.google.cn/ggblog/googlechinablog/2006/04/blog-post_2507.html
[19] 吴军. http://www.google.cn/ggblog/googlechinablog/2006/04/blog-post_1583.html
[20] 吴军. http://www.google.cn/ggblog/googlechinablog/2006/05/blog-post_2403.html
[21] 李冰. http://blog.googlefans.net/post/30.html
[22] 李沫南. http://www.coreseek.com/opensource/mmseg/
[23] 刀剑笑. http://blog.csdn.net/jyz3051/archive/2008/11/02/3202431.aspx
[24] 大众点评. http://it.dianping.com/segmentation-algorithm-compare.htm




                                                                                                          - 25 -
毕业设计(论文)报告纸


                 致   谢


  这次毕业设计可以圆满地完成,得到了指导老师的指导与大力支持。在此特别感谢徐敏
老师的大力帮助。指导老师的悉心指导和大力支持,在总体结构、功能的把握上给予了非常
大的帮助。同时感谢徐敏老师的硕士生褚一帆,在毕业设计过程中,给我提供了非常好的设
计参考文献,并对我在编程、算法设计等细节工作上给予了耐心的指导,对于顺利完成这次
毕业设计起到了关键性的作用。
  此次毕业设计对提高我的编程能力、算法设计等方面都有很大帮助。还要感谢我的母校
——南京航空航天大学,以及在这里四年生活中给予我关心和帮助的老师和同学,以及我们
宿舍的全体成员,我们在一起经过了整个大学的生活。
  转眼间,大学生活即将结束,回首过去四年的大学生活,真是有苦也有乐,然而更多的
则是收获,感谢母校的各位老师不但无私地传授给我们知识,也教会了我们如何做人。虽然
我们专业的毕业设计任务繁重,但正是在这几个月紧张而充实的设计中,我感到自己的知识
得到了一次升华,我相信:我的毕业设计会给我的四年大学画上一个圆满的句号。
  现代科学技术的飞速发展,改变了世界,也改变了我们的生活。作为新世纪的大学生,
应当站在世界的发展前列,掌握现代科学技术知识,调整自己的知识结构和能力结构,以适
应社会发展的要求。新世纪需要具有丰富的现代科学知识、能够独立解决面临的任务、有创
新意识的新型人才。




                                       - 26 -

More Related Content

Viewers also liked

Slayter Untangling Adoption Disparities For Children With Disabilities
Slayter   Untangling Adoption Disparities For Children With DisabilitiesSlayter   Untangling Adoption Disparities For Children With Disabilities
Slayter Untangling Adoption Disparities For Children With DisabilitiesElspeth Slayter
 
Portfolio Sandra Vargas
Portfolio Sandra VargasPortfolio Sandra Vargas
Portfolio Sandra VargasSandra Vargas
 
FLOOR DEPOT CSR
FLOOR DEPOT CSRFLOOR DEPOT CSR
FLOOR DEPOT CSRaylwin
 
对简易几何机械化证明的进一步研究
对简易几何机械化证明的进一步研究对简易几何机械化证明的进一步研究
对简易几何机械化证明的进一步研究Lixun Peng
 
AP Notes Sept 2 2009
AP Notes Sept 2 2009AP Notes Sept 2 2009
AP Notes Sept 2 2009msmckennna
 
Scotland Invitation
Scotland InvitationScotland Invitation
Scotland InvitationAlan Bassett
 
Slayter - Training on reframing disability (In Russian)
Slayter - Training on reframing disability (In Russian)Slayter - Training on reframing disability (In Russian)
Slayter - Training on reframing disability (In Russian)Elspeth Slayter
 
Presentazione Sito
Presentazione SitoPresentazione Sito
Presentazione SitoSpiegaLeAli
 
DB_Algorithm_and_Data_Structure_About_BTree
DB_Algorithm_and_Data_Structure_About_BTreeDB_Algorithm_and_Data_Structure_About_BTree
DB_Algorithm_and_Data_Structure_About_BTreeLixun Peng
 
Google docs cgiar
Google docs cgiarGoogle docs cgiar
Google docs cgiarpbrolley
 
Sales Team
Sales  TeamSales  Team
Sales Teamaylwin
 
Kelly Ruggles | American Reliance Group
Kelly Ruggles | American Reliance GroupKelly Ruggles | American Reliance Group
Kelly Ruggles | American Reliance GroupKelly Ruggles
 
Accrediting informal learning for professional development at London Metropol...
Accrediting informal learning for professional development at London Metropol...Accrediting informal learning for professional development at London Metropol...
Accrediting informal learning for professional development at London Metropol...Brightwave Group
 
Laura Overton on Planning for success (e-learning) | www.brightwave.co.uk
Laura Overton on Planning for success (e-learning) | www.brightwave.co.ukLaura Overton on Planning for success (e-learning) | www.brightwave.co.uk
Laura Overton on Planning for success (e-learning) | www.brightwave.co.ukBrightwave Group
 

Viewers also liked (18)

Slayter Untangling Adoption Disparities For Children With Disabilities
Slayter   Untangling Adoption Disparities For Children With DisabilitiesSlayter   Untangling Adoption Disparities For Children With Disabilities
Slayter Untangling Adoption Disparities For Children With Disabilities
 
R3 l+ module slides draft
R3 l+ module slides draftR3 l+ module slides draft
R3 l+ module slides draft
 
Portfolio Sandra Vargas
Portfolio Sandra VargasPortfolio Sandra Vargas
Portfolio Sandra Vargas
 
Kelly ruggles
Kelly rugglesKelly ruggles
Kelly ruggles
 
Kelly c.ruggles
Kelly c.rugglesKelly c.ruggles
Kelly c.ruggles
 
FLOOR DEPOT CSR
FLOOR DEPOT CSRFLOOR DEPOT CSR
FLOOR DEPOT CSR
 
对简易几何机械化证明的进一步研究
对简易几何机械化证明的进一步研究对简易几何机械化证明的进一步研究
对简易几何机械化证明的进一步研究
 
AP Notes Sept 2 2009
AP Notes Sept 2 2009AP Notes Sept 2 2009
AP Notes Sept 2 2009
 
Scotland Invitation
Scotland InvitationScotland Invitation
Scotland Invitation
 
Slayter - Training on reframing disability (In Russian)
Slayter - Training on reframing disability (In Russian)Slayter - Training on reframing disability (In Russian)
Slayter - Training on reframing disability (In Russian)
 
Presentazione Sito
Presentazione SitoPresentazione Sito
Presentazione Sito
 
DB_Algorithm_and_Data_Structure_About_BTree
DB_Algorithm_and_Data_Structure_About_BTreeDB_Algorithm_and_Data_Structure_About_BTree
DB_Algorithm_and_Data_Structure_About_BTree
 
Google docs cgiar
Google docs cgiarGoogle docs cgiar
Google docs cgiar
 
Sales Team
Sales  TeamSales  Team
Sales Team
 
Kelly Ruggles | American Reliance Group
Kelly Ruggles | American Reliance GroupKelly Ruggles | American Reliance Group
Kelly Ruggles | American Reliance Group
 
Accrediting informal learning for professional development at London Metropol...
Accrediting informal learning for professional development at London Metropol...Accrediting informal learning for professional development at London Metropol...
Accrediting informal learning for professional development at London Metropol...
 
Laura Overton on Planning for success (e-learning) | www.brightwave.co.uk
Laura Overton on Planning for success (e-learning) | www.brightwave.co.ukLaura Overton on Planning for success (e-learning) | www.brightwave.co.uk
Laura Overton on Planning for success (e-learning) | www.brightwave.co.uk
 
Making Learning Alive
Making Learning Alive Making Learning Alive
Making Learning Alive
 

More from Lixun Peng

Double Sync Replication
Double Sync ReplicationDouble Sync Replication
Double Sync ReplicationLixun Peng
 
MySQL新技术探索与实践
MySQL新技术探索与实践MySQL新技术探索与实践
MySQL新技术探索与实践Lixun Peng
 
阿里云RDS for MySQL的若干优化
阿里云RDS for MySQL的若干优化阿里云RDS for MySQL的若干优化
阿里云RDS for MySQL的若干优化Lixun Peng
 
DoubleBinlog方案
DoubleBinlog方案DoubleBinlog方案
DoubleBinlog方案Lixun Peng
 
Alibaba patches in MariaDB
Alibaba patches in MariaDBAlibaba patches in MariaDB
Alibaba patches in MariaDBLixun Peng
 
MySQL优化、新特性和新架构 彭立勋
MySQL优化、新特性和新架构 彭立勋MySQL优化、新特性和新架构 彭立勋
MySQL优化、新特性和新架构 彭立勋Lixun Peng
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结Lixun Peng
 
对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现Lixun Peng
 
MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)Lixun Peng
 
Performance of fractal tree databases
Performance of fractal tree databasesPerformance of fractal tree databases
Performance of fractal tree databasesLixun Peng
 
MySQL新技术探索与实践
MySQL新技术探索与实践MySQL新技术探索与实践
MySQL新技术探索与实践Lixun Peng
 
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复Lixun Peng
 
MySQL源码分析.02.Handler API
MySQL源码分析.02.Handler APIMySQL源码分析.02.Handler API
MySQL源码分析.02.Handler APILixun Peng
 
MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程Lixun Peng
 
内部MySQL培训.3.基本原理
内部MySQL培训.3.基本原理内部MySQL培训.3.基本原理
内部MySQL培训.3.基本原理Lixun Peng
 
内部MySQL培训.2.高级应用
内部MySQL培训.2.高级应用内部MySQL培训.2.高级应用
内部MySQL培训.2.高级应用Lixun Peng
 
内部MySQL培训.1.基础技能
内部MySQL培训.1.基础技能内部MySQL培训.1.基础技能
内部MySQL培训.1.基础技能Lixun Peng
 
A binary graphics recognition algorithm based on fitting function
A binary graphics recognition algorithm based on fitting functionA binary graphics recognition algorithm based on fitting function
A binary graphics recognition algorithm based on fitting functionLixun Peng
 
一种基于拟合函数的图形识别算法
一种基于拟合函数的图形识别算法一种基于拟合函数的图形识别算法
一种基于拟合函数的图形识别算法Lixun Peng
 

More from Lixun Peng (20)

Double Sync Replication
Double Sync ReplicationDouble Sync Replication
Double Sync Replication
 
MySQL新技术探索与实践
MySQL新技术探索与实践MySQL新技术探索与实践
MySQL新技术探索与实践
 
阿里云RDS for MySQL的若干优化
阿里云RDS for MySQL的若干优化阿里云RDS for MySQL的若干优化
阿里云RDS for MySQL的若干优化
 
DoubleBinlog方案
DoubleBinlog方案DoubleBinlog方案
DoubleBinlog方案
 
Alibaba patches in MariaDB
Alibaba patches in MariaDBAlibaba patches in MariaDB
Alibaba patches in MariaDB
 
Time Machine
Time MachineTime Machine
Time Machine
 
MySQL优化、新特性和新架构 彭立勋
MySQL优化、新特性和新架构 彭立勋MySQL优化、新特性和新架构 彭立勋
MySQL优化、新特性和新架构 彭立勋
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结
 
对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现
 
MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)
 
Performance of fractal tree databases
Performance of fractal tree databasesPerformance of fractal tree databases
Performance of fractal tree databases
 
MySQL新技术探索与实践
MySQL新技术探索与实践MySQL新技术探索与实践
MySQL新技术探索与实践
 
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
 
MySQL源码分析.02.Handler API
MySQL源码分析.02.Handler APIMySQL源码分析.02.Handler API
MySQL源码分析.02.Handler API
 
MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程
 
内部MySQL培训.3.基本原理
内部MySQL培训.3.基本原理内部MySQL培训.3.基本原理
内部MySQL培训.3.基本原理
 
内部MySQL培训.2.高级应用
内部MySQL培训.2.高级应用内部MySQL培训.2.高级应用
内部MySQL培训.2.高级应用
 
内部MySQL培训.1.基础技能
内部MySQL培训.1.基础技能内部MySQL培训.1.基础技能
内部MySQL培训.1.基础技能
 
A binary graphics recognition algorithm based on fitting function
A binary graphics recognition algorithm based on fitting functionA binary graphics recognition algorithm based on fitting function
A binary graphics recognition algorithm based on fitting function
 
一种基于拟合函数的图形识别算法
一种基于拟合函数的图形识别算法一种基于拟合函数的图形识别算法
一种基于拟合函数的图形识别算法
 

中文分词算法设计

  • 1. 编号 南京航空航天大学 毕业论文 题 目 中文分词算法设计与实现 学生姓名 彭立勋 学 号 040630520 学 院 信息科学与技术学院 专 业 计算机科学与技术 班 级 0406305 指导教师 徐敏 副教授 二〇一〇年六月
  • 2. 南京航空航天大学 本科毕业设计(论文)诚信承诺书 本人郑重声明:所呈交的毕业设计(论文)(题目:中文分词算 法设计与实现)是本人在导师的指导下独立进行研究所取得的成果。 尽本人所知,除了毕业设计(论文)中特别加以标注引用的内容外, 本毕业设计(论文)不包含任何其他个人或集体已经发表或撰写的成 果作品。 作者签名: 2010 年 6 月 6 日 (学号):040630520
  • 3. 毕业设计(论文)报告纸 中文分词算法设计与实现 摘 要 中文分词在计算机实现的重要问题是,中文在书写时并不会显式的给出单词边界,由于 单词是一个基本的语义单位,因此在中文信息分词处理的时候,必须先识别文本中的单词, 以便进行进一步的处理。本文结合作者工作实际分析了目前几种流行的中文分词算法,包括 MMSeg、统计分词算法,比较其各方面优劣和适用场景,并结合实际应用,给出利用 MySQL 的 UDF(User Defined Function,用户自定义函数)和插件机制,实现 MySQL FullText 索引 支持中文分词的方法。 关键词:中文分词,语言统计模型,MMSeg,MySQL i
  • 4. 毕业设计(论文)报告纸 Chinese Segmentation Algorithm Design and Implementation Abstract An important problem in computational analysis of Chinese text is that there are no word boundaries in conventionally printed text. Since the word is a fundamental linguistic unit, it is necessary to identify words in Chinese text so that higher-level analyses can be performed. This article is based on the analysis of the current practice of several popular Chinese segmentation algorithms, including MMSEG and statistical segmentation algorithm. By comparing their good point, weak point, and application scene, and by combing with actual application, UDF of MySQL(User Defined Function) and plugin mechanisms, the MySQL FullText index supporting the Chinese word segmentation method has been realized. Key Words: Chinese word segmentation; Statistical language models; MMSeg; MySQL ii
  • 5. 毕业设计(论文)报告纸 目 录 摘 要 ....................................................................... i Abstract ..................................................................... ii 目 录 ...................................................................... iii 第一章 引 言 ................................................................ 1 1.1 分词介绍.............................................................. 1 1.1.1 西方语言分词 ..................................................... 1 1.1.2 东方语言分词 ..................................................... 1 1.2 中文分词的特点........................................................ 1 1.3 中文分词的作用........................................................ 2 1.3 中文分词的应用........................................................ 2 第二章 中文分词相关算法介绍 .................................................. 4 2.1 中文分词算法分类...................................................... 4 2.1.1 基于理解(语义)的分词 ........................................... 4 2.1.2 基于规则(字符串匹配)的分词 ..................................... 4 2.1.3 基于统计的分词 ................................................... 4 2.2 中文分词算法优劣指标.................................................. 5 2.2.1 歧义识别 ......................................................... 5 2.2.2 新词识别 ......................................................... 5 2.2.3 是否需要附加库 ................................................... 5 2.2.4 算法复杂度 ....................................................... 5 2.2.5 技术成熟度 ....................................................... 5 2.2.6 实施复杂性 ....................................................... 5 2.2.7 分词准确性 ....................................................... 6 第三章 中文分词算法的设计 .................................................... 7 3.1 基于理解的中文分词算法设计............................................ 7 3.2 基于规则的中文分词算法设计............................................ 7 3.2.1 MMSeg 分词算法.................................................... 7 3.3 基于统计的中文分词算法设计........................................... 11 3.3.1 语言统计模型分词算法 ............................................ 11 iii
  • 6. 毕业设计(论文)报告纸 3.4 混合处理的中文分词算法设计........................................... 12 3.4.1 结合规则分词与统计分词的综合分词算法 ............................ 12 第四章 中文分词算法的实现 ................................................... 14 4.1 MMSeg 分词算法实现 ................................................... 14 4.1.1 每个 Chunk 的长度计算 ............................................ 14 4.1.2 每个 Chunk 的平均词长度 .......................................... 14 4.1.3 每个 Chunk 的方差 ................................................ 15 4.1.4 每个 Chunk 的自由语素度之和 ...................................... 15 4.2 语言统计模型分词算法实现............................................. 16 4.2.1 预处理统计信息 .................................................. 16 4.2.2 分词处理 ........................................................ 18 4.3 综合分词算法实现..................................................... 19 4.4 综合分词算法与 MySQL 数据库的实现..................................... 19 第五章 总结 ................................................................. 23 5.1 工作总结............................................................. 23 5.2 各种分词算法的优劣比较............................................... 24 5.3 分词算法发展展望..................................................... 24 参 考 文 献 .................................................................. 25 致 谢 .................................................................... 26  iv
  • 7. 毕业设计(论文)报告纸 第一章 引 言 1.1 分词介绍 词语是语言的基本组成单位,分词就是将一段文本中具有独立含义的词条拆分开来, 这是对语言信息处理的基础。在不同的语系中,由于语言习惯的差异,对“词”的定义 不一样,文本中词的边界标识也不一样。在大部分西方语言中,一个由字母组成的字串 即被认为是一个单词,词与词之间用空格分开。而在很多东方语系中,例如中文、日文、 韩文等,若干个独立的字组成的一个具有独立含义的字串被认为是词,并且书写时,词 与词之间没有明显的边界。 1.1.1 西方语言分词 在大部分西方语系中,每一个由字母组成的单词就具有独立含义,所以基本上都认 为由空格分开的字串即为单词,于是分词的方法也极为简单,把一个句子中的字串按空 格分开,得到的一组字串,就是分词的结果。例如 MySQL 数据库 MyISAM 存储引擎的 FullText 全文索引(只支持西方语言)就是采用的这种方式分词建立倒排索引。 1.1.2 东方语言分词 与西方语言不同,大部分东方语言,词语是由基本的单个文字组成的,某些单字也 可能是一个独立的词,大部分词由两个以上的字组成,另外句子之中也没有明显的分隔 符(例如空格)作为词的边界,于是对东方语言的分词处理就相对复杂。 东方语言大都存在一字多义,一词多义的现象,需要联系上下文才能正确的分出词 汇,甚至可能联系上下文,都会因为个人习惯不同,而不同人之间有不同的分词结果。 因而东方语言的分词需要考虑更多的内容进行判断,例如人为定义的语言规则、基于大 量文本的统计结果等等,甚至需要引入语义分析。 1.2 中文分词的特点 中文与大部分东方语言一样,存在一些特殊的性质: (1)语义丰富、一词多义的现象非常普遍。 -1-
  • 8. 毕业设计(论文)报告纸 (2)句子时常存在歧义,经常可以有多种分词方式,甚至可能都能合理的表达一个 语义,甚至有时人都需要通过上下文理解,才能正确的分词; (3)存在口语化的语言习惯,难以定义出一套统一的语法来适合所有能被人理解的 文本; (4)新增词汇多,需要词库的分词算法如果不及时更新词库,就会无法识别出新词, 导致分词的结果准确性下降。 由于这些特点,中文分词的难度较西方语言大得多。 1.3 中文分词的作用 要想说清楚分词的意义和作用,就要提到人工智能(AI)技术。人工智能技术涉及 的学科包括物理学、数学、计算机科学、电子机械、通讯、生理学、进化理论和心理学 等等。简单的说,人工智能就是让机器具备人类一样的智能,能像人类一样的思考。要 想实现这样的一个目标,就必须让机器理解人类的语言,只有机器理解了人类的语言文 字,才使得人与机器的交流成为可能。再反观我们人类的语言中, “词是最小的能够独立 活动的有意义的语言成分”,所以对于中文来讲,将独立的词条拆分开来,是理解自然语 言的第一步,只有跨越了这一步,中文才能像英文那样过渡到短语划分、概念抽取以及 主题分析,以至于自然语言理解,最终达到智能计算的最高境界,实现人类的梦想。 从现阶段的实际情况来看,英文由于存在明显的单词边界,很快跨越了分词这一步, 也就是说在词的利用上已经先我们一步,并且已经展现了良好的应用前景,无论是信息 检索还是主题分析的研究都要强于中文,究其根本原因就是中文要通过分词这道难关, 只有攻破了这道难关,我们才有希望赶上并超过英文在信息领域的发展,所以中文分词 对我们来说意义重大,可以说直接影响到使用中文的每一个人的方方面面。 1.3 中文分词的应用 中文分词主要应用于信息检索、汉字的智能输入、中外文对译、中文校对、自动摘 要、自动分类等诸多方面。下面就以应用最广的信息检索为例来说明中文分词的应用。 近几年的互联网发展,互联网上的信息在急剧的膨胀,让我们进入了信息时代。在 这海量的信息中,各类信息混杂在一起,要想充分利用这些信息资源就要对它们进行整 理,如果由人来做这项工作,以目前的信息量,已经是不可能的,而如果面对中文信息 采用简单的全模糊匹配而不采用分词技术,那么整理的结果就过于粗糙,从而导致资源 -2-
  • 9. 毕业设计(论文)报告纸 不可用。 例如:“南京市长江大桥欢迎您”和“市长江大桥出席会议”中都有“市长”,而被 当作同一类来处理,结果是检索关于“市长”的相关信息的时候,它们都会被检索到, 在信息量少的情况下,还能通过手动分拣来排除这些问题,但是面临现在的海量信息, 根本不可能靠手工处理这样的错误数据。通过引入分词技术,就可以使机器对海量信息 的整理更准确更合理,在“南京市长江大桥欢迎您”中“市长”不会被当成一个词来处 理,那么检索“市长”当然不会将它检索到,使得检索结果更准确,效率也会大幅度的 提高。所以中文分词的发展应用与我们的科技生活息息相关。 -3-
  • 10. 毕业设计(论文)报告纸 第二章 中文分词相关算法介绍 2.1 中文分词算法分类 中文分词算法目前主要分为三大类:基于理解(语义)的分词方法、基于规则(字 符串匹配)的分词方法和基于统计的分词方法,同时也存在一些将两种或三种算法结合 起来取长补短的方法。 2.1.1 基于理解(语义)的分词 分词人们容易想到的办法就是,让计算机模拟人类进行学习——学习人类的语法, 分析语句的方法等等。基于理解的分词是希望通过让计算机模拟人对句子的理解,达到 识别词的效果。其基本思想就是在分词时进行句法、语义分析,利用句法信息和语义信 息来处理歧义现象。尤其是在乔姆斯基(Noam Chomsky)提出 “形式语言” 以后,人 们更加坚信利用语法规则的办法进行文字处理的方法。遗憾的是,目前为止,基于理解 的分词算法还没有重大突破。 2.1.2 基于规则(字符串匹配)的分词 基于规则分词是按照一定的策略将有待分析的中文字串与一个“充分大的”机器词 典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。按照 扫描方向的不同,串匹配分词方法可以分为正向匹配和逆向匹配;按照不同长度优先匹 配的情况,可以分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程 相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。常用的几种方法 有 (1)正向最大匹配法(由左到右的方向)。 (2)逆向最大匹配法(由右到左的方向)。 (3)最少切分(使每一句中切出的词数最小)。 2.1.3 基于统计的分词 基于统计的方法是基于若干个汉字同时出现的概率,通过对语料库(经过处理的大 量领域文本的集合)中的文本进行有监督或无监督的学习,可以获取该类文本的某些整 -4-
  • 11. 毕业设计(论文)报告纸 体特征或规律,如果能够充分地利用这些统计现象、规律,就可以构造基于语料库的统 计学信息。抽取算法、统计的分析方法可以多种多样,近来研究的热点主要集中于由随 机过程发展而来的理论和方法,其中最重要的是应用隐马尔科夫模型(HMM)进行自然 语言处理的方法。 2.2 中文分词算法优劣指标 2.2.1 歧义识别 歧义识别指一个字符串有多种分词组合,计算机难以给出到底哪一种分词算法才是 正确的分词系列。如“南京市长江大桥”可以分为“南京 / 市长 / 江大桥”或“南京市 / 长江大桥”,计算机无法判断哪一种才是准确的分词组合。 2.2.2 新词识别 新词识别也称作未登录词识别,指正确识别词典中没有出现的词语。姓名、机构名、 地址、称谓等千变万化,词典中常常不能完全收录这些词语,另外,网络中出现的流行 “犀利哥”是出现在网络中,并迅速流 用语也是一种未登录词的常见来源,如“打酱油” 行开来的新词。大量的研究证明新词识别是中文分词准确性的一个重要影响因素。 2.2.3 是否需要附加库 (1)词典:是记录已知词汇的词库,提供给程序读取,词库中词汇的越全,依赖词 典的分词算法分词就越准确。 (2)语料库:大量领域文本的集合,经过筛选的领域高质量文本集合对依赖语料库 的分词算法非常重要。 (3)规则库:计算机理解文本的文法规则集合,对于依赖规则库的分词算法,规则 库的完备、准确至关重要。 2.2.4 算法复杂度 算法复杂度包括编码的复杂度,算法运行所占用的系统空间和所消耗的时间,算法 复杂度低的算法可以更快的被实现,有更快的处理速度、更低的系统占用。 2.2.5 技术成熟度 算法理论的完善性决定了这种分词技术的成熟度,细节问题解决尚不全面的分词算 法,其技术成熟度较低,反之则技术成熟度高。 2.2.6 实施复杂性 -5-
  • 12. 毕业设计(论文)报告纸 实施复杂度基本上依赖于技术成熟度和算法复杂度,算法复杂度越高、技术成熟度 越差,实施的复杂性就越高,反之则实施的复杂性低。 2.2.7 分词准确性 将机器分词结果与人分词的结果对比,机器分词结果越接近人分词结果,则分词算 法的准确性越高。 2.2.8 分词速度 分词速度一般以“KB/s”或“字(词)/s”衡量,分词速度很大程度上依赖于算法复 杂度,算法复杂度高的分词算法分词速度慢,算法复杂度低的分词算法分词速度就快。 -6-
  • 13. 毕业设计(论文)报告纸 第三章 中文分词算法的设计 3.1 基于理解的中文分词算法设计 基于理解的分词系统通常包括三个部分:分词子系统、句法语义子系统、总控部分。 在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词 歧义进行判断,即它模拟了人对句子的理解过程,这种分词方法需要使用大量的语言知 识和信息,例如规则库。由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织 成机器可直接读取的形式,因此目前基于理解的分词系统还处在试验阶段,没有成熟的 算法可以参考。 3.2 基于规则的中文分词算法设计 基于规则的分词是目前技术比较成熟的分词方法,有基于单一规则的简单匹配算法, 例如正向、逆向最大匹配,也有基于多种规则的复杂匹配算法,例如 MMSeg 算法将多种 规则组合在一起提高分词的准确性。 3.2.1 MMSeg 分词算法 MMSeg 算法是台湾认知心理学家蔡智浩在文献[16]中提出的一种复杂规则匹配算 法。 MMSeg 算法中一个关键的概念是 Chunk,它包含依据上下文分出的一组词和相关的 属性,包括长度(Length)、平均长度(Average Length) 、标准差的平方(Variance)和自 由语素度(Degree Of Morphemic Freedom)。表 1.1 列出了这 4 个属性的计算方法: 表 1.1 MMSeg 算法属性计算方法 属性 含义 长度(Length) Chuck中各个词的长度之和 平均长度(Average Length) 长度(Length) / 词数 标准差的平方(Variance) 同数学中的定义 自由语素度(Degree Of Morphemic Freedom) 各单字词词频的对数之和 -7-
  • 14. 毕业设计(论文)报告纸 Chunk 中的 4 个属性采用 Lazy 的方式来计算,即只有在需要该属性的值时才进行计 算,而且只计算一次。 MMSeg 分词算法中的另一个关键的概念是规则(Rule),它实际上是一个过滤器 (Filter),过滤掉不符合要求的 Chunk。表 1.1 列举了 MMSeg 分词算法中的 4 个规则。 表 1.2 MMSeg 算法分词规则 编号 描述 规则1 最大匹配(Maximum matching) 规则2 最大平均词长(Largest average word length) 规则3 词长的方差最小(Smallest variance of word lengths) 单字词自由语素度之和最大 规则4 (Largest sum of degree of morphemic freedom of one-character words) 这 4 个规则符合汉语构词规则的基本习惯。 MMSeg 算法包含两种匹配方式:简单最大匹配(Simple maximum matching)和复杂 最大匹配(Complex maximum matching)。 简单最大匹配仅仅使用了规则 1。复杂最大匹配先使用规则 1 来过滤 Chunks,如果 过滤后的结果多于或等于 2,则使用规则 2 继续过滤,否则终止过滤过程……依次使用四 个规则,如果使用规则 4 得到的过滤结果依然多于或等于 2,则抛出一个表示歧义的异常, 否则终止过滤过程。算法流程如图 1.1 所示。 -8-
  • 15. 毕业设计(论文)报告纸 图 1.1 MMSeg 复杂最大匹配方式的处理流程 最后通过一个例子来简述一下 MMSeg 算法复杂最大匹配方式的分词过程。 要分词的句子:“研究生命起源”。 表 1.3.1 MMSeg 算法实例.获取 Chunks 编号 Chunk 长度 1 研/究/生 3 2 研/究/生命 4 3 研究/生/命 4 4 研究/生命/起 5 5 研究/生命/起源 6 6 研究生/命/起 5 7 研究生/命/起源 6 使用规则 1 过滤后得到 2 个 Chunk,需要继续过滤。 -9-
  • 16. 毕业设计(论文)报告纸 表 1.3.2 MMSeg 算法实例.应用规则 1 编号 Chunk 长度 5 研究/生命/起源 6 7 研究生/命/起源 6 对规则 1 过滤后的 Chunks 计算平均长度。 表 1.3.3 MMSeg 算法实例.计算平均词长 编号 chunk 长度 平均长度 5 研究/生命/起源 6 6/3=2 7 研究生/命/起源 6 6/3=2 使用规则 2 过滤后得到 2 个 Chunk,需要继续过滤。 表 1.3.4 MMSeg 算法实例.应用规则 2 编号 chunk 长度 平均长度 5 研究/生命/起源 6 2 7 研究生/命/起源 6 2 对规则 2 过滤后的 Chunks 计算词长的方差。 表 1.3.5 MMSeg 算法实例.计算词长方差 编号 Chunk 长度 平均长度 方差 5 研究/生命/起源 6 2 0 7 研究生/命/起源 6 2 4/9 使用规则 3 过滤后只剩下 1 个 Chunk。可以停止过滤。 表 1.3.6 MMSeg 算法实例.应用规则 3 编号 Chunk 长度 平均长度 方差 5 研究/生命/起源 6 2 0 只剩 1 个 Chunk,匹配过程终止。最终取“研究”成词,以相同的方法继续处理“生 命起源”。最终可以获得分词结果:“研究/生命/起源”。 在特殊情况下,规则 4 也会被用到,例如文本:“主要是因为”,计算方差后依然无 法区分。 表 1.4.1 MMSeg 算法规则 4 实例 编号 Chunk 长度 平均长度 方差 1 主要/是/因为 5 5/3 0.4714 2 主/要是/因为 5 5/3 0.4714 两个句子都有一个单字单词和一个双字单词,哪个更正确呢。在这里我们把焦点集 中在单字单词上。中国汉字的语素自由度不同,一些很少使用的汉字被用作自由语素, 但其它汉字则有较大的自由度。一个汉字的出现频率可以作为它的语素自由度的索引。 - 10 -
  • 17. 毕业设计(论文)报告纸 一个高频率的汉字更可能是一个单字单词,反之亦然。 编号 1 的 Chunk 中,“是”的词频比“主”肯定高,因而“是”的自由语素度更大, 所以选择编号 1 的 Chunk 作为这次过滤的结果。 3.3 基于统计的中文分词算法设计 基于统计的分词算法以统计语言模型(Statistical Language Models)为代表,这是一 种纯数学方法来处理语言问题,Google 已将这种模型广泛应用于中文分词、机器翻译、 拼写纠错、汉字输入等应用中,其算法可并行的特点,利用 MapReduce 模型在分布式系 统上处理速度非常快,非常适合在云计算平台上对海量数据进行精确分词。 3.3.1 语言统计模型分词算法 假设 S 表示一连串特定顺序排列的词 W1,W2,…,Wn,也就是说,任何一个有意义 的句子 S,都是由一连串按特定顺序排列的词而组成的。 于是根据概率公式可以算得一个句子在任意文本中出现的概率为: P  S   P W1  P W2 | W1  P W3 | W1W2   P (Wn | W1W2 Wn 1 ) 其中 S 是由 W1W2…Wn 组成的句子,P(S)是句子 S 在文本中出现的概率,P(Wi)是词 语 Wi 在文本中出现的概率,P(Wk|Wi…Wj)是 Wi…Wj 词汇依次出现后,Wk 词汇出现的概 率。不难看出,到了词 Wn,它的出现概率取决于它前面所有词。 从计算上来看,各种可能性太多,无法实现。因此我们假定任意一个词 Wi 的出现概 率只同它前面一个词 Wi-1 有关(即马尔可夫假设),于是问题就变得很简单了。 基于马尔可夫假设,S 出现的概率就变为: P  S   P W1  P W2 | W1  P W3 | W2   P (Wn | Wn 1 ) 这样计算起来就变得非常简单,如果希望考虑更高的关联性,也可以增加一个前向 关联词汇,即向前再关联一个词汇,但通常这样做的意义不大。 接下来的问题就是如何估算 P(Wi|Wi-1),只要有了大量随机读文本后,这个问题变得 很简单,只要计算这对词(Wi-1,Wi)在统计的文本中出现了多少次,以及 Wi-1 本身在同样的 文本中前后相邻出现了多少次,然后用两个数一除就可以了: P Wi | Wi 1   P Wi 1 , Wi  / P Wi 1  当我们分词的时候,每读到一个词 Wi,就去预先算好的统计信息数据库中读取 P(Wi), - 11 -
  • 18. 毕业设计(论文)报告纸 再继续向文本后读一个词 Wj ,然后从数据库中读取 P(Wi,Wj),再计算出 P(Wj|Wi) = P(Wi,Wj)/P(Wi)。比较 P(Wj|Wi)和 P(Wi),看哪个大,如果 P(Wi)大,那么应该吧 Wi,Wj 单独拆出,如果 P(Wj|Wi)大,那么应该把 WiWj 作为一个词。 例如,假设“中华”一词在文本中出现的概率为 P(中华)=0.0008,“人民”一词在文 本 中 出 现 的 概 率 为 P( 人 民 )=0.0012 , 而 P( 中 华 人 民 )=0.000015 , 可 得 P( 人 民 | 中 华)=0.000015/0.0008= 0.01875,远大于 P(中华)和 P(人民),于是“中华人民”暂时作为一 个词,后面又读到“共和国”这个词,查得 P(共和国)=0.00003,(人民共和国) P =0.000008, 可得 P(共和国|人民)=0.000008/0.00003= 0.267,远大于 P(人民)和 P(共和国),于是“人民 共和国”是一个词,组合前面的“中华人民”,得到“中华人民共和国”。 可见,统计模型会使匹配的结果符合人们普遍的口语习惯的,新词出现的多了,频 率高了以后,就会作为新词被算法直接识别,所以分词的结果的准确性要高。 3.4 混合处理的中文分词算法设计 基于规则的分词算法实现简单,但准确度不如基于统计的分词算法高;基于统计的 分词算法虽然准确度很高,但是算法复杂度较基于规则分词高。于是我们可以综合两种 算法的优点,先用基于规则的分词算法,分出多种备选的分词组合,然后利用统计分词 算法判定最终选择哪个组合,可以有效的降低统计分词算法的运算量,同时获得较好的 分词准确性。 3.4.1 结合规则分词与统计分词的综合分词算法 首先基于 MMSeg 算法的规则,然后将规则 4 修改为用语言统计模型来判断概率,选 择最高概率的分词方式,这样就可以避免 MMSeg 算法应用完所有规则后依然有多个 Chunk 的异常。 表 2.1 综合分词算法处理规则 编号 描述 规则1 最大匹配(Maximum matching) 规则2 最大平均词长(Largest average word length) 规则3 词长的方差最小(Smallest variance of word lengths) 规则4 分词组合下句子出现概率最高 算法流程如图 2.1 所示。 - 12 -
  • 19. 毕业设计(论文)报告纸 图 2.1 综合分词算法的分词处理流程 例如出现了上文中 MMSeg 算法应用规则 3 后依然有方差一致的情况,就可以利用语 言统计模型处理。 表 2.2 综合分词算法实例 编号 Chunk 长度 平均长度 方差 P(S) 1 主要/是/因为 5 5/3 0.4714 P(主要)P(是|主要)P(因为|是) 2 主/要是/因为 5 5/3 0.4714 P(主)P(要是|主)P(因为|要是) 遇到这种情况后,查询语料统计信息数据库,获取 P(主要),P(是|主要),P(因为|是), P(主),P(要是|主),P(因为|要是)的统计值,然后分别计算 P(主要/是/因为)=P(主要)P(是|主要)P(因为|是) P(主/要是/因为)=P(主)P(要是|主)P(因为|要是) 取其中值大的一个作为最终的分词结果。 - 13 -
  • 20. 毕业设计(论文)报告纸 第四章 中文分词算法的实现 4.1 MMSeg 分词算法实现 MMSeg 算法的实现,主要就是实现其核心的四条规则,需要计算的内容分别是:每 个 Chunk 的长度,每个 Chunk 的平均词条长度,每个 Chunk 的方差,以及每个 Chunk 的 自由语素度之和。 4.1.1 每个 Chunk 的长度计算 每个 Chunk 的长度即是 Chunk 中个各个词的长度之和,所以计算公式为 Length  Chunk    Length Words i  Word [ i ]Chunk 代码实现如下: int getLength() { int length = 0; for (int i = 0; i < words.length; ++i) { length += words[i].getLength(); } return length; } 4.1.2 每个 Chunk 的平均词长度 每个 Chunk 的平均词长度即是 Chunk 中个各个词的长度总和除以词数,等到平均每 个词的长度,所以计算公式为 Length(Chunk ) Avg (Chunk )  Length(Words ) 代码实现如下: double getAverageLength() { double averageLength = (double) getLength() / (double) words.length; - 14 -
  • 21. 毕业设计(论文)报告纸 return averageLength; } 4.1.3 每个 Chunk 的方差 每个 Chunk 的方差即是 Chunk 中词长的标准差平方,用各个词条的长度减去平均长 度的差的平方的和,再除以词条数目,所以计算公式为 Length (Words ) Var (Chunk )  (  i 0 (Words[i ]  Avg (Chunk )) 2 ) / Length(Words ) 代码实现如下: double getVariance() { double tempVariance = 0.0; for (int i = 0; i < words.length; ++i) { double temp = (double)words[i].getLength()-getAverageLength(); tempVariance += temp * temp; } double variance = Math.sqrt(tempVariance / (double) words.length); return variance; } 4.1.4 每个 Chunk 的自由语素度之和 每个 Chunk 的自由语素度之和即是 Chunk 中每个单子词条词频的对数之和,所以计 算公式为 DMF (Chunk )   Words[ i ]Chunk  Length (Words[ i ]) 1 log( Frequency (Words[i])) 代码实现如下: double getDegreeOfMorphemicFreedom() { double degreeMorphemicFreedom = 0D; for (int i = 0; i < words.length; ++i) { if (words[i].getLength() == 1) { degreeMorphemicFreedom += Math.log((double) words[i].getFrequency()); - 15 -
  • 22. 毕业设计(论文)报告纸 } } return degreeMorphemicFreedom; } 4.2 语言统计模型分词算法实现 语言统计模型算法的实现,主要分为两个部分,预处理统计信息和分词部分。预处 理统计信息部分需要一个语料库,语料库中存储了大量的高质量领域文本,程序首先读 取这个语料库,分析出需要的统计信息,存入统计信息数据库。分词部分从统计信息数 据库读取统计信息,用于分词的时候运算分词需要的概率值。 4.2.1 预处理统计信息 预处理统计信息需要分为两个步骤, (1)采集领域文本,这个过程一般采用网络爬虫来完成,在选择的领域网站内抓取 大量文本,存入语料库。 (2)计算统计信息,统计信息主要是词条在文本中出现的概率。 如何计算出词条的概率,计算哪些词条的频率?如果预置词库,统计固定的词条频 率,那么遇到新词就会比较难处理,所以需要一个方法来避免使用词库,纯粹从文本中 挖掘出词条。 于是,可以使用迭代的方法处理, (1)假设每个字都是一个词,统计出语料库中每个单字及其与后一个字组成的词条 的频率。 (2)重新对语料库做第二遍分析,这一次利用前一次计算出来的频率,可以计算出 一部分两个字的词条。 (3)这个过程可以反复迭代,不断从文本中挖掘新词,挖掘更长的词。 算法实现的伪代码: void firstAnalyze() { // 采集每个字及其与后一个字组成词条出现的次数 while ( 语料库还未分析完 ) { string text = getPageFromDB; //从语料库中抓出一篇文章 - 16 -
  • 23. 毕业设计(论文)报告纸 for (int i=0; i < text.Length()-1; ++i) { ++counts[text[i]]; //把读到的词计数加 1 markAsWord(text[i]); // 将单个字标识为词 ++counts[text[i]+text[i+1]]; //将当前的字与后一个字组成的字串加入计 数器 } } foreach (word in counts) { p[word] = counts[word] / DB.AllWordNumber; //计算每个词条出现的频率 } DB.Store(p); //将第一次统计的信息存入数据库 } void loopAnalyze() { // 采集每个词出现的次数 while ( 语料库还未分析完 ) { string text = getPageFromDB; //从语料库中抓出一篇文章 vector<string> words = SplitTextToWords(text); //将文章按词库最长匹配分词 // 依赖前一次的结果,挖掘新词 for (int i=0; i < words.Length()-1; ++i) { // 如果连续两个词组成的字串比当前的词频率高, // 标记这个字串为词并加入计数器 if (p[words[i]+word[i+1]] / p[words[i]] > p[words[i]]) { markedAsWord(words[i]+words[i+1]) ++count[words[i]+words[i+1]]; } } } foreach (word in counts) { - 17 -
  • 24. 毕业设计(论文)报告纸 p[word] = counts[word] / DB.AllWordNumber; //计算每个词出现的频率 } DB.Store(p); //将第一次统计的信息存入数据库 } 4.2.2 分词处理 有了预处理的统计信息,分词就非常简单了。 (1)首先将要分词的句子打散为任何可能的组合方式,例如 S 可以分为(A1,A2…An), 也可以分成(B1,B2…Bn)等等。 (2)然后将每种分词方式都根据统计信息计算 P(S),认为 P(S)最大的就是最后的分 词结果 伪代码如下: void segmentWords() { // 将句子拆分为任意分词组合 vector<vecotor<string> > sentences = SplitSentenceToWords(Sentence); psmax = 0; // 根据统计信息处理每个分词组合 foreach words in sentences { // 对每个分词组合计算 P(S) ps[words] = p[words[0]]; for (int i=1; i < words.Length(); ++i) { ps[words] += p[words[i-1]+words[i]] / p[words[i-1]]; } if (ps[words] > maxps) { result = words; psmax = ps[words]; } } print result; // 选择 P(S)最大的分词结果输出 } - 18 -
  • 25. 毕业设计(论文)报告纸 但是这种枚举分词结果然后判断的方法,是非常消耗资源的,这里面有一个实现的 技巧,如果我们穷举所有可能的分词方法并计算出每种可能性下句子的概率,那么计算 量是相当大的。因此,我们可以把它看成是一个动态规划(Dynamic Programming) 的问 题,并利用 HMM 的 Viterbi 算法快速地找到最佳分词。 除此之外,还有一个更好的优化方法,就是抛弃枚举,采用增量识别的方法,每次 从文本中读取一个字,记为 Wi,然后读取下一个字 Wi+1,然后计算 P(Wi+1|Wi),只要 P(Wi+1|Wi)>P(Wi),就认为 P(Wi+1|Wi)比 P(Wi)更合适作为一个词,然后用 WiWi+1 再加入 Wi+2 判断,直到无法满足 P(Wk+1|Wk)>P(Wk)时,认为 Wi..Wk 就是一个词,然后开始下一 个词的识别,直到把句子 S 读完。 4.3 综合分词算法实现 综合分词算法就是结合上述两种算法的各一部分,词库利用语言统计模型算法在预 处理统计信息阶段生成的词组成,然后利用 MMSeg 算法的前三个规则对句子进行分词, 得到的多个结果,再利用统计语言模型分词算法的分词部分,分别计算出 P(S),取大的 一个作为结果。 4.4 综合分词算法与 MySQL 数据库的实现 综合分词算法同时具备统计语言模型算法的准确性和 MMSeg 算法的简易性,配合 MapReduce 模型的并行化,在服务器端运行预处理统计信息,将统计信息分发到各个客 户端,与 MySQL 数据库结合,可以实现数据库层的高效分词,适合云计算发展趋势下的 分布式分词需求。 MySQL 的 MyISAM 引擎内置了全文索引(FullText),我们只需要重载 FullText 的分 词解析部分即可让 FullText 支持中文分词。 首先编写 MMSeg 算法和语言统计模型的分词部分算法,提供好外部调用接口,然后 在 MySQL Server 端实现调用分词接口的 UDF (用户自定义函数) 然后作为插件 Plugin) , ( 载入 MySQL,在定义表结构时,只需要使用“WITH PARSER 自定义函数名”即可重载 FullText 索引。 语言统计模型算法的预处理部分,可以并行的跑在云计算平台(例如 Google App Engine) 通过 MapReduce 模型, , 首先将统计任务拆分,例如一组文章给一个 Job 去运行, 每个 Job 统计完以后,再依次归并所有 Job 的统计结果,新的结果被分发到每个 MySQL - 19 -
  • 26. 毕业设计(论文)报告纸 服务器端,客户端连接 MySQL 使用全文索引查询,就可以通过 UDF 自动的调用中文分 词算法了。 图 3.1 MySQL 全文索引添加中文分词支持的架构 实际测试的结果: (1)在 MySQL 中加载插件,INSTALL PLUGIN plx_parser SONAME 'libmysqlft.so'; (2)建立测试表,CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(200) DEFAULT NULL, `body` mediumtext, PRIMARY KEY (`id`), FULLTEXT KEY `ft_utf8` (`title`,`body`) WITH PARSER plx_parser ) ENGINE=MyISAM DEFAULT CHARSET=utf8; (3)载入测试数据。 (4)测试中文 FullText 索引,见图 3.2。 - 20 -
  • 27. 毕业设计(论文)报告纸 图 3.2 MySQL 支持中文的 FullText 全文索引测试结果 (5)测试分词效果,见图 3.3。 - 21 -
  • 28. 毕业设计(论文)报告纸 图 3.3 MySQL 中通过 UDF 添加的分词函数分词效果 - 22 -
  • 29. 毕业设计(论文)报告纸 第五章 总结 5.1 工作总结 基于统计的分词和基于规则的分词算法实现不是一个新兴的课题,但是将它们与数据库 结合起来,还是非常有价值的东西。对我来讲,几个月来一边工作实习,一边将工作与毕设 结合起来,紧张而又有条不紊的进行毕业设计,使我对计算机专业的基本理论、专业知识和 基本技术有了更深入的了解和体会,使我在四年中所学到的知识得到了系统的总结,真正达 到了学以致用, 特别是对概率论和算法设计有了深深的体会。 本毕业设计工作所取得的结论主要有以下几个方面: (1)在做算法设计之前,需要对算法的核心进行有效性验证,避免程序已经完成大部分 的时候,发现算法的指标达不到要求。在验证算法核心的时候,当发现某些指标达不到要求 时,需要立刻研究解决的办法,如果无法解决,应该及时的更换算法,靠编程技巧的优化无 法给整个程序效率带来数量级的提升,只有算法的优化才可能带来数量级的优化。 (2)对于程序架构的设计应该尽可能减少层次,程序调用的层次越多,程序越容易出现 问题,更改代码的时候也容易牵一发而动全身,不利于代码重构。程序的结构应该尽可能的 扁平化,实现“高内聚、低耦合”,使程序的调用结构尽可能呈“扇形”结构。 (3)统计模型算法服务器端预处理统计信息部分的开发,第一次在分布式环境下进行编 程,这与单机编程有很大的不同。每个 Worker 可能运行在不同的机器上,如果使用全局变量, 那么 Worker 程序就会得不到全局变量,因为内存地址已经不一样了,参数的传递必须靠实参 的方式传递,不能使用任何显式或隐式的地址传递数据。所以编译调试的时候经常会出现单 机调试通过,传到分布式平台去运行就报内存错误或程序 Crash 的情况,后来所有的参数传 递全部通过 stringstrem 来序列化到一个 string 对象,然后将对象的数据全部传走,子程序接 收到以后再通过 stringstrem 反解析出来,就没有再出现问题。同时多个任务并行跑的时候, 某些任务跑完了需要归并任务结果,这里需要非常的注意效率问题,如果大量任务同时开始, 容易出现集中结束的峰值,那么会出现归并操作的峰值,很可能导致集群 Crash,需要慢慢的 依次开始任务,让归并操作一直在进行,将压力分散开来,像流水线一样。这是非常有价值 - 23 -
  • 30. 毕业设计(论文)报告纸 的经验。 5.2 各种分词算法的优劣比较 经过上面的比较和实践,我们可以对三种分词算法给出如下的比较。 表 4.1 各种分词算法优劣比较 分词算法 基于规则的分词 基于理解的分词 基于统计的分词 歧义识别 较差 很好 较好 新词识别 很差 很好 好 需要词典 需要 不需要 不需要 需要语料库 否 否 是 需要规则库 否 是 否 算法复杂性 简单 很难 一般 技术成熟度 成熟 不成熟 较成熟 实施难度 容易 很难 一般 分词准确性 一般 准确 较准 分词速度 快 慢 较快 5.3 分词算法发展展望 经过上面的分析可以看出,目前基于规则的分词算法已经基本发展到了它所能达到 的最高水平,对于歧义的处理、新词的处理,基于规则的分词算法基本无能为力,从目 前的发展来看,无法通过添加有限的规则来实现这些功能。 基于理解的分词算法,依赖于语义分析技术的发展,目前语义分析方面的研究进展 缓慢,短时间内很难有大的突破。 基于统计的分词算法,是目前分词技术发展的主流,算法虽然简单,但十分有效, 在新词处理、歧义处理上,有非常好的效果,但其算法复杂度较高,没有强大计算集群 的情况下,很难及时的获取到精确的统计信息,结合基于规则的分词算法,减少基于统 计的分词算法的计算量,是有效解决统计算法复杂度高的有效途径。 - 24 -
  • 31. 毕业设计(论文)报告纸 参 考 文 献 [1] Kenneth H.Rosen 著, 袁崇义;屈婉玲;王捍贫;刘田 译. 离散数学及其应用 [M]. 原书第 5 版,北京: 机 械工业出版社, 2007. 637~644. [2] 威廉·费勒 著, 胡迪鹤 译. 概率论及其应用[M]. 第 3 版, 北京:人民邮电出版社, 2006. [3] 傅祖芸. 信息论基础[M]. 北京: 电子工业出版社,1989. [4] 郭进. 统计语言模型及汉语音字转换的一些新结果[J]. 中文信息学报,1993,7(1) :18~27. [5] 郑延斌. 书面汉语自动分词及歧义分析[J]. 河南师范大学学报: 自然科学版,1997,25(4) :90~93. [6] 梁南元. 书面汉语自动分词系统—CDWS[J] . 中文信息学报,1987,1(2) ,101~106. [7] 俞士汶. 中文输入中语法分析技术的应用. 中文信息学报,1988,2(3) :20~26. [8] 黄昌宁. 计语言模型能做什么[J] . 语言文字应用,2002, :77~84. (1) [9] 曾华琳等. 一种基于提取上下文信息的分词算法[J]. 2005,25(9) :2025~2027. [10] 刘春辉等. 基于优化最大匹配与统计结合的汉语分词方法[J]. 燕山大学学报,2009,33(2)-. [11] 胡军成. 面向语言的程序设计在中文信息处理中的应用[J]. 中国科教创新导刊,2007, (12) :2~3. [12] 刘迁;贾惠波. 中文信息处理中自动分词技术的研究与展望[J]. 计算机工程与应, 2006, (3) 175~177. 42 : [13] Guo, J. Critical tokenization and its properties[J]. Computational Linguistics, 1997, 23(4): 569~59. [14] Sun,M.S.,Shen D.Y.,et Chinese word segmentation without using lexicon and hand-crafted training data[C]. Proceedings of the 17th international conference on Computational linguistics, 1998, 2: 1265~1271. [15] 高军. 汉语语言模型的研究与应用[D]. 北京:北京邮电大学博士学位论文,1998. [16] Tsai, C. H. (2000). MMSEG: A Word Identification System for Mandarin Chinese Text Based on Two Variants of the Maximum Matching Algorithm [On- line]. Available: http://technology.chtsai.org/mmseg/ [17] 吴军. http://www.google.cn/ggblog/googlechinablog/2006/04/blog-post_7327.html [18] 吴军. http://www.google.cn/ggblog/googlechinablog/2006/04/blog-post_2507.html [19] 吴军. http://www.google.cn/ggblog/googlechinablog/2006/04/blog-post_1583.html [20] 吴军. http://www.google.cn/ggblog/googlechinablog/2006/05/blog-post_2403.html [21] 李冰. http://blog.googlefans.net/post/30.html [22] 李沫南. http://www.coreseek.com/opensource/mmseg/ [23] 刀剑笑. http://blog.csdn.net/jyz3051/archive/2008/11/02/3202431.aspx [24] 大众点评. http://it.dianping.com/segmentation-algorithm-compare.htm - 25 -
  • 32. 毕业设计(论文)报告纸 致 谢 这次毕业设计可以圆满地完成,得到了指导老师的指导与大力支持。在此特别感谢徐敏 老师的大力帮助。指导老师的悉心指导和大力支持,在总体结构、功能的把握上给予了非常 大的帮助。同时感谢徐敏老师的硕士生褚一帆,在毕业设计过程中,给我提供了非常好的设 计参考文献,并对我在编程、算法设计等细节工作上给予了耐心的指导,对于顺利完成这次 毕业设计起到了关键性的作用。 此次毕业设计对提高我的编程能力、算法设计等方面都有很大帮助。还要感谢我的母校 ——南京航空航天大学,以及在这里四年生活中给予我关心和帮助的老师和同学,以及我们 宿舍的全体成员,我们在一起经过了整个大学的生活。 转眼间,大学生活即将结束,回首过去四年的大学生活,真是有苦也有乐,然而更多的 则是收获,感谢母校的各位老师不但无私地传授给我们知识,也教会了我们如何做人。虽然 我们专业的毕业设计任务繁重,但正是在这几个月紧张而充实的设计中,我感到自己的知识 得到了一次升华,我相信:我的毕业设计会给我的四年大学画上一个圆满的句号。 现代科学技术的飞速发展,改变了世界,也改变了我们的生活。作为新世纪的大学生, 应当站在世界的发展前列,掌握现代科学技术知识,调整自己的知识结构和能力结构,以适 应社会发展的要求。新世纪需要具有丰富的现代科学知识、能够独立解决面临的任务、有创 新意识的新型人才。 - 26 -