基于字典的中文分词算法RMM
引言:目前针对中文分词一般有基于字典,基于统计(HMM等),基于规则的分词方法,然而其中基于字典的中文分词是最基础,同时也是最高效的方式,但分词精度取决与字典的规模。
一.基于字典的中文算法简介
1.定义:按照一定策略将带分析的汉字串与一个大机器字典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功.所以也称为机械匹配。
按照扫描方向的不同:正向匹配和逆向匹配
按照长度不同:最长匹配和最小匹配
2.正向最大匹配算法MM
1)从左向右取待切分汗语句的m个字符作为匹配字段,m为大机器字典中最长词条个数。
2)查找打机器词条并进行匹配, 若匹配成功,则将这个匹配字段作为一个词切分出来。
3)若匹配不成功,则将这个匹配字段的最后一个字去掉,剩下来的字符串作为新的匹配字段, 继续进行再次匹配,重复以上过程,直到切分出所有词为止.
3.逆向最大匹配算法RMM
该算法是正向最大匹配的逆向思维(最大匹配的顺序不是从首字母开始,而是从末尾开始),匹配不成功, 将匹配自大un的最前一个字去掉,实验表明,逆向最大匹配算法要优于正向匹配算法。 (RMM产生歧义的可能性比MM低,你将会从以下案例中体会)
4.更多关于中文分词算法,请看网上中文分词算法
二.RMM实现(效果比MM好, MM交给读者实现)
public class analyzer{
String words="";
int words_len=0;
//分词的最大长度
private int max_length=4;
//简易词典(简单模拟)
Vector<String> dict=new String[]{"服装","有限公司","和服","有限公司"}
public analyzer(String words){
this.words=words;
words_len=this.words.length();
}
public int getWordsLength(){
return words.length();
}
//逆向匹配
public String RMMSplit(){
int words_len=getWordsLength();
if(words_len==0){
return "";
}
String si="";
//词匹配的最大长度
int pattern_len=words_len>=max_length?max_length:words_len;
for(int i=pattern_len;i>=1;i--){
si=words.substring(words_len-i);
if(Find(si)||i==1){
words=words.substring(0,words_len-i);
results.add(si);
break;
}
}
return si;
}
//是否在词典找到
public boolean Find(String str){
for(int i=0;i<dict.length;i++){
if(str.equals(dict[i])){
return true;
}
return false;
}
}
public static void main(String[]args){
String str="永和服装有限公司";
analyzer a=new analyzer();
String isFinish=a.RMMSplit();
while(""!=isFinish){
isFinish=a.RMMSplit();
}
while(a.results.size()!=0){
System.out.println(a.results.remove(a.results[0])+",");
}
}
}
//执行结果如下:永,和,服装,有限公司
//正向最大匹配算法的结果为永,和服,装,有限公司
//由此可知,RMM比MM在处理歧义等语言方面更有优势,出错率更低。
基于字典的中文分词算法RMM相关推荐
- 基于字典的中文分词算法RMM,MM实现
引言:目前针对中文分词一般有基于字典,基于统计(HMM等),基于规则的分词方法,然而其中基于字典的中文分词是最基础,同时也是最高效的方式,但分词精度取决与字典的规模. 一.基于字典的中文算法简介 1. ...
- 基于词表的中文分词算法
基于词表的中文分词算法 正向最大匹配法 对于输入的一段文本从左至右,以贪心的方式切分出当前位置上长度最大的词.正向最大匹配法是基于词典的分词方法,其分词原理是:单词的颗粒度越大,所能表示的含义越确切. ...
- 入门科普:一文看懂NLP和中文分词算法(附代码举例)
导读:在人类社会中,语言扮演着重要的角色,语言是人类区别于其他动物的根本标志,没有语言,人类的思维无从谈起,沟通交流更是无源之水. 所谓"自然"乃是寓意自然进化形成,是为了区分一些 ...
- 在Hadoop上运行基于RMM中文分词算法的MapReduce程序
原文:http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-count-on-hadoop/ 在Hadoop上运行基于RMM中文分词 ...
- PHP基于字典的中英文数字混合分词算法RMM简易实现
<?phpclass Seg {//字典private $dict = [];//加载字典function set_dict($vDict){//词典大写,方便比对foreach ($vDict ...
- 基于词典的逆向最大匹配中文分词算法,更好实现中英文数字混合分词
基于词典的逆向最大匹配中文分词算法,能实现中英文数字混合分词.比如能分出这样的词:bb霜.3室.乐phone.touch4.mp3.T恤.实际分词效果比正向分词效果好 publicclass RMM ...
- 基于感知器的中文分词算法
http://heshenghuan.github.io/2015/12/21/%E5%9F%BA%E4%BA%8E%E6%84%9F%E7%9F%A5%E5%99%A8%E7%9A%84%E4%B8 ...
- 基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词
基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词.比如能分出这样的词:bb霜.3室.乐phone.touch4.mp3.T恤 第一次写中文分词程序,欢迎拍砖. publicclass MM ...
- 中文分词算法python代码_中文分词算法之最大正向匹配算法(Python版)
最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...
最新文章
- 《统一沟通-微软-技巧》-14-Exchange 2010 With SP1 OWA Integration
- linux下部署svn服务器
- JavaOne 2012:NetBeans.Next –未来路线图
- RIP报文封装、OSPF封装、OSPF——cost值
- 2009年12月8号漕宝路电信机房真是电信封的吗?
- 2步轻松搞定SpringBoot2.x分布式session共享,极少配置
- Day 14 python 之 字符串练习
- QT蓝牙调试助手、动态曲线绘制
- Firefox浏览器购物比价插件:惠惠购物助手
- Supervisor进程管理详解
- 微软文字转语音免费下载
- ansys linux运行_ANSYS2020R1 产品Linux平台安装
- 2016年Godaddy最新域名转出教程
- Qt编写水波进度条控件
- 网站建设:颜色与线条的选择
- C#|Winform编程之(列表视图控件)listView控件
- 电子计算机快速算法,序列产生的快速算法
- php location.href,window.location.href的用法(动态输出跳转)
- pkg-config到底是个啥
- mac虚拟摄像头插件_Mobiola WebCamera(网络虚拟摄像头) V2.4 Mac版
热门文章
- 快速获取网页元素xpath简单方法
- 2023四川大学图书情报档案专业考研初试介绍(2023.1.02已更新)
- RLC振荡原理与RC Snubber吸收电路
- ibatis oracle批量insert,ibatis 批量插入oracle总结
- 安卓开发无线连接设备进行调试(adb)
- 阿里云短信服务--SMS
- 移远EC25-xxx国外支持列表
- SOI上的FinFET
- linux系统无法网上看视频文件,重橙网络:Flash Player 发布重要更新,Win7 以下/Linux/Mac 不再支持视频格式内容播放...
- echarts设置标题样式,echarts设置主标题和副标题样式