mmseg java_MMSeg中文分词算法

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%准确率,因为语言对于计算机来说真是太复杂的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python查看文档的软件_Python __doc__属性:查看文档

前面介绍了使用 help() 函数来查看程序单元的帮助信息。比如导入 string 模块之后,即可使用 help() 函数来查看指定程序单元的帮助信息。例如,在交互式解释器中输入如下命令来查看 string 模块下 capwords() 函数的作用:>>> help(st…

python重写和装饰器_python中的装饰器

装饰器的本质:当你在用某个decorator来修饰某个函数func时,如下所示:decoratordef func():pass其解释器会解释成下面这样的语句:funcdecorator(func)本质是把一个函数当作参数传递到另一个函数中,然后再调用。def hell…

python3不等于号_python中的不等于号是什么

python中的不等于号用!表示。Python支持的比较运算符如下图所示比较运算符,也成关系运算符,用于对常量、变量或表达式的结果进行大小、真假等比较,如果比较结果为真,则返回 True;反之,则返回 False。比较运…

java的abstract的意思_java – spring中的abstract =“true”是什么意思?

Spring中的抽象bean有点不同于抽象类。事实上,Spring中的抽象bean甚至不需要映射到任何类。以此为例:和类:public class FooDao {private DataSource dataSource;private SomeHelper someHelper;private FooHelper fooHelper;//setters}publi…

错误:不能继续进行下一步操作 openfire 设置._如何为MacBook或Mac电脑恢复出厂设置...

mac电脑经过长时间的使用后会变得卡顿,或者因为部分操作方式改变以至于给我们在使用过程中造成障碍,此时我们可以进行恢复出厂设置,以此来解决部分问题。那么该如何为MacBook或Mac电脑恢复出厂设置呢?下面跟随小编来一起学习一下吧…

java枚举类型测试_Java枚举类的使用

1、自定义枚举类// 测试类public class enumDemo {public static void main(String[] args) {System.out.println(Season.SPRING);System.out.println(Season.SUMMER);System.out.println(Season.AUTUMN);System.out.println(Season.WINTER);}}// 自定义枚举类class Season {//…

mac显示网速_Mac网络流量监控工具——NetWorker pro

NetWorker pro for Mac是Mac系统上一款轻量级的网速实时监测软件,可以让用户在菜单栏上显示当前的网络上传下载速度,可以在速度和流量两种模式之间切换,也可以选择不同的网络模式来进行监测。此外,networker mac还提供有关当前活动…

南京java架构师工资_java架构师工资一般是多少?怎么提升才能获得高薪?

这几年Java一直以自身的优势霸占榜首,而且其实java架构师工资也是行业比较高的,下面来看看java架构师的工资到底有多少,当然这也是要区分地区的,以及怎样提高自己才能获得高薪呢?当程序员容易,当一个优秀的…

matlab gui学习手记_MATLAB论坛不可错过的30例GUI源代码

​过去的两年中,我经常会在微信公众号和知乎上分享,平时如何通过MATLAB制作GUI,来让自己的工作和生活更加便捷与高效。在分享的同时,有不少朋友会给我留言提问关于MATLAB GUI的问题。而其中的许多问题,其实都是能够在M…

线性回归csv数据集_用mxnet的gluon线性回归训练只有两个特征的数据集

前言自从上次试着用最基础的线性回归训练一个有80个特征的数据集,梯度爆炸之后,今天拿一个简单到不能再简单的数据集试试能不能成功收敛。途中我们又会遇到什么问题?数据集来自吴恩达机器学习课程第二周的课后练习。原本是txt文件&#xff0c…

java中include标签的用法_原 ng-include用法分析以及多标签页面的简单实现方式

在平时的项目开发中,应该会经常遇到上图所示的需求,就是在一个页面中有多个标签,被选中的标签颜色会高亮显示,切换不同标签显示相应的不同内容。如果内容代码过多则写在同一个html文件就会显得特别乱,所以这里我们最好…

Java中如何引用文档对象模型_在JAVA中使用文档对象模型DOM经验小结

文档对象模型 (DOM) 是一个文档标准,对于完备的文档和复杂的应用程序,DOM 提供了大量灵活性。DOM标准是标准的。它很强壮且完整,并且有许多实现。这是许多大型安装的决定因素--特别是对产品应用程序,以避免在API发生改变时进行大量…

禅道项目管理_禅道 11.6.1 版本发布,完善细节,修复 Bug

禅道项目管理软件集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体,是一款功能完备的项目管理软件,完美地覆盖了项目管理的核心流程。禅道官网:www.zentao.net。大家好,禅道项目管理软件11.6.1发布&#xff0…

mendeley引用参考文献不显示_免费文献管理器Mendeley

June 2020有机合成化学文献检索今天小编给大家分享一款免费又好用的文献管理器——Mendeley,另外晶体cif文件下载—Materialsproject和COD数据库可在菜单栏的文献检索[文献管理/资源]中查看Mendeley是什么Mendeley是一款免费的跨平台文献管理软件,同时也…

pgsql vs mysql查询_对比平台--SQL Server Vs PostgreSQL

Microsoft SQL Server是一个数据库管理和分析系统,主要用于电子商务,业务范围和不同的数据仓库解决方案。另一方面,PostgreSQL是高级的对象关系数据库管理系统,它为SQL标准的扩展子集提供支持,包括不同的事务&#xff…

停车场管理系统代码_jsp19109商场商铺停车场服务系统-SSM-Mysql

jsp19109商场商铺停车场服务系统-SSM-Mysql该设计有演示视频    100%能运行买重包换  保密发送  一校一份编号:jsp19109语言数据库:jspMysql论文字数:12032字摘 要随着社会的发展,社会的方方面面都在利用信息化时代的优势。计…

java中compare语句的用法_Java RuleBasedCollator compare()用法及代码示例

java.text.RuleBasedCollat​​or类的compare()方法用于比较两个对象的强度,并且根据结果将返回0,正值和负值作为输出。用法:public int compare(Object o1, Object o2)参数:此方法需要两个对象之间进行比较。返回值:如果第一个对…

qregexp限制数字范围_数字系统实现电压电流控制的必经之路数模转换器

《芯势力》系列接上一篇文章,我们了解到了模数转换器,本文将带你了解数模转换器。看名字就能知道,如果模数转换器实现了模拟信号到数字信号的转换,那么,数模转换器就是模数转换器的逆过程,即把数字信号转换…

java 什么时候依赖注入_玩框架java依赖注入 – 何时使用单例

So I am wondering, should I be using singleton objects as the examples seem to imply? If this is the case, what is the advantage compared to the old static methods approach?依赖注入是一种将应用程序连接在一起的技术.您编写的组件并不直接相互依赖.而是将组件注…

四天人工智能 python入门体验课_百度深度学习7天打卡营,用Python+AI识别“青你2”小姐姐的高颜值...

原标题:百度深度学习7天打卡营,用PythonAI识别“青你2”小姐姐的高颜值“淡黄的长裙,蓬松的头发”,一夜之间洗脑全网,小姐姐们实在太让人上头了!导师“小甜豆”Lisa 满屏的大长腿、蚂蚁腰,又飒又…