当前位置: 首页 > news >正文

中文分词--逆向最大匹配

上一篇文章中介绍了正向最大匹配。能够看到有时候效果不是非常好。这里在介绍一种逆向最大匹配的算法。

词典和匹配的字符串都和上一篇文章同样

仅仅是本算法是从后到前搜索字符串。然后找到最长的匹配结果输出。

上代码


  
package com;


import java.util.ArrayList;
import java.util.List;


public class Segmentation1 {
	private List<String> dictionary = new ArrayList<String>();
	private String request = "北京大学生前来应聘";
	
	public void setDictionary() {
		dictionary.add("北京");
		dictionary.add("北京大学");
		dictionary.add("大学");
		dictionary.add("大学生");
		dictionary.add("生前");
		dictionary.add("前来");
		dictionary.add("应聘");
	}
	
	private boolean isIn(String s, List<String> list) {
		for(int i=0; i<list.size(); i++) {
			if(s.equals(list.get(i))) return true;
		}
		return false;
	}
	
	public String rightMax() {
		String response = "";
		String s = "";
		for(int i=request.length()-1; i>=0; i--) {
			s = request.charAt(i) + s;
			if(isIn(s, dictionary) && tailCount(s, dictionary)==1) {
				response = (s + "/") + response;
				s = "";
			} else if(tailCount(s, dictionary) > 0) {
				
			} else {
				response = (s + "/") + response;
				s = "";
			}
		}
		return response;
	}
	
	private int tailCount(String s, List<String> list) {
		int count = 0;
		for(int i=0; i<list.size(); i++) {
			if((s.length()<=list.get(i).length()) && (s.equals(list.get(i).substring(list.get(i).length()-s.length(), list.get(i).length())))) count ++;
		}
		return count;
	}
	
	public static void main(String[] args) {
		Segmentation1 seg = new Segmentation1();
		seg.setDictionary();
		String response2 = seg.rightMax();
		System.out.println(response2);
	}
}


 
  

能够看到执行结果是:北京/大学生/前来/应聘/

分词效果非常好


相关文章:

  • servlet文件下载2(单文件下载和批量下载)
  • php 上传文件
  • 程序员工作中绕不开的9大问题,你遇到过几个?
  • Adobe将于2020年末停止对Flash的支持
  • quick-cocos2d-x教程9:实例之加上背景图片
  • iOS将数组中的内容分拼接成字符串
  • 如何使用阿里云虚拟主机搭建博客(二)搭建篇
  • create-react-app做的留言板
  • 中国式社交网络就一个“约”字而已
  • 测试人员的GitHub
  • 《企业级ios应用开发实战》一3.7 本章小结
  • GeekPwn黑客选手任意操纵智能烤箱 智能家居存隐患
  • 迈克菲报告指出网络威胁情报共享的阻碍
  • iOS开发-图片浏览器(优化)
  • 微软公司笔试题_附上源码解决
  • ERLANG 网工修炼笔记 ---- UDP
  • go语言学习初探(一)
  • JavaScript对象详解
  • Javascript设计模式学习之Observer(观察者)模式
  • java多线程
  • JS基础之数据类型、对象、原型、原型链、继承
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Nodejs和JavaWeb协助开发
  • php的插入排序,通过双层for循环
  • Python语法速览与机器学习开发环境搭建
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Spring Boot快速入门(一):Hello Spring Boot
  • windows下mongoDB的环境配置
  • 从0实现一个tiny react(三)生命周期
  • 动态规划入门(以爬楼梯为例)
  • 如何学习JavaEE,项目又该如何做?
  • No resource identifier found for attribute,RxJava之zip操作符
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • !!java web学习笔记(一到五)
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2)(2.10) LTM telemetry
  • (BFS)hdoj2377-Bus Pass
  • (HAL库版)freeRTOS移植STMF103
  • (rabbitmq的高级特性)消息可靠性
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (转)C#调用WebService 基础
  • (转)Sublime Text3配置Lua运行环境
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • ..回顾17,展望18
  • .NET Core 中的路径问题
  • .NET NPOI导出Excel详解
  • .NET 反射的使用
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET连接数据库方式