Java中有一些开源的分词项目,比如:IK、Paoding、MMSEG4J等等。这里主要说的是MMSEG4J中使用的MMSeg算法。它的原文介绍在:http://technology.chtsai.org/mmseg/,是用英文书写的,这是只是它的一个中文笔记。

为什么中文要分词

中文和英文的书写方式不一样,英文中单词之间用空格隔开,而且每个单词代表一个含义(当然也有短语,但这占的比例不是主要的);中文的书写是连在一起的,而且单个单词常常与相邻的单词组合成一个词语,代表一个含义。比如:“中学校长”,不能像英文那样一个词一个划分,要划分为“中学”和“校长”两个词。如果我们的书写习惯是每个词语用空格分隔,那就像英文一样不用分了。

一、划分规则

把查询语句划分为3个word组成的chunk,每个word中存放一个词语,这个词语是字典中出现的一个字或词组(多个字),对于剩下未划分的子语句可以再使用这个规则划分。

为什么chunk由3个word组成,而不是其它数值?

也许是汉语句子基本结构是主谓宾3部分,而不划为更多个的word,却是在程序准确性与性能之间做一个折中。

例如“眼看就要来了”或以分为以下几种chunk

1、眼看    就要 来了

2、眼看 就要 来

3、眼看 就 要

4、眼 看 就要

5、眼 看 就

二、过滤规则

从上面的划分可见,有多个chunk,为了选出唯一一个chunk,分别用四个规则过滤它们,当然如果在某个过滤规则中已经让chunk剩存一个,就退出后继的过滤筛选。反之,如果使用了4个规则,仍然剩存1个以上的chunk,就抛出异常。这4个规则分别是:最大匹配、最大平均单词长度、单词长度最小方差和单字单词语素自由度的最大和。

2.1、最大匹配

把3个word中的单词个数相加,取总单词长度最长的chunk。

上面第一个chunk单词长度为6,所以取它。

2.2、最大平均单词长度

就是chunk中单词总数除以word个数,如:

1、国际化

2、国际 化

3、国 际 化

这三个chunk的平均单词长度都是1.

2.3、最小单词长度方差

先回忆一下什么是方差?

方差就是各数据与样本平均数的差的平方和的平均数,公式:

[1/(n-1)][(x1-s)^2+(x2-s)^2+...+(xn-s)^2],其中的s为标准值。

方差用于衡量x1~xn群体与s之间的偏离程度,方差越小表明x1~xn群体与s越聚集。当x1~xn都等于s时,方差的值为0,表明它们聚焦在一个点。

比如有以下两个chunk

1、小女 孩子 们

2、小 女孩子 们

x1~xn就是每个word中单词的长度,标准值就是chunk中平均单词长度

第一个chunk的值为:

[(2-5/3)^2+(2-5/3)^2+(1-5/3)^2]/3=[(1/3)^2+(1/3)^2+(-2/3)^2]/3=

(0.1111+0.1111+0.4444)/3=0.2222

第二个chunk的值为:

[(1-5/3)^2+(3-5/3)^2+(1-5/3)^2]/3=[(-2/3)^2+(4/3)^2+(-2/3)^2]/3=

(0.4444+1.7777+0.4444)/3=0.8888

所以取第1个chunk,当然这个规则在这个例子中筛选错误了,因为第二个chunks比较接近原意。

为什么取方差值最小的,因为这样选对的概率比较高。

2.4最大单字单词的语素自由度和

取出chunks中单词个数为1的word,统计它们的单词语素自由度之和。取语素自由度之和最高的chunk。一个高频率的汉字更可能是一个单字单词,也就有更高的语素自由度,而这个单词的频率是事先统计的,它记录在一个预定义字典中。比如:

1、为首 要 考虑

2、为 首要 考虑

在1 chunks中,“要”的语素自由度为13.84,而在2中,“为”的语素自由度为13.64,说明“要”作为单个词使用的概率高一些,所以这里选择第一个chunk。当然这个算法在这里也选错了。

MMSeg中计算自由度公式是:

Freq=(int)(Math.log(Integer.parseInt(rate))*100)

