技术标签: java正向最大匹配算法
前言
基于词典的正向最大匹配算法(最长词优先匹配),算法会根据词典文件自动调整最大长度,分词的好坏完全取决于词典。
所谓词典正向最大匹配就是将一段字符串进行分隔,其中分隔 的长度有限制,然后将分隔的子字符串与字典中的词进行匹配,如果匹配成功则进行下一轮匹配,直到所有字符串处理完毕,否则将子字符串从末尾去除一个字,再进行匹配,如此反复。
算法流程图如下:
下面给大家主要讲一下中文分词里面算法的简单实现,废话不多说了,现在先上代码
示例代码
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);
}
}
可以看到运行结果是:北京大学/生前/来/应聘/
算法的核心就是从前往后搜索,然后找到最长的字典分词。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
原理如图,发光二极管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(低电平)。根据或非门逻辑表格:
关于 ElectronElectron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。Electron于2013年作为构建Github上可编程的文本编辑器Atom的框架而被开发出来。这两个...
Android Activity的生命周期简单总结这里的内容参考官方的文档,这篇文章的目的不是去总结Activity是如何启动,如何创造,以及暂停和销毁的,而是从实际开发中分析在Activity各个生命周期,我们应该处理的内容。Activity 各个生命周期由图可以看出 ,在一个activity的生命周期中,系统会像金字塔模型一样去调用一系列的生命周期回调函数。在最上端是当前Activit
摘自:http://www.cnblogs.com/angels/archive/2012/11/06/2757231.html我们在 EF 的编程中,有时候会遇到这样一个错误:但是,按照他的提示 “See 'EntityValidationErrors' property for more details.” 去 Exception 中查看,却只能看到并不能看到具体的是那个...
目录列:实现图书增删改查和分页显示图书信息效果截图:添加图书分页显示上传图片修改实现导包数据库连接db.propertiesUploadServlet图片上传封装book数据封装分页BookDao.java 实现图书增删改查、分页BookDaoImp.javaBookService接口 实现增删改查、分页BookService...
一、使用alarm函数设置超时void handler(int signum){ .... return 0;}signal(SIGALRM, handler);alarm(3);int ret = read(sockfd, buf, sizeof(buf));if(ret == -1 && errno == EINTR) errno = ETIMEOUT;else if(ret >= 0) alarm(0);比如有一个read动作,在读之前先设置一个闹钟。
注意:1.json文件格式正确性,请参考 在线编辑,在线校验一下http://www.bejson.com/convert/json2csharp/2.json对应的struct 结构,一定要对应,就是结构定义要和json匹配3.json key 和 struct 里面定义的 tag要一致4. struct 结构中的变量名头字母要大写5. 具体可以参考下面这篇文章https://bl...
RAD,可以快速开发出来,但是问题较多最好别用说实话做出来的app太!大!了!十分的特别的占内存! FireMonkey真心太大了...太占内存了开发一般应用还可以大型的话就很不好了因为用户少Bug多,开发App虽可跨安卓,苹果,开发稍大程序不稳定,不可控因素多,但有开发速度快优点,适合一些个人用户玩玩教学,个体程序员初...
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
刚同事跟我说,小杰,你昨天解决的那个问题,百度首页上就有一篇文章能解决,我还很纳闷,一看,这不是我昨天在博客上写的文章吗?今天上百度首页了,热门推荐第一位~弄得我都有些飘飘然啦~庆祝一下~再接再厉~有图有真相~~~~...
9 Operators and UDFs9.1 内置运算符9.1.1 关系运算符操作符运算对象的类型描述A &lt;=&gt; BALL都是NULL时,返回TRUE,有一为NULL时,返回FALSE,都不为NULL时,与‘=’运算符一样。A &lt;&gt; BALLA或B为NULL时,返回NULL,否则A不等于B是返回TRUE,反之FALSE。A RLIKE BstringsA或B为NULL时,...