打造自己的中文分词器之中文分词理论讲解(一)

取自 自然语言处理百科

跳转到: 导航, 搜索

前不久需要一个能满足自己需求的中文分词器,结果找了找,感觉都很不满意,让自己满意的还是得自己定制,所以还是决定自己写一个中文分词器出来,然后自己写了个基于字典的中文分词器ShuzhenAnalyzer,它的分词规则是基于字典的,比如对这样一句话"保护我们共有的地球",如果字典里没有设置任何相关的词,则将分为保|护|我|们|共|有|的|地|球,如果是在字典里设置了比如"地球","保护"等,则将分为保护|我|们|共|有|的|地球。

鉴于自己有这个写分词的过程或经验吧,所以打算在有空的时候批量地写些文字来讲述中文分词方面的一些心得或东西吧

阅读者没有任何前提限制,不过最好懂java,因为分词将用java描述

首先我们了解下为什么中文分词比英文分词难?我认为主要原因在于英文各单词之间有空格隔开,而中文各字之间是紧密联系在一起的,至于其他的中文的语义之类的那就是更深一层的了,对英文来说也存在这种语义的辨别,比如:computer resource,可以很容易地分为 computer|resource,而对应的中文:计算机资源,分为计|算|机|资|源,区别就显而易见了,computer是个有独立完整的词表示电脑或计算机,而独立的计或算或机表示什么呢?同样资源这个也是如此。

好了,如果你是第一次接触中文分词这块,那你通过上面的文字对分词应该有了个初步的认识了,接下来将再稍微详细地来解释一下这个名词。

我们都知道分蛋糕,当你生日或你朋友生日的时候总是要切蛋糕的,分蛋糕就是将一整块蛋糕分成一块一块的分给众人,ok,分词其实也是这样,不过它切的不是蛋糕,而是词或句子,比如对这么一句话“保护我们共有的地球”进行分词,我们可以one by one地分为:保|护|我|们|共|有|的|地|球,这种分法也是最简单的,一般而言我们不用自己去做这样的分词算法,因为我们可以借助lucene里内嵌的StandardAnalyzer来分,通常情况下,我们有自己的分词需求,对中文来讲,这才是最困难的地方,比如我们要将“保护我们共有的地球”分成“保护|我们|共有|的|地球”,这种情况下就麻烦了起来,你如何让你的程序在碰到保护或我们这个词的时候来将这个词作为一个分词来进行划分?如果我们人类看到这个词的时候我们很自然的知道:哦,"我们"或者"保护"这是个完整的词,但显然系统并不知道,所以我们必须让它知道。

让它知道目前有种通用的方式就是利用字典,在字典里加入一些我们希望能让系统识别的词,比如"地球","保护"等等,这样系统在进行分词的时候,能通过字典来明白哪些词是应该分为一个整体而不应该拆散开的。 好了,今天就先写到这里,下次我们再通过一些代码例子来说明分词,尤其是对中文的分词是怎么干的。


转自:http://www.blogjava.net/bbmonkey62/archive/2008/06/27/211196.html 作者为:bbmonkey62

个人工具
工具箱