java正向最大匹配算法_java中文分词之正向最大匹配法实例代码_weixin_39801613的博客-程序员秘密

技术标签: java正向最大匹配算法  

前言

基于词典的正向最大匹配算法(最长词优先匹配),算法会根据词典文件自动调整最大长度,分词的好坏完全取决于词典。

所谓词典正向最大匹配就是将一段字符串进行分隔,其中分隔 的长度有限制,然后将分隔的子字符串与字典中的词进行匹配,如果匹配成功则进行下一轮匹配,直到所有字符串处理完毕,否则将子字符串从末尾去除一个字,再进行匹配,如此反复。

算法流程图如下:

51b754ab8e749ca0ad910e1d1c5966cf.png

下面给大家主要讲一下中文分词里面算法的简单实现,废话不多说了,现在先上代码

示例代码

package com;

import java.util.ArrayList;

import java.util.List;

public class Segmentation1 {

private List dictionary = new ArrayList();

private String request = "北京大学生前来应聘";

public void setDictionary() {

dictionary.add("北京");

dictionary.add("北京大学");

dictionary.add("大学");

dictionary.add("大学生");

dictionary.add("生前");

dictionary.add("前来");

dictionary.add("应聘");

}

public String leftMax() {

String response = "";

String s = "";

for(int i=0; i

s += request.charAt(i);

if(isIn(s, dictionary) && aheadCount(s, dictionary)==1) {

response += (s + "/");

s = "";

} else if(aheadCount(s, dictionary) > 0) {

} else {

response += (s + "/");

s = "";

}

}

return response;

}

private boolean isIn(String s, List list) {

for(int i=0; i

if(s.equals(list.get(i))) return true;

}

return false;

}

private int aheadCount(String s, List list) {

int count = 0;

for(int i=0; i

if((s.length()<=list.get(i).length()) && (s.equals(list.get(i).substring(0, s.length())))) count ++;

}

return count;

}

public static void main(String[] args) {

Segmentation1 seg = new Segmentation1();

seg.setDictionary();

String response1 = seg.leftMax();

System.out.println(response1);

}

}

可以看到运行结果是:北京大学/生前/来/应聘/

算法的核心就是从前往后搜索,然后找到最长的字典分词。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39801613/article/details/114214688

智能推荐

蓝桥杯——单片机学习(3——点亮LED灯)_蓝桥杯led_Moqim Flourite.的博客-程序员秘密

原理如图,发光二极管L1—L8共阳接法,VCC为电源正极,高电平。已知发光二极管正向导通反向截至,要使得二极管发光,就要让Q1—Q8为低电平。可控管脚为P00—P07,所以要输入P00—P07为低电平。为了让P0能够影响到Q1—Q8,就要使得锁存器M74HC573M1R导通,即要让管脚LE为高电平。又管脚LE与Y4C连接,所以Y4C也为高电平。又Y4C连接了一个或非门,或非门的输入端为Y4和WR。因为WR已用跳线帽与GND连接在了一起,GND为接地,所以WR为0(低电平)。根据或非门逻辑表格:

【Electron学习】Windows系统环境配置与安装_THU_杨迪的博客-程序员秘密

关于 ElectronElectron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。Electron于2013年作为构建Github上可编程的文本编辑器Atom的框架而被开发出来。这两个...

Android Activity的生命周期简单总结_简单列出activity的生命周期_byhieg的博客-程序员秘密

Android Activity的生命周期简单总结这里的内容参考官方的文档,这篇文章的目的不是去总结Activity是如何启动,如何创造,以及暂停和销毁的,而是从实际开发中分析在Activity各个生命周期,我们应该处理的内容。Activity 各个生命周期由图可以看出 ,在一个activity的生命周期中,系统会像金字塔模型一样去调用一系列的生命周期回调函数。在最上端是当前Activit

EF中提示一个或者多个验证出现错误,查看 EntityValidationErrors 详细信息的解决方法..._weixin_30252709的博客-程序员秘密

摘自:http://www.cnblogs.com/angels/archive/2012/11/06/2757231.html我们在 EF 的编程中,有时候会遇到这样一个错误:但是,按照他的提示 “See 'EntityValidationErrors' property for more details.” 去 Exception 中查看,却只能看到并不能看到具体的是那个...

实现图书增删改查和分页显示图书信息_birdlun的博客-程序员秘密

目录列:实现图书增删改查和分页显示图书信息效果截图:添加图书​分页显示上传图片修改实现导包数据库连接db.propertiesUploadServlet图片上传封装book数据封装分页BookDao.java 实现图书增删改查、分页BookDaoImp.javaBookService接口 实现增删改查、分页BookService...

随便推点

socket编程中套接字I/O超时设置的方法_socket accpt 超時設置_Gopher大威的博客-程序员秘密

一、使用alarm函数设置超时void handler(int signum){ .... return 0;}signal(SIGALRM, handler);alarm(3);int ret = read(sockfd, buf, sizeof(buf));if(ret == -1 &amp;&amp; errno == EINTR) errno = ETIMEOUT;else if(ret &gt;= 0) alarm(0);比如有一个read动作,在读之前先设置一个闹钟。

go json 文件转结构体_go json变为结构体_惟惟安的博客-程序员秘密

注意:1.json文件格式正确性,请参考 在线编辑,在线校验一下http://www.bejson.com/convert/json2csharp/2.json对应的struct 结构,一定要对应,就是结构定义要和json匹配3.json key 和 struct 里面定义的 tag要一致4. struct 结构中的变量名头字母要大写5. 具体可以参考下面这篇文章https://bl...

关于使用Delphi XE10 进行android开发的一些总结_weixin_30797199的博客-程序员秘密

RAD,可以快速开发出来,但是问题较多最好别用说实话做出来的app太!大!了!十分的特别的占内存! FireMonkey真心太大了...太占内存了开发一般应用还可以大型的话就很不好了因为用户少Bug多,开发App虽可跨安卓,苹果,开发稍大程序不稳定,不可控因素多,但有开发速度快优点,适合一些个人用户玩玩教学,个体程序员初...

Lesson 18_御坂御坂Matlab工作室的博客-程序员秘密

mature 成熟的(人)ripe 成熟的(植物) ripen 使成熟mortal .adj必有一死的 immortal 永垂不朽的remove 消除,使消失remove the misunderstandingvary .v变化 variation .n变化基因agent .n代理 agency .n代理 travelling agencytribe .n部落 tribute .n贡品,赞美ratio=rate比率survival

本博客一篇文章上百度首页“热门推荐”第一位啦,小高兴~_iteye_11581的博客-程序员秘密

刚同事跟我说,小杰,你昨天解决的那个问题,百度首页上就有一篇文章能解决,我还很纳闷,一看,这不是我昨天在博客上写的文章吗?今天上百度首页了,热门推荐第一位~弄得我都有些飘飘然啦~庆祝一下~再接再厉~有图有真相~~~~...

Hive SQL操作与函数自定义(二)_hive sql 大于0_张博208的博客-程序员秘密

9 Operators and UDFs9.1 内置运算符9.1.1 关系运算符操作符运算对象的类型描述A &amp;lt;=&amp;gt; BALL都是NULL时,返回TRUE,有一为NULL时,返回FALSE,都不为NULL时,与‘=’运算符一样。A &amp;lt;&amp;gt; BALLA或B为NULL时,返回NULL,否则A不等于B是返回TRUE,反之FALSE。A RLIKE BstringsA或B为NULL时,...

推荐文章

热门文章

相关标签