这个公式的目的是让频率值相差不大的词拥有相同的自由度

从上面可以看到MMSeg算法划分并不是完全准确,官方说:“在一个由1013个单词组成的样本中,这个系统的正确识别率达到98.41%。”目前也没有那个算法能做到100%准确率,因为语言对于计算机来说真是太复杂的。

mmseg java_MMSeg中文分词算法相关推荐

  1. Mmseg中文分词算法解析

    Mmseg中文分词算法解析 @author linjiexing 开发中文搜索和中文词库语义自己主动识别的时候,我採用都是基于mmseg中文分词算法开发的Jcseg开源project.使用场景涉及搜索 ...

  2. 中文分词算法python代码_中文分词算法之最大正向匹配算法(Python版)

    最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...

  3. 列举:中文分词算法你知道几种?

    列举:中文分词算法你知道几种? 摘要:看似普通的一句话,甚至几个词,在机器眼里都要经过好几道"程序".这个过程主要靠中文分词算法,这个算法分为三大类:机械分词算法.基于n元语法的分 ...

  4. 正向最大匹配算法 python代码_中文分词算法之最大正向匹配算法(Python版)

    最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...

  5. 基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词

    基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词.比如能分出这样的词:bb霜.3室.乐phone.touch4.mp3.T恤 第一次写中文分词程序,欢迎拍砖. publicclass MM ...

  6. 基于词典的逆向最大匹配中文分词算法,更好实现中英文数字混合分词

    基于词典的逆向最大匹配中文分词算法,能实现中英文数字混合分词.比如能分出这样的词:bb霜.3室.乐phone.touch4.mp3.T恤.实际分词效果比正向分词效果好 publicclass RMM ...

  7. 在Hadoop上运行基于RMM中文分词算法的MapReduce程序

    原文:http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-count-on-hadoop/ 在Hadoop上运行基于RMM中文分词 ...

  8. python最大分词_中文分词算法之最大正向匹配算法(Python版)

    最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...

  9. java中文分词算法_Java实现逆向最大匹配中文分词算法

    写道 //Java实现逆向最大匹配中文分词算法 public class SplitChineseCharacter { public static void main(String[] args) ...

最新文章

  1. openfiler setup一,安装
  2. python利器怎么编程-Python任务调度利器之APScheduler详解
  3. 卸载64位python3.6再安装32位python3.6
  4. Distributed Systems笔记-Web Service Design Patterns
  5. 【FLink】Flink 1.12 TaskManager 内存结构
  6. mysql服务器的字符集
  7. java计算机毕业设计随心淘网管理系统源代码+数据库+系统+lw文档
  8. 基于Sobel算法的边缘检测简介
  9. 百度地图根据经纬度计算距离
  10. BIM+3DGIS的行业应用探讨
  11. 三毛3--亲爱的婆婆大人
  12. tp-link与台式计算机连接教程,【详细图解】TP-Link TL-WDR6510路由器电脑设置教程...
  13. Bad client credentials
  14. 健身与不健身五年后的差别?你可不能轻易忽视!
  15. Java 11~~20
  16. 软著申请时提取60页代码shell命令解析
  17. ISO七层模型和TCP/IP四层模型
  18. 大学物理·第4章刚体的转动
  19. 智慧全媒体 5G新视听,共探新时代广播电视!
  20. 互联网一二线大厂名单_为什么字节跳动、阿里巴巴、腾讯等互联网大厂都喜欢拿金融牌照...

热门文章

  1. css二级菜单会然下面遮住_JavaScript实现下拉二级菜单详解
  2. [蓝桥杯][2016年第七届真题]压缩变换(主席树求区间不同数的个数)
  3. 12. Excel数据可视化看板--动态销售月报看板
  4. 【计算机组成原理】浮点数运算及其流水线
  5. 修改autor后面邮箱_如何修改LOL手游昵称
  6. Linux 文件系统初探
  7. [机器学习] 常用并行计算算子原理
  8. 单片机关于RAM的作用
  9. 排序算法python版本
  10. ai无法启动产品_启动AI启动的三个关键教训