java中文分词算法
package com.huawei.cloud.phone.platform.app.api.web.controller;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class analyzer {
/*** 最大匹配分词算法** @author JYC506*/
private Set<String> set = new HashSet<String>();
private int positiveOver = 0;
private int reverseOver = 0;/*** 正向最大匹配** @param str 要分词的句子* @param maxSize 词的最大长度* @return*/
public String[] positiveSplit(String str, int maxSize) {int tem = 0;int length = str.length();String[] ss = new String[length];char[] cc = str.toCharArray();for (int i = 0; i < length; i++) {positiveOver = 0;String sb = this.toStr(cc, i, maxSize);ss[tem++] = sb;i = i + positiveOver;}String[] ss2 = new String[tem];System.arraycopy(ss, 0, ss2, 0, tem);return ss2;
}/*** 添加词库** @param words*/
public void addWord(String[] words) {for (String st : words) {this.set.add(st);}
}/*** 逆向最大匹配** @param str* @param num* @return*/
public String[] reverseSplit(String str, int num) {int tem = 0;int length = str.length();String[] ss = new String[length];char[] cc = str.toCharArray();for (int i = str.length() - 1; i > -1; i--) {reverseOver = 0;String sb = this.toStr2(cc, i, num);tem++;ss[--length] = sb;i = i - reverseOver;}String[] ss2 = new String[tem];System.arraycopy(ss, str.length() - tem, ss2, 0, tem);return ss2;
}private String toStr(char[] cs, int start, int num) {int num2 = num;out:for (int j = 0; j < num; j++) {StringBuffer sb = new StringBuffer();for (int i = 0; i < num2; i++) {if (start + i < cs.length) {sb.append(cs[start + i]);} else {num2--;j--;continue out;}}if (set.contains(sb.toString())) {positiveOver = num2 - 1;return sb.toString();}num2--;}return String.valueOf(cs[start]);
}private String toStr2(char[] cs, int start, int num) {int num2 = num;for (int j = 0; j < num; j++) {StringBuffer sb = new StringBuffer();for (int i = 0; i < num2; i++) {int index = start - num2 + i + 1;if (index > -1) {sb.append(cs[index]);} else {num2--;}}if (set.contains(sb.toString())) {reverseOver = num2 - 1;return sb.toString();}num2--;}return String.valueOf(cs[start]);
}public static void main(String[] args) {String[] words = new String[]{"我们", "我们五人", "五人一组", "一组"};analyzer ss = new analyzer();/*添加词到词库*/ss.addWord(words);String st = "我们五人一组";System.out.println("脚本之家测试结果:");System.out.println("要分词的句子:" + st);/*使用两种方式分词,下面我指定最大词长度为4*/String[] ss2 = ss.reverseSplit(st, 4);String[] ss1 = ss.positiveSplit(st, 4);System.out.println("正向最大匹配分词算法分词结果:" + Arrays.toString(ss1));System.out.println("逆向最大匹配分词算法分词结果:" + Arrays.toString(ss2));
}
}
java中文分词算法相关推荐
- java中文分词算法_Java实现逆向最大匹配中文分词算法
写道 //Java实现逆向最大匹配中文分词算法 public class SplitChineseCharacter { public static void main(String[] args) ...
- 在Hadoop上运行基于RMM中文分词算法的MapReduce程序
原文:http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-count-on-hadoop/ 在Hadoop上运行基于RMM中文分词 ...
- 入门科普:一文看懂NLP和中文分词算法(附代码举例)
导读:在人类社会中,语言扮演着重要的角色,语言是人类区别于其他动物的根本标志,没有语言,人类的思维无从谈起,沟通交流更是无源之水. 所谓"自然"乃是寓意自然进化形成,是为了区分一些 ...
- java中文分词的简单实现
java中文分词的简单实现 中文分词 算法 算法思路 算法实现 代码及注释 评价 结语 中文分词 通俗来讲,中文分词是指将一句中文句子中的所有中文词汇相互分隔开来.它是文本挖掘的基础,有着十分广阔的应 ...
- 基于字典的中文分词算法RMM,MM实现
引言:目前针对中文分词一般有基于字典,基于统计(HMM等),基于规则的分词方法,然而其中基于字典的中文分词是最基础,同时也是最高效的方式,但分词精度取决与字典的规模. 一.基于字典的中文算法简介 1. ...
- 开源 Java 中文分词器 Ansj 作者孙健专访
Ansj 是一个开源的 Java 中文分词工具,基于中科院的 ictclas 中文分词算法,比其他常用的开源分词工具(如mmseg4j)的分词准确率更高. 在线演示: http://ansj.sdap ...
- Java中文分词组件 - word分词(skycto JEEditor)
转自:https://my.oschina.net/apdplat/blog/228619#OSC_h4_8 Java分布式中文分词组件 - word分词 word分词是一个Java实现的分布式的中文 ...
- 中文分词算法python代码_中文分词算法之最大正向匹配算法(Python版)
最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...
- 正向最大匹配算法 python代码_中文分词算法之最大正向匹配算法(Python版)
最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...
最新文章
- 将字典结果写入excel
- laravel中token的使用方式
- 「LibreOJ β Round #4」子集
- MySQL ORDER BY:对查询结果进行排序
- C++ 类的行为 | 行为像值的类、行为像指针的类、swap函数处理自赋值
- 用示波器对单片机I2C时序进行图形波形分析的试验小结
- 软件测试面试经验之如何测试刷抖音
- 小米账号无故泄露 手机安全问题何解?
- C++第14周项目1 - 动物怎么叫
- oracle的显示和隐式,oracle的显式受权和隐式授权(转)
- flutter上分之路1-新手教学(配置安装)
- Discarded invalid param(s) “msg“ when navigating
- 计算机烧毁,终极:计算机主板烧毁了吗?为什么会燃烧?
- 用少量箭射爆气球,leetcode习题
- 数据预处理之中心化(零均值化)与标准化(归一化)
- 匿名科创--匿名拓空者PRO--开源光流融合算法使用教程
- C#【保留小数点后位数】与【字符串数字格式化】
- java实现图片中内容读取实现方案之阿里云OCR
- 信号与系统 学习笔记 Signals and Systems with Python
- 为android系统添加USB AUDIO设备的放音和录音功能(转载)
热门文章
- Unreal Open Day 2017 参会总结——腾讯逆战游戏项目制作经验分享
- 自然语言处理数据集集锦(持续更新ing...)
- Linux_SSH服务器状态
- rust画质怎么设置不卡顿_rust怎么设置流畅画面图解 | 手游网游页游攻略大全
- 针对微店晓峰音乐公社自动化下单尝试
- 安卓桌面软件_想在电脑上流畅运行安卓软件?尝试一下麒麟Kydroid 2.0系统
- 基民读基金评级常犯四个错误
- EXTJS系列笔记—实现 grid.ColumnModel 中每行后面的操作按钮
- ICRA2022 SLAM进展---激光SLAM
- c语言fscanf读入字符,C语言fprintf()和fscanf()函数