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中文分词算法相关推荐

  1. java中文分词算法_Java实现逆向最大匹配中文分词算法

    写道 //Java实现逆向最大匹配中文分词算法 public class SplitChineseCharacter { public static void main(String[] args) ...

  2. 在Hadoop上运行基于RMM中文分词算法的MapReduce程序

    原文:http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-count-on-hadoop/ 在Hadoop上运行基于RMM中文分词 ...

  3. 入门科普:一文看懂NLP和中文分词算法(附代码举例)

    导读:在人类社会中,语言扮演着重要的角色,语言是人类区别于其他动物的根本标志,没有语言,人类的思维无从谈起,沟通交流更是无源之水. 所谓"自然"乃是寓意自然进化形成,是为了区分一些 ...

  4. java中文分词的简单实现

    java中文分词的简单实现 中文分词 算法 算法思路 算法实现 代码及注释 评价 结语 中文分词 通俗来讲,中文分词是指将一句中文句子中的所有中文词汇相互分隔开来.它是文本挖掘的基础,有着十分广阔的应 ...

  5. 基于字典的中文分词算法RMM,MM实现

    引言:目前针对中文分词一般有基于字典,基于统计(HMM等),基于规则的分词方法,然而其中基于字典的中文分词是最基础,同时也是最高效的方式,但分词精度取决与字典的规模. 一.基于字典的中文算法简介 1. ...

  6. 开源 Java 中文分词器 Ansj 作者孙健专访

    Ansj 是一个开源的 Java 中文分词工具,基于中科院的 ictclas 中文分词算法,比其他常用的开源分词工具(如mmseg4j)的分词准确率更高. 在线演示: http://ansj.sdap ...

  7. Java中文分词组件 - word分词(skycto JEEditor)

    转自:https://my.oschina.net/apdplat/blog/228619#OSC_h4_8 Java分布式中文分词组件 - word分词 word分词是一个Java实现的分布式的中文 ...

  8. 中文分词算法python代码_中文分词算法之最大正向匹配算法(Python版)

    最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...

  9. 正向最大匹配算法 python代码_中文分词算法之最大正向匹配算法(Python版)

    最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...

最新文章

  1. 将字典结果写入excel
  2. laravel中token的使用方式
  3. 「LibreOJ β Round #4」子集
  4. MySQL ORDER BY:对查询结果进行排序
  5. C++ 类的行为 | 行为像值的类、行为像指针的类、swap函数处理自赋值
  6. 用示波器对单片机I2C时序进行图形波形分析的试验小结
  7. 软件测试面试经验之如何测试刷抖音
  8. 小米账号无故泄露 手机安全问题何解?
  9. C++第14周项目1 - 动物怎么叫
  10. oracle的显示和隐式,oracle的显式受权和隐式授权(转)
  11. flutter上分之路1-新手教学(配置安装)
  12. Discarded invalid param(s) “msg“ when navigating
  13. 计算机烧毁,终极:计算机主板烧毁了吗?为什么会燃烧?
  14. 用少量箭射爆气球,leetcode习题
  15. 数据预处理之中心化(零均值化)与标准化(归一化)
  16. 匿名科创--匿名拓空者PRO--开源光流融合算法使用教程
  17. C#【保留小数点后位数】与【字符串数字格式化】
  18. java实现图片中内容读取实现方案之阿里云OCR
  19. 信号与系统 学习笔记 Signals and Systems with Python
  20. 为android系统添加USB AUDIO设备的放音和录音功能(转载)

热门文章

  1. Unreal Open Day 2017 参会总结——腾讯逆战游戏项目制作经验分享
  2. 自然语言处理数据集集锦(持续更新ing...)
  3. Linux_SSH服务器状态
  4. rust画质怎么设置不卡顿_rust怎么设置流畅画面图解 | 手游网游页游攻略大全
  5. 针对微店晓峰音乐公社自动化下单尝试
  6. 安卓桌面软件_想在电脑上流畅运行安卓软件?尝试一下麒麟Kydroid 2.0系统
  7. 基民读基金评级常犯四个错误
  8. EXTJS系列笔记—实现 grid.ColumnModel 中每行后面的操作按钮
  9. ICRA2022 SLAM进展---激光SLAM
  10. c语言fscanf读入字符,C语言fprintf()和fscanf()函数