自然语言处理(NLP)-双向匹配中文分词(Java实现)

《NLP-双向匹配中文分词(Java实现)》;

摘要:平台使用Netbeans搭载JDK1.8环境编程。实现MM算法及RMM算法并集成于一个窗体平台(如下图)。字典使用ChineseDic.txt;

                                                            

 

理论描述

中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比之英文要复杂得多、困难得多。(以上摘自百度百科)

为什么中文分词如此重要呢,是因为它是处理中文的语义分析,文本分类,信息检索,机器翻译,机器问答等问题的基础。如果分词效果不好,很有可能会严重影响到后续的研究。 因为中文存在交集歧义,组合歧义,无法在句子中解决的歧义,具有未登录词等等特征,使得中文分词很难。

中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。

中文分词技术属于自然语言处理技术范畴,对于一句话,人可以通过自己的知识来明白哪些是词,哪些不是词,但如何让计算机也能理解?其处理过程就是分词算法。

传统基于字符串匹配的分词方法字符匹配法分词之三 :

1)正向最大匹配法(由左到右的方向)MM

2)逆向最大匹配法(由右到左的方向)RMM

3)双向最大匹配法(进行由左到右、由右到左两次扫描)MM+RMM

算法描述

本文实现双向匹配算法,具体算法描述如下:

MM:

  1. 先确定一句中文序列(句子)以及Maxlen(每次开始最大划分字数)。(字典默认为ChineseDic.txt)
  2. 从句子的左边开始向右边划出Maxlen个字,在字典里进行字符串匹配,a.若找到(匹配成功)则取出此划分段作为确定的词标记分割符。b.若找不到(匹配失败)则进行从左边起的划出(Maxlen-1)个字数再去字典里进行匹配,若找到则去a,若找不到则重复b,再减一,直到找到为止。
  3. 划分出前一个词然后则跳至此词后的第一个字再重复2.的步骤。直至句子结束。
  4. 边界处理:选择Maxlen一般适中就好。若到句子末端所剩字数少于Maxlen,则一次性取完(取到完所有剩下的)。
  5. 算法改进:

a.字典里不含所有的中文单字词(比如:靖),所以增加算法改进为匹配不出来的中文单字词单独划分出来,即字典里没有的单字也可以匹配出来。

b.原算法不能把句子的最后一个字符(中文字或者中文标点)匹配出来,即最后一个字符无法实现匹配。则修改算法使最后的字符也可以进行匹配。

6. 具体算法及详细注释如图:

 

                                 

                                        

RMM:

1. 先确定一句中文序列(句子)以及Maxlen(每次开始最大划分字数)。(字典默认为ChineseDic.txt)

2. 从句子的右边(起始位置为末尾)开始向左边划出Maxlen个字,在字典里进行字符串匹配,a.若找到(匹配成功)则取出此划分段作为确定的词标记分割符。b.若找不到(匹配失败)则进行从右边起的划出(Maxlen-1)个字数再去字典里进行匹配,若找到则去a,若找不到则重复b,再减一,直到找到为止。  

3. 划分出前一个词然后则跳至此词后的第一个字再重复2.的步骤。直至句子结束。

4. 具体算法及详细注释如图:

       

 

 

 

详例描述

序列:“对外经济技术合作与交流不断扩大。”

字典:ChineseDic.txt;

Maxlen:4;

MM:

       

 

RMM:

           

 

软件演示

  1. 对外经济技术合作与交流不断扩大。

MM:

  RMM:

  

2. 我们即将以丰收的喜悦送走牛年,以昂扬的斗志 迎来虎年。

  MM:

RMM

  1. 幼儿园地节目

MM,Maxlen为3

MM,Maxlen为2

RMM,Maxlen为3

 

总结:

  1. 此平台把读取字典分开,因为读取字典对MM和RMM都是分开且公平的。
  2. 让使用者自行输入Maxlen。不同的Maxlen对某些句子的分词不同。
  3. MM与RMM对分词结果会产生影响。
  4. 字典不能完全包含所有的词,所以制作越全越完美的字典的难度很高。
  5. 时间方面,两个算法的时间复杂度是一样的。
  6. 基于字符串匹配的分词算法很依赖于字典,若字典很大会对算法产生不好的影响,拖慢分词的时间。

                                        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值