我的编程空间,编程开发者的网络收藏夹
学习永远不晚

最大匹配分词算法怎么在Java项目中实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

最大匹配分词算法怎么在Java项目中实现

最大匹配分词算法怎么在Java项目中实现?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

全文检索有两个重要的过程:

1分词

2倒排索引

我们先看分词算法

目前对中文分词有两个方向,其中一个是利用概率的思想对文章分词。 也就是如果两个字,一起出现的频率很高的话,我们可以假设这两个字是一个词。这里可以用一个公式衡量:M(A,B)=P(AB)/P(A)P(B),其中 A表示一个字,B表示一个字,P(AB)表示AB相邻出现的概率,P(A)表示A在这篇文章中的频度,P(B)表示B在这篇文章中的频度。用概率分词的好 处是不需要借助词典的帮助,坏处是算法比较麻烦,效率不高,也存在一定的出错率。

另外的一个方向是使用词典分词。就是事先为程序准备一个词典,然后通过这个词典对文章分词。目前较流行的方式有正向最大匹配算法和逆向最大匹配算法。逆向最大匹配算法在准确性上要更好一些。

以 “我是一个坏人” 为例,并最大词长为3,词库包含有 我、是、一、个、一个、坏人、大坏人

正向的顺序为

我是一
我是
我 ===> 得到一个词
是一个
是一
是 ===>得到一个词
一个坏
一个===> 得到一个词
坏人===>得到一个词

结果 我、是、一个、坏人

反向算法

个坏人
坏人==> 坏人
是一个
一个==> 一个
我是
是==> 是
我==> 我

结果 我、是、一个、坏人

java代码如下

package data;import java.util.Arrays;import java.util.HashSet;import java.util.Set;public class SplitString { private Set<String> set = new HashSet<String>(); private int positiveOver = 0; private int reverseOver = 0;  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; }  public void addWord(String[] words) {  for (String st : words) {   this.set.add(st);  } }  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[] { "我们", "我们五人", "五人一组", "一组" };  SplitString ss = new SplitString();    ss.addWord(words);  String st = "我们五人一组";  System.out.println("编程网测试结果:");  System.out.println("要分词的句子:" + st);    String[] ss2 = ss.reverseSplit(st, 4);  String[] ss1 = ss.positiveSplit(st, 4);  System.out.println("正向最大匹配分词算法分词结果:" + Arrays.toString(ss1));  System.out.println("逆向最大匹配分词算法分词结果:" + Arrays.toString(ss2)); }}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

最大匹配分词算法怎么在Java项目中实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

最大匹配分词算法怎么在Java项目中实现

最大匹配分词算法怎么在Java项目中实现?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。全文检索有两个重要的过程:1分词2倒排索引我们先看分词算法目前对中文分词有两个方向,其
2023-05-31

怎么在Java中实现一个双向匹配分词算法

本篇文章为大家展示了怎么在Java中实现一个双向匹配分词算法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。正向最大匹配分词:该算法是基于分词词典实现,从字符串左侧进行分割匹配,如果词典存在则返回分割
2023-05-30

怎么在Java项目中利用BigInteger 实现大数字运算

这篇文章给大家介绍怎么在Java项目中利用BigInteger 实现大数字运算,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 在 Java 中,有许多数字处理的类,比如 Integer 类。但是Inte
2023-05-31

怎么在java项目中实现一个海盗算法

今天就跟大家聊聊有关怎么在java项目中实现一个海盗算法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。具体方法如下:package unit4;public class Pirate
2023-05-31

怎么在Java项目中实现一个堆排序算法

怎么在Java项目中实现一个堆排序算法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。堆是数据结构中的一种重要结构,了解“堆”的概念和操作,可以帮助我们快速地掌握堆排序。堆的
2023-05-31

怎么在Java项目中实现一个求逆矩阵算法

这篇文章给大家介绍怎么在Java项目中实现一个求逆矩阵算法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。实现方法如下:package demo;public class MatrixInverse { public
2023-05-31

怎么在java项目中实现一个二叉查找树算法

今天就跟大家聊聊有关怎么在java项目中实现一个二叉查找树算法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。具体内容如下package 查找;import edu.princeton
2023-05-31

冒泡排序与二分算法如何在java 项目中实现

冒泡排序与二分算法如何在java 项目中实现?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、冒泡算法的原理:冒泡排序算法的一般性策略:搜索整个值列,比较相邻元素,如果两者
2023-05-31

怎么在Java项目中实现一个分页功能

怎么在Java项目中实现一个分页功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。分页对象public class PageUtils implements Seriali
2023-05-31

静态工厂方法怎么在Java项目中实现

今天就跟大家聊聊有关静态工厂方法怎么在Java项目中实现,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是静态工厂方法对于类而言,为了让使用者获取它自身的一个实例,最常用的方法就是
2023-05-31

怎么在java项目中实现一个黄金分割数

本文章向大家介绍怎么在java项目中实现一个黄金分割数的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用
2023-06-06

怎么在Java项目中实现一个工厂方法模式

本篇文章为大家展示了怎么在Java项目中实现一个工厂方法模式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